]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: cap snaptrimq_len at 2^32 21107/head
authorKefu Chai <kchai@redhat.com>
Thu, 29 Mar 2018 01:38:29 +0000 (09:38 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 29 Mar 2018 05:44:09 +0000 (13:44 +0800)
(uint64_t)(1 << 31) evaluates to 0xffffffff80000000 instead of 0x80000000,
because the converted signed number is sign-extended.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/osd/osd_types.h

index bf18c00e9044f82d0b5103668fbbe8616d5cb8ef..74b84c0191cd07e60d42dd90a2757c643c60dace 100644 (file)
@@ -2030,11 +2030,8 @@ struct pg_stat_t {
     stats.add(o.stats);
     log_size += o.log_size;
     ondisk_log_size += o.ondisk_log_size;
-    if (((uint64_t)snaptrimq_len + (uint64_t)o.snaptrimq_len) > (uint64_t)(1 << 31)) {
-      snaptrimq_len = 1 << 31;
-    } else {
-      snaptrimq_len += o.snaptrimq_len;
-    }
+    snaptrimq_len = std::min((uint64_t)snaptrimq_len + o.snaptrimq_len,
+                             (uint64_t)(1ull << 31));
   }
   void sub(const pg_stat_t& o) {
     stats.sub(o.stats);