From: Li Nan Date: Thu, 27 Feb 2025 07:54:58 +0000 (+0800) Subject: badblocks: attempt to merge adjacent badblocks during ack_all_badblocks X-Git-Tag: v6.15-rc1~166^2~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=32e9ad4d11f69949ff331e35a417871ee0d31d99;p=thirdparty%2Flinux.git badblocks: attempt to merge adjacent badblocks during ack_all_badblocks If ack and unack badblocks are adjacent, they will not be merged and will remain as two separate badblocks. Even after the bad blocks are written to disk and both become ack, they will still remain as two independent bad blocks. This is not ideal as it wastes the limited space for badblocks. Therefore, during ack_all_badblocks(), attempt to merge badblocks if they are adjacent. Fixes: aa511ff8218b ("badblocks: switch to the improved badblock handling code") Signed-off-by: Li Nan Reviewed-by: Yu Kuai Acked-by: Coly Li Link: https://lore.kernel.org/r/20250227075507.151331-4-zhengqixing@huaweicloud.com Signed-off-by: Jens Axboe --- diff --git a/block/badblocks.c b/block/badblocks.c index f069c93e986df..ad8652fbe1c8f 100644 --- a/block/badblocks.c +++ b/block/badblocks.c @@ -1491,6 +1491,11 @@ void ack_all_badblocks(struct badblocks *bb) p[i] = BB_MAKE(start, len, 1); } } + + for (i = 0; i < bb->count ; i++) + while (try_adjacent_combine(bb, i)) + ; + bb->unacked_exist = 0; } write_sequnlock_irq(&bb->lock);