From: Alex Markuze Date: Wed, 19 Mar 2025 13:33:37 +0000 (+0000) Subject: debug X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a2db3a5eaa1842ab73dbfbb3d670d760bfe2ca99;p=ceph-client.git debug --- diff --git a/include/linux/ceph/ceph_san_logger.h b/include/linux/ceph/ceph_san_logger.h index 6d6dc6d006701..5b9cf02a47742 100644 --- a/include/linux/ceph/ceph_san_logger.h +++ b/include/linux/ceph/ceph_san_logger.h @@ -45,6 +45,7 @@ struct ceph_san_log_iter { u64 current_offset; /* Current offset in pagefrag */ u64 end_offset; /* End offset in pagefrag */ u64 prev_offset; /* Previous offset for debugging */ + u64 steps; /* Number of steps taken */ }; /* Initialize the iterator for a specific pagefrag */ diff --git a/net/ceph/ceph_san_logger.c b/net/ceph/ceph_san_logger.c index 384d5edee2ce8..2b6a0e40341d1 100644 --- a/net/ceph/ceph_san_logger.c +++ b/net/ceph/ceph_san_logger.c @@ -252,6 +252,7 @@ void ceph_san_log_iter_init(struct ceph_san_log_iter *iter, struct cephsan_pagef { /* Initialize iterator state */ iter->pf = pf; + iter->steps = 0; iter->current_offset = pf->tail; iter->end_offset = pf->head; iter->prev_offset = pf->tail; @@ -279,11 +280,27 @@ struct ceph_san_log_entry *ceph_san_log_iter_next(struct ceph_san_log_iter *iter //if the last free was bigger than need alloc size return NULL; } + if (iter->steps > iter->pf->active_elements) { + pr_err("ceph_san_log_iter_next: steps: %u, active_elements: %u\n", + iter->steps, iter->pf->active_elements); + pr_err("ceph_san_log_iter_next: pagefrag details:\n" + " head: %u, tail: %u, current: %llu\n" + " prev_offset: %llu, end_offset: %llu\n" + " active_elements: %d, alloc_count: %u\n" + " wrap_to_end: %u, wrap_around: %u\n", + iter->pf->head, iter->pf->tail, iter->current_offset, + iter->prev_offset, iter->end_offset, + iter->pf->active_elements, iter->pf->alloc_count, + iter->pf->wrap_to_end, iter->pf->wrap_around); + + BUG(); + } + iter->steps++; /* Store current offset before moving to next */ iter->prev_offset = iter->current_offset; /* Move to next entry */ - iter->current_offset += entry->len & CEPHSAN_PAGEFRAG_MASK; + iter->current_offset = (iter->current_offset + entry->len) & CEPHSAN_PAGEFRAG_MASK; return entry; }