From: Kefu Chai Date: Thu, 29 Mar 2018 01:38:29 +0000 (+0800) Subject: osd: cap snaptrimq_len at 2^32 X-Git-Tag: v13.1.0~450^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9ad74072221b40b58902c516b9201e337617d38c;p=ceph.git osd: cap snaptrimq_len at 2^32 (uint64_t)(1 << 31) evaluates to 0xffffffff80000000 instead of 0x80000000, because the converted signed number is sign-extended. Signed-off-by: Kefu Chai --- diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index bf18c00e9044..74b84c0191cd 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -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);