]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
more stats on pf
authorAlex Markuze <amarkuze@redhat.com>
Tue, 18 Mar 2025 20:34:03 +0000 (20:34 +0000)
committerAlex Markuze <amarkuze@redhat.com>
Tue, 18 Mar 2025 20:34:03 +0000 (20:34 +0000)
include/linux/ceph/ceph_san_pagefrag.h
net/ceph/ceph_san_logger.c
net/ceph/ceph_san_pagefrag.c

index 3ea5ba460d1f449dd3f28dd57110df4373b3273b..bd6c285af3510101af391a827954a1f8d2f215f4 100644 (file)
@@ -16,6 +16,7 @@ struct cephsan_pagefrag {
     unsigned int head;
     unsigned int tail;
     unsigned int alloc_count;
+    int active_elements;
 };
 
 int cephsan_pagefrag_init(struct cephsan_pagefrag *pf);
index 06138396eeac072bdd90cb731b9f795bcee868eb..1862b22a9612b8f0fbfb8a2ea22fc04a0f014407 100644 (file)
@@ -265,22 +265,9 @@ struct ceph_san_log_entry *ceph_san_log_iter_next(struct ceph_san_log_iter *iter
     entry = cephsan_pagefrag_get_ptr(iter->pf, iter->current_offset);
     /* Verify entry is valid */
     if (!entry || entry->debug_poison != CEPH_SAN_LOG_ENTRY_POISON || entry->len == 0) {
-        /* Get previous entry if available */
-        struct ceph_san_log_entry *prev_entry = NULL;
-        prev_entry = cephsan_pagefrag_get_ptr(iter->pf, iter->prev_offset);
-        pr_err("Previous entry: entry=%px poison=%llx len=%u prev_offset=%llu\n",
-                prev_entry, prev_entry->debug_poison, prev_entry->len, iter->prev_offset);
-
-        iter->prev_offset = iter->current_offset;
-        iter->current_offset = iter->end_offset;
-        pr_err("Pagefrag corruption detected: entry=%px poison=%llx len=%u\n"
-               "pf: head=%u tail=%u buffer=%px alloc_count=%u prev_offset=%llu\n",
-               entry, entry->debug_poison, entry->len,
-               iter->pf->head, iter->pf->tail, iter->pf->buffer,
-               iter->pf->alloc_count, iter->prev_offset);
-
-        BUG_ON(entry->debug_poison != CEPH_SAN_LOG_ENTRY_POISON);
-        return NULL;
+        //This maybe legitimate the head doesnt have to be aligned to the tail
+        //if the last free was bigger than need alloc size
+       return NULL;
     }
 
     /* Store current offset before moving to next */
index 22b37f1545e3153ce830c684d7552e6a3b3fcfda..873197e7ca396b125e94bf67a121084fff99e6a0 100644 (file)
@@ -20,6 +20,8 @@ int cephsan_pagefrag_init(struct cephsan_pagefrag *pf)
     pf->buffer = page_address(pf->pages);
     pf->head = 0;
     pf->tail = 0;
+    pf->active_elements = 0;
+    pf->alloc_count = 0;
     return 0;
 }
 EXPORT_SYMBOL(cephsan_pagefrag_init);
@@ -39,6 +41,8 @@ int cephsan_pagefrag_init_with_buffer(struct cephsan_pagefrag *pf, void *buffer,
     pf->buffer = buffer;
     pf->head = 0;
     pf->tail = 0;
+    pf->active_elements = 0;
+    pf->alloc_count = 0;
     return 0;
 }
 EXPORT_SYMBOL(cephsan_pagefrag_init_with_buffer);
@@ -62,6 +66,7 @@ u64 cephsan_pagefrag_alloc(struct cephsan_pagefrag *pf, unsigned int n)
         if (pf->tail - pf->head > n) {
             pf->head += n;
             pf->alloc_count++;
+            pf->active_elements++;
             return ((u64)n << 32) | prev_head;
         } else {
             return 0;
@@ -71,10 +76,11 @@ u64 cephsan_pagefrag_alloc(struct cephsan_pagefrag *pf, unsigned int n)
     if (delta >= 0) {
         /* Normal allocation */
         /* make sure we have enough space to allocate next entry */
+        pf->alloc_count++;
+        pf->active_elements++;
         if (unlikely(delta < 64)) {
             n += delta;
             pf->head = 0;
-            pf->alloc_count++;
             return ((u64)n << 32) | prev_head;
         }
         pf->head += n;
@@ -84,6 +90,7 @@ u64 cephsan_pagefrag_alloc(struct cephsan_pagefrag *pf, unsigned int n)
             /* Need to wrap around return a partial allocation*/
             pf->head = n;
             pf->alloc_count++;
+            pf->active_elements++;
             return ((u64)(delta + n) << 32) | prev_head;
         } else {
             return 0;
@@ -150,6 +157,7 @@ EXPORT_SYMBOL(cephsan_pagefrag_get_ptr_from_tail);
 void cephsan_pagefrag_free(struct cephsan_pagefrag *pf, unsigned int n)
 {
     pf->tail = (pf->tail + n) & (CEPHSAN_PAGEFRAG_SIZE - 1);
+    pf->active_elements--;
 }
 EXPORT_SYMBOL(cephsan_pagefrag_free);
 
@@ -181,6 +189,7 @@ void cephsan_pagefrag_reset(struct cephsan_pagefrag *pf)
     pf->head = 0;
     pf->tail = 0;
     pf->alloc_count = 0;
+    pf->active_elements = 0;
     spin_unlock(&pf->lock);
 }
 EXPORT_SYMBOL(cephsan_pagefrag_reset);