summaryrefslogtreecommitdiffstats
path: root/net/802
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2008-02-06 01:40:00 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-06 10:41:19 -0800
commit6ed3003c19a96fe18edf8179c4be6fe14abbebbc (patch)
treedba37b52eb4c68fedc9e842a69e2c0c3b4a5aa31 /net/802
parent73c34431c7119d0bc7d3436abfad75fe47b2c51f (diff)
md: fix an occasional deadlock in raid5
raid5's 'make_request' function calls generic_make_request on underlying devices and if we run out of stripe heads, it could end up waiting for one of those requests to complete. This is bad as recursive calls to generic_make_request go on a queue and are not even attempted until make_request completes. So: don't make any generic_make_request calls in raid5 make_request until all waiting has been done. We do this by simply setting STRIPE_HANDLE instead of calling handle_stripe(). If we need more stripe_heads, raid5d will get called to process the pending stripe_heads which will call generic_make_request from a This change by itself causes a performance hit. So add a change so that raid5_activate_delayed is only called at unplug time, never in raid5. This seems to bring back the performance numbers. Calling it in raid5d was sometimes too soon... Neil said: How about we queue it for 2.6.25-rc1 and then about when -rc2 comes out, we queue it for 2.6.24.y? Acked-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Neil Brown <neilb@suse.de> Tested-by: dean gaudet <dean@arctic.org> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'net/802')
0 files changed, 0 insertions, 0 deletions