From: Pritha Srivastava Date: Wed, 27 May 2020 08:40:20 +0000 (+0530) Subject: cls/rgw_gc: Clearing off urgent data in bufferlist, before X-Git-Tag: v16.1.0~2182^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=182382cf6368eaa6f9d1efbb883ae7813a9bf6d0;p=ceph.git cls/rgw_gc: Clearing off urgent data in bufferlist, before encoding the updated one. If this is not done, urgent data keeps getting appended to the head, finally overwriting queue data that results in invalid entries. Signed-off-by: Pritha Srivastava --- diff --git a/src/cls/queue/cls_queue_src.cc b/src/cls/queue/cls_queue_src.cc index de23db73c89..8806b580497 100644 --- a/src/cls/queue/cls_queue_src.cc +++ b/src/cls/queue/cls_queue_src.cc @@ -27,6 +27,11 @@ int queue_write_head(cls_method_context_t hctx, cls_queue_head& head) bl.claim_append(bl_head); + if (bl.length() > head.max_head_size) { + CLS_LOG(0, "ERROR: queue_write_head: invalid head size = %u and urgent data size = %u \n", bl.length(), head.bl_urgent_data.length()); + return -EINVAL; + } + int ret = cls_cxx_write2(hctx, 0, bl.length(), &bl, CEPH_OSD_OP_FLAG_FADVISE_WILLNEED); if (ret < 0) { CLS_LOG(5, "ERROR: queue_write_head: failed to write head"); diff --git a/src/cls/rgw_gc/cls_rgw_gc.cc b/src/cls/rgw_gc/cls_rgw_gc.cc index 58369a2970a..cbed0a26e5c 100644 --- a/src/cls/rgw_gc/cls_rgw_gc.cc +++ b/src/cls/rgw_gc/cls_rgw_gc.cc @@ -369,7 +369,9 @@ static int cls_rgw_gc_queue_remove_entries(cls_method_context_t hctx, bufferlist } //Update urgent data map + head.bl_urgent_data.clear(); encode(urgent_data, head.bl_urgent_data); + CLS_LOG(5, "INFO: cls_rgw_gc_queue_remove_entries(): Urgent data size is %u\n", head.bl_urgent_data.length()); return queue_write_head(hctx, head); }