diff options
author | Amy Chiang <amychiang@qnap.com> | 2018-05-16 18:59:35 +0800 |
---|---|---|
committer | Shaohua Li <shli@fb.com> | 2018-05-17 09:56:00 -0700 |
commit | 448ec638c6bcf36923db695b6188373b933e7ddc (patch) | |
tree | 93f2a31884891c877ea6fd7e4d4cdcd70119490a /drivers/md/md.h | |
parent | b33d10624fdc15cdf1495f3f00481afccec76783 (diff) | |
download | linux-448ec638c6bcf36923db695b6188373b933e7ddc.tar.gz |
md/raid5: Assigning NULL to sh->batch_head before testing bit R5_Overlap of a stripe
In add_stripe_bio(), if the stripe_head is in batch list, the incoming
bio is regarded as overlapping, and the bit R5_Overlap on this stripe_head
is set. break_stripe_batch_list() checks bit R5_Overlap on each stripe_head
first then assigns NULL to sh->batch_head.
If break_stripe_batch_list() checks bit R5_Overlap on stripe_head A
after add_stripe_bio() finds stripe_head A is in batch list and before
add_stripe_bio() sets bit R5_Overlapt of stripe_head A,
break_stripe_batch_list() would not know there's a process in
wait_for_overlap and needs to call wake_up(). There's a huge chance a
process never returns from schedule() if add_stripe_bio() is called
from raid5_make_request().
In break_stripe_batch_list(), assigning NULL to sh->batch_head should
be done before it checks bit R5_Overlap of a stripe_head.
Signed-off-by: Amy Chiang <amychiang@qnap.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Diffstat (limited to 'drivers/md/md.h')
0 files changed, 0 insertions, 0 deletions