Message ID | 20250221081109.734170-4-zhengqixing@huaweicloud.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | badblocks: bugfix and cleanup for badblocks | expand |
在 2025/02/21 16:11, Zheng Qixing 写道: > From: Li Nan <linan122@huawei.com> > > 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 <linan122@huawei.com> > --- > block/badblocks.c | 5 +++++ > 1 file changed, 5 insertions(+) > LGTM Reviewed-by: Yu Kuai <yukuai3@huawei.com> > diff --git a/block/badblocks.c b/block/badblocks.c > index f069c93e986d..ad8652fbe1c8 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); >
On Fri, Feb 21, 2025 at 04:11:00PM +0800, Zheng Qixing wrote: > From: Li Nan <linan122@huawei.com> > > 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 <linan122@huawei.com> Looks good to me. Acked-by: Coly Li <colyli@kernel.org> Thanks. > --- > block/badblocks.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/block/badblocks.c b/block/badblocks.c > index f069c93e986d..ad8652fbe1c8 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); > -- > 2.39.2 >
diff --git a/block/badblocks.c b/block/badblocks.c index f069c93e986d..ad8652fbe1c8 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);