From b27712cfa7ce33ae5c02e0b51e3a17a4d602f9ce Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Wed, 17 Oct 2018 14:50:18 -0400 Subject: [PATCH] cls/user: cls_user_remove_bucket writes modified header if cls_user_remove_bucket() modifies the header with dec_header_stats(), it should write the updated header back Fixes: http://tracker.ceph.com/issues/36496 Signed-off-by: Casey Bodley (cherry picked from commit dac26de1fa7b56ce0ec2fd43d26ab9a9b6a32e3d) --- src/cls/user/cls_user.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/cls/user/cls_user.cc b/src/cls/user/cls_user.cc index 9a9c5bd9f7ebb..2c1ced368cd65 100644 --- a/src/cls/user/cls_user.cc +++ b/src/cls/user/cls_user.cc @@ -254,17 +254,23 @@ static int cls_user_remove_bucket(cls_method_context_t hctx, bufferlist *in, buf return ret; } - if (entry.user_stats_sync) { - dec_header_stats(&header.stats, entry); - } - CLS_LOG(20, "removing entry at %s", key.c_str()); ret = remove_entry(hctx, key); if (ret < 0) return ret; - - return 0; + + if (!entry.user_stats_sync) { + return 0; + } + + dec_header_stats(&header.stats, entry); + + CLS_LOG(20, "header: total bytes=%lld entries=%lld", (long long)header.stats.total_bytes, (long long)header.stats.total_entries); + + bufferlist bl; + encode(header, bl); + return cls_cxx_map_write_header(hctx, &bl); } static int cls_user_list_buckets(cls_method_context_t hctx, bufferlist *in, bufferlist *out) -- 2.39.5