]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ceph: Amend checking to fix `make W=1` build breakage
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 10 Nov 2025 14:44:04 +0000 (15:44 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Wed, 10 Dec 2025 10:50:54 +0000 (11:50 +0100)
In a few cases the code compares 32-bit value to a SIZE_MAX derived
constant which is much higher than that value on 64-bit platforms,
Clang, in particular, is not happy about this

fs/ceph/snap.c:377:10: error: result of comparison of constant 2305843009213693948 with expression of type 'u32' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
  377 |         if (num > (SIZE_MAX - sizeof(*snapc)) / sizeof(u64))
      |             ~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fix this by casting to size_t. Note, that possible replacement of SIZE_MAX
by U32_MAX may lead to the behaviour changes on the corner cases.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/snap.c

index c65f2b202b2b3e8bf9055f046a5d9a848c13b6b0..521507ea826000eaa705bdba12d2133063665ee6 100644 (file)
@@ -374,7 +374,7 @@ static int build_snap_context(struct ceph_mds_client *mdsc,
 
        /* alloc new snap context */
        err = -ENOMEM;
-       if (num > (SIZE_MAX - sizeof(*snapc)) / sizeof(u64))
+       if ((size_t)num > (SIZE_MAX - sizeof(*snapc)) / sizeof(u64))
                goto fail;
        snapc = ceph_create_snap_context(num, GFP_NOFS);
        if (!snapc)