aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2005-11-28 16:44:10 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-28 17:42:25 -0500
commit700e432d8364ce59c521abbe03a522051610ebc2 (patch)
tree50293a973edfc2cc39858367d50497416473fb5b /drivers/md
parent22dfdf5212e5864b844f629736fb993d4611f190 (diff)
[PATCH] md: fix locking problem in r5/r6
bitmap_unplug actually writes data (bits) to storage, so we shouldn't be holding a spinlock... Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/raid5.c2
-rw-r--r--drivers/md/raid6main.c2
2 files changed, 4 insertions, 0 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index e2a40283e323..36d5f8ac8265 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -1704,7 +1704,9 @@ static void raid5d (mddev_t *mddev)
1704 1704
1705 if (conf->seq_flush - conf->seq_write > 0) { 1705 if (conf->seq_flush - conf->seq_write > 0) {
1706 int seq = conf->seq_flush; 1706 int seq = conf->seq_flush;
1707 spin_unlock_irq(&conf->device_lock);
1707 bitmap_unplug(mddev->bitmap); 1708 bitmap_unplug(mddev->bitmap);
1709 spin_lock_irq(&conf->device_lock);
1708 conf->seq_write = seq; 1710 conf->seq_write = seq;
1709 activate_bit_delay(conf); 1711 activate_bit_delay(conf);
1710 } 1712 }
diff --git a/drivers/md/raid6main.c b/drivers/md/raid6main.c
index eae5a35629c5..17d88d90d1ef 100644
--- a/drivers/md/raid6main.c
+++ b/drivers/md/raid6main.c
@@ -1784,7 +1784,9 @@ static void raid6d (mddev_t *mddev)
1784 1784
1785 if (conf->seq_flush - conf->seq_write > 0) { 1785 if (conf->seq_flush - conf->seq_write > 0) {
1786 int seq = conf->seq_flush; 1786 int seq = conf->seq_flush;
1787 spin_unlock_irq(&conf->device_lock);
1787 bitmap_unplug(mddev->bitmap); 1788 bitmap_unplug(mddev->bitmap);
1789 spin_lock_irq(&conf->device_lock);
1788 conf->seq_write = seq; 1790 conf->seq_write = seq;
1789 activate_bit_delay(conf); 1791 activate_bit_delay(conf);
1790 } 1792 }