diff options
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r-- | drivers/md/dm.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c index a64798ef481..48be69f3bcf 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c | |||
@@ -1107,6 +1107,7 @@ int dm_suspend(struct mapped_device *md, int do_lockfs) | |||
1107 | { | 1107 | { |
1108 | struct dm_table *map = NULL; | 1108 | struct dm_table *map = NULL; |
1109 | DECLARE_WAITQUEUE(wait, current); | 1109 | DECLARE_WAITQUEUE(wait, current); |
1110 | struct bio *def; | ||
1110 | int r = -EINVAL; | 1111 | int r = -EINVAL; |
1111 | 1112 | ||
1112 | down(&md->suspend_lock); | 1113 | down(&md->suspend_lock); |
@@ -1166,9 +1167,11 @@ int dm_suspend(struct mapped_device *md, int do_lockfs) | |||
1166 | /* were we interrupted ? */ | 1167 | /* were we interrupted ? */ |
1167 | r = -EINTR; | 1168 | r = -EINTR; |
1168 | if (atomic_read(&md->pending)) { | 1169 | if (atomic_read(&md->pending)) { |
1170 | clear_bit(DMF_BLOCK_IO, &md->flags); | ||
1171 | def = bio_list_get(&md->deferred); | ||
1172 | __flush_deferred_io(md, def); | ||
1169 | up_write(&md->io_lock); | 1173 | up_write(&md->io_lock); |
1170 | unlock_fs(md); | 1174 | unlock_fs(md); |
1171 | clear_bit(DMF_BLOCK_IO, &md->flags); | ||
1172 | goto out; | 1175 | goto out; |
1173 | } | 1176 | } |
1174 | up_write(&md->io_lock); | 1177 | up_write(&md->io_lock); |