]> git.apps.os.sepia.ceph.com Git - ceph-client.git/commitdiff
debug
authorAlex Markuze <amarkuze@redhat.com>
Wed, 19 Mar 2025 13:33:37 +0000 (13:33 +0000)
committerAlex Markuze <amarkuze@redhat.com>
Wed, 19 Mar 2025 13:33:37 +0000 (13:33 +0000)
include/linux/ceph/ceph_san_logger.h
net/ceph/ceph_san_logger.c

index 6d6dc6d006701638d7c741e2a9d2eee8bad6f39f..5b9cf02a477427ca20c88806f63169ed2028fbff 100644 (file)
@@ -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 */
index 384d5edee2ce8a17e033965dc649317b3794d853..2b6a0e40341d1c60d43f8e4ff10e1692d25a6474 100644 (file)
@@ -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;
 }