Re: [PATCH] md/raid5: protect bitmap batch counters aka seq_flush/seq_write consistency
"yu kuai" <[email protected]> Thu, 30 Jul 2026 15:40:40 +0800
| Newsgroups | gmane.linux.raid,gmane.linux.kernel |
|---|---|
| Message-ID | <[email protected]> |
在 2026/6/22 20:46, Chen Cheng 写道: > From: Chen Cheng<[email protected]> > > kcsan detect race : > - raid5d() closes the current bitmap batch by updating > conf->seq_flush under conf->device_lock. > - __add_stripe_bio() read conf->seq_flush without that > lock when assigning sh->bm_seq. > > so, protect seq_flush/seq_write consistency for multiple CPUs by > READ_ONCE()/WRITE_ONCE() under the path without held device_lock. > > re-explain the stripe batch sequence number update flow: > 1. sh->bm_seq declare which batch number the stripe belongs to > when perform bitmap-related write. > ==> bm_seq = seq_flush+1 > > 2. stripe be handled, > * if sh->bm_seq - conf->seq_write > 0, means the > batch stripes **newer than** the last written > batch, it cannot proceed yet, queued on bitmap_list. > * otherwise , has already proceed. > > 3. raid5d() `++seq_flush` to closes the current batch, means > * no more stripes join that old batch > * just-closed batch ready to write-out to disk > > 4. raid5d() calls bitmap hooks unplug() or writeout, then, > `++seq_write` to the same as bm_seq. > > - seq_flush - for producer, to close batches. > - seq_write - for consumer, the checkpoint number. > > the report: > ==================================== > BUG: KCSAN: data-race in __add_stripe_bio / raid5d > > write to 0xffff88ba5625d470 of 4 bytes by task 82401 on cpu 0: > raid5d+0x1d9/0xba0 > [.....] > > read to 0xffff88ba5625d470 of 4 bytes by task 82421 on cpu 8: > __add_stripe_bio+0x332/0x400 > raid5_make_request+0x6ac/0x2930 > md_handle_request+0x4a2/0xa40 > md_submit_bio+0x109/0x1a0 > __submit_bio+0x2ec/0x390 > [.....] > > Fixes: 7c13edc87510f ("md: incorporate new plugging into raid5.") > > v1 -> v2: > - remove WRITE_ONCE(conf->seq_write) in held device_lock path. > - remove READ_ONCE(conf->seq_flush) in held device_lock path. > > Signed-off-by: Chen Cheng<[email protected]> > --- > drivers/md/raid5.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) Applied to md-7.3 -- Thanks, Kuai