mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
[PATCH] dm flush queue EINTR
If dm_suspend() is cancelled, bios already added to the deferred list need to be submitted. Otherwise they remain 'in limbo' until there's a dm_resume(). Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
138728dc96
commit
1ecac7fd74
@ -1107,6 +1107,7 @@ int dm_suspend(struct mapped_device *md, int do_lockfs)
|
||||
{
|
||||
struct dm_table *map = NULL;
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
struct bio *def;
|
||||
int r = -EINVAL;
|
||||
|
||||
down(&md->suspend_lock);
|
||||
@ -1166,9 +1167,11 @@ int dm_suspend(struct mapped_device *md, int do_lockfs)
|
||||
/* were we interrupted ? */
|
||||
r = -EINTR;
|
||||
if (atomic_read(&md->pending)) {
|
||||
clear_bit(DMF_BLOCK_IO, &md->flags);
|
||||
def = bio_list_get(&md->deferred);
|
||||
__flush_deferred_io(md, def);
|
||||
up_write(&md->io_lock);
|
||||
unlock_fs(md);
|
||||
clear_bit(DMF_BLOCK_IO, &md->flags);
|
||||
goto out;
|
||||
}
|
||||
up_write(&md->io_lock);
|
||||
|
Loading…
Reference in New Issue
Block a user