diff options
author | Dan Williams <dan.j.williams@intel.com> | 2007-09-24 10:06:13 -0700 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2007-09-24 13:23:35 -0700 |
commit | e4d84909dd48b5e5806a5d18b881e1ca1610ba9b (patch) | |
tree | 85aa712ebc034a31b9a2a5db2f0e7ce4951cb440 /drivers/isdn/sc/hardware.h | |
parent | 6247cdc2cd334dad0ea5428245a7d8f4b075f21e (diff) | |
download | linux-e4d84909dd48b5e5806a5d18b881e1ca1610ba9b.tar.gz linux-e4d84909dd48b5e5806a5d18b881e1ca1610ba9b.tar.bz2 linux-e4d84909dd48b5e5806a5d18b881e1ca1610ba9b.zip |
raid5: fix 2 bugs in ops_complete_biofill
1/ ops_complete_biofill tried to avoid calling handle_stripe since all the
state necessary to return read completions is available. However the
process of determining whether more read requests are pending requires
locking the stripe (to block add_stripe_bio from updating dev->toead).
ops_complete_biofill can run in tasklet context, so rather than upgrading
all the stripe locks from spin_lock to spin_lock_bh this patch just
unconditionally reschedules handle_stripe after completing the read
request.
2/ ops_complete_biofill needlessly qualified processing R5_Wantfill with
dev->toread. The result being that the 'biofill' pending bit is cleared
before handling the pending read-completions on dev->read. R5_Wantfill can
be unconditionally handled because the 'biofill' pending bit prevents new
R5_Wantfill requests from being seen by ops_run_biofill and
ops_complete_biofill.
Found-by: Yuri Tikhonov <yur@emcraft.com>
[neilb@suse.de: simpler fix for bug 1 than moving code]
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/isdn/sc/hardware.h')
0 files changed, 0 insertions, 0 deletions