|
@@ -2341,7 +2341,8 @@ static struct dm_table *__bind(struct mapped_device *md, struct dm_table *t,
|
|
|
set_bit(DMF_MERGE_IS_OPTIONAL, &md->flags);
|
|
|
else
|
|
|
clear_bit(DMF_MERGE_IS_OPTIONAL, &md->flags);
|
|
|
- dm_sync_table(md);
|
|
|
+ if (old_map)
|
|
|
+ dm_sync_table(md);
|
|
|
|
|
|
return old_map;
|
|
|
}
|
|
@@ -2782,7 +2783,8 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags)
|
|
|
* flush_workqueue(md->wq).
|
|
|
*/
|
|
|
set_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags);
|
|
|
- synchronize_srcu(&md->io_barrier);
|
|
|
+ if (map)
|
|
|
+ synchronize_srcu(&md->io_barrier);
|
|
|
|
|
|
/*
|
|
|
* Stop md->queue before flushing md->wq in case request-based
|
|
@@ -2802,7 +2804,8 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags)
|
|
|
|
|
|
if (noflush)
|
|
|
clear_bit(DMF_NOFLUSH_SUSPENDING, &md->flags);
|
|
|
- synchronize_srcu(&md->io_barrier);
|
|
|
+ if (map)
|
|
|
+ synchronize_srcu(&md->io_barrier);
|
|
|
|
|
|
/* were we interrupted ? */
|
|
|
if (r < 0) {
|