]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
dm_calculate_queue_limits will first reset the provided limits to
authorMike Christie <michaelc@cs.wisc.edu>
Wed, 13 Feb 2013 22:42:39 +0000 (09:42 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 13 Feb 2013 22:42:39 +0000 (09:42 +1100)
defaults using blk_set_stacking_limits; whereby defeating the purpose of
retaining the original live table's limits -- as was intended via commit
3ae706561637331aa578e52bb89ecbba5edcb7a9 ("dm: retain table limits when
swapping to new table with no devices").

Fix this improper limits initialization (in the no data devices case) by
avoiding the call to dm_calculate_queue_limits.

[patch header revised by Mike Snitzer]

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Cc: stable@vger.kernel.org # v3.6+
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
drivers/md/dm.c

index 842513c945715afc023e8f97255f8f38a93d8907..add7654181a72011be869d8c7ccb52f033f8e014 100644 (file)
@@ -2460,7 +2460,7 @@ static void dm_queue_flush(struct mapped_device *md)
  */
 struct dm_table *dm_swap_table(struct mapped_device *md, struct dm_table *table)
 {
-       struct dm_table *live_map, *map = ERR_PTR(-EINVAL);
+       struct dm_table *live_map = NULL, *map = ERR_PTR(-EINVAL);
        struct queue_limits limits;
        int r;
 
@@ -2483,10 +2483,12 @@ struct dm_table *dm_swap_table(struct mapped_device *md, struct dm_table *table)
                dm_table_put(live_map);
        }
 
-       r = dm_calculate_queue_limits(table, &limits);
-       if (r) {
-               map = ERR_PTR(r);
-               goto out;
+       if (!live_map) {
+               r = dm_calculate_queue_limits(table, &limits);
+               if (r) {
+                       map = ERR_PTR(r);
+                       goto out;
+               }
        }
 
        map = __bind(md, table, &limits);