From 6b8dc07ddf5f9d11f342934846855b4071f7147c Mon Sep 17 00:00:00 2001 From: Alex Markuze Date: Tue, 18 Mar 2025 20:44:27 +0000 Subject: [PATCH] pf: debugging pf corruption --- net/ceph/ceph_san_logger.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/net/ceph/ceph_san_logger.c b/net/ceph/ceph_san_logger.c index 1862b22a9612b..2cc29e1e7e1af 100644 --- a/net/ceph/ceph_san_logger.c +++ b/net/ceph/ceph_san_logger.c @@ -143,6 +143,7 @@ void ceph_san_log(const char *file, const char *func, unsigned int line, const c alloc = cephsan_pagefrag_alloc(&ctx->pf, needed_size); int loop_count = 0; while (!alloc) { + entry = cephsan_pagefrag_get_ptr_from_tail(&ctx->pf); if (loop_count++ >= 32) { pr_err("ceph_san_log: pagefrag stats - head: %u, tail: %u, size: %u, free: %d\n", ctx->pf.head, ctx->pf.tail, @@ -153,9 +154,16 @@ void ceph_san_log(const char *file, const char *func, unsigned int line, const c panic("ceph_san_log: failed to allocate entry after 8 retries"); } - entry = cephsan_pagefrag_get_ptr_from_tail(&ctx->pf); - BUG_ON(entry->debug_poison != CEPH_SAN_LOG_ENTRY_POISON); - BUG_ON(entry->len == 0); + if (entry->debug_poison != CEPH_SAN_LOG_ENTRY_POISON || entry->len == 0) { + pr_err("ceph_san_log: pagefrag corruption detected\n"); + pr_err(" head: %u, tail: %u, size: %u\n", + ctx->pf.head, ctx->pf.tail, CEPHSAN_PAGEFRAG_SIZE); + pr_err(" active_elements: %u, alloc_count: %u\n", + ctx->pf.active_elements, ctx->pf.alloc_count); + pr_err(" entry poison: %llx, len: %u\n", + entry->debug_poison, entry->len); + BUG(); + } cephsan_pagefrag_free(&ctx->pf, entry->len); alloc = cephsan_pagefrag_alloc(&ctx->pf, needed_size); } -- 2.39.5