md/md-llbitmap: introduce new lockless bitmap
authorYu Kuai <yukuai3@huawei.com>
Fri, 29 Aug 2025 08:04:26 +0000 (16:04 +0800)
committerYu Kuai <yukuai3@huawei.com>
Sat, 6 Sep 2025 09:27:51 +0000 (17:27 +0800)
commit5ab829f1971dc99f2aac10846c378e67fc875abc
treed7bfa7304d225546e90a9e51cfbc31b0952b18a8
parent66be318e6659d10e90f487e2610409cef659dbfe
md/md-llbitmap: introduce new lockless bitmap

Redundant data is used to enhance data fault tolerance, and the storage
method for redundant data vary depending on the RAID levels. And it's
important to maintain the consistency of redundant data.

Bitmap is used to record which data blocks have been synchronized and which
ones need to be resynchronized or recovered. Each bit in the bitmap
represents a segment of data in the array. When a bit is set, it indicates
that the multiple redundant copies of that data segment may not be
consistent. Data synchronization can be performed based on the bitmap after
power failure or readding a disk. If there is no bitmap, a full disk
synchronization is required.

Due to known performance issues with md-bitmap and the unreasonable
implementations:

 - self-managed IO submitting like filemap_write_page();
 - global spin_lock

I have decided not to continue optimizing based on the current bitmap
implementation, this new bitmap is invented without locking from IO fast
path and can be used with fast disks.

For designs and details, see the comments in drivers/md-llbitmap.c.

Link: https://lore.kernel.org/linux-raid/20250829080426.1441678-12-yukuai1@huaweicloud.com
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Li Nan <linan122@huawei.com>
Documentation/admin-guide/md.rst
drivers/md/Kconfig
drivers/md/Makefile
drivers/md/md-bitmap.c
drivers/md/md-bitmap.h
drivers/md/md-llbitmap.c [new file with mode: 0644]
drivers/md/md.c
drivers/md/md.h