|
@@ -2446,7 +2446,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;
|
|
|
|
|
@@ -2469,10 +2469,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);
|