mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
md/md-llbitmap: raise barrier before state machine transition
Move the barrier raise operation before calling llbitmap_state_machine()
in both llbitmap_start_write() and llbitmap_start_discard(). This
ensures the barrier is in place before any state transitions occur,
preventing potential race conditions where the state machine could
complete before the barrier is properly raised.
Cc: stable@vger.kernel.org
Fixes: 5ab829f197 ("md/md-llbitmap: introduce new lockless bitmap")
Link: https://lore.kernel.org/linux-raid/20260223024038.3084853-3-yukuai@fnnas.com
Signed-off-by: Yu Kuai <yukuai@fnnas.com>
This commit is contained in:
parent
7701e68b50
commit
ef4ca3d4bf
|
|
@ -1070,12 +1070,12 @@ static void llbitmap_start_write(struct mddev *mddev, sector_t offset,
|
|||
int page_start = (start + BITMAP_DATA_OFFSET) >> PAGE_SHIFT;
|
||||
int page_end = (end + BITMAP_DATA_OFFSET) >> PAGE_SHIFT;
|
||||
|
||||
llbitmap_state_machine(llbitmap, start, end, BitmapActionStartwrite);
|
||||
|
||||
while (page_start <= page_end) {
|
||||
llbitmap_raise_barrier(llbitmap, page_start);
|
||||
page_start++;
|
||||
}
|
||||
|
||||
llbitmap_state_machine(llbitmap, start, end, BitmapActionStartwrite);
|
||||
}
|
||||
|
||||
static void llbitmap_end_write(struct mddev *mddev, sector_t offset,
|
||||
|
|
@ -1102,12 +1102,12 @@ static void llbitmap_start_discard(struct mddev *mddev, sector_t offset,
|
|||
int page_start = (start + BITMAP_DATA_OFFSET) >> PAGE_SHIFT;
|
||||
int page_end = (end + BITMAP_DATA_OFFSET) >> PAGE_SHIFT;
|
||||
|
||||
llbitmap_state_machine(llbitmap, start, end, BitmapActionDiscard);
|
||||
|
||||
while (page_start <= page_end) {
|
||||
llbitmap_raise_barrier(llbitmap, page_start);
|
||||
page_start++;
|
||||
}
|
||||
|
||||
llbitmap_state_machine(llbitmap, start, end, BitmapActionDiscard);
|
||||
}
|
||||
|
||||
static void llbitmap_end_discard(struct mddev *mddev, sector_t offset,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user