From 9ad74072221b40b58902c516b9201e337617d38c Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 29 Mar 2018 09:38:29 +0800 Subject: [PATCH] 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 --- src/osd/osd_types.h | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index bf18c00e9044f..74b84c0191cd0 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); -- 2.39.5