[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>

authored by

NeilBrown and committed by
Linus Torvalds
700e432d 22dfdf52

+4
+2
drivers/md/raid5.c
··· 1704 1704 1705 1705 if (conf->seq_flush - conf->seq_write > 0) { 1706 1706 int seq = conf->seq_flush; 1707 + spin_unlock_irq(&conf->device_lock); 1707 1708 bitmap_unplug(mddev->bitmap); 1709 + spin_lock_irq(&conf->device_lock); 1708 1710 conf->seq_write = seq; 1709 1711 activate_bit_delay(conf); 1710 1712 }
+2
drivers/md/raid6main.c
··· 1784 1784 1785 1785 if (conf->seq_flush - conf->seq_write > 0) { 1786 1786 int seq = conf->seq_flush; 1787 + spin_unlock_irq(&conf->device_lock); 1787 1788 bitmap_unplug(mddev->bitmap); 1789 + spin_lock_irq(&conf->device_lock); 1788 1790 conf->seq_write = seq; 1789 1791 activate_bit_delay(conf); 1790 1792 }