From: Nikanth Karthikesan <knikanth@suse.de>
Subject: Release md->map_lock before set_disk_ro 
Patch-mainline: No
References: bnc#556899 bnc#479784

Signed-off-by: Nikanth Karthikesan <knikanth@suse.de>

Calling set_disk_ro() with irqs disabled triggers a warning.

set_disk_ro() can be called outside the
write_lock_irqsave(&md->map_lock)? And to get the
dm_table_get_mode(md->map), we just need to hold a reference
with dm_get_table() and dm_table_put()

Index: linux-2.6.32-SLE11-SP1/drivers/md/dm.c
===================================================================
--- linux-2.6.32-SLE11-SP1.orig/drivers/md/dm.c
+++ linux-2.6.32-SLE11-SP1/drivers/md/dm.c
@@ -1988,12 +1988,15 @@ static int __bind(struct mapped_device *
 	old_map = md->map;
 	md->map = t;
 	dm_table_set_restrictions(t, q, limits);
+	write_unlock_irqrestore(&md->map_lock, flags);
+
+	dm_table_get(md->map);
 	if (!(dm_table_get_mode(t) & FMODE_WRITE)) {
 		set_disk_ro(md->disk, 1);
 	} else {
 		set_disk_ro(md->disk, 0);
 	}
-	write_unlock_irqrestore(&md->map_lock, flags);
+	dm_table_put(md->map);
 
 	return old_map;
 }
