Change io_locking to allow processing flush in separate thread.
Because we have DMF_BLOCK_IO already set, any possible
new ios are queued in dm_requests now.
In the case of interrupting previous wait there can be more
ios queued (we unlocked io_lock for a while) but this is safe.
Signed-off-by: Milan Broz <mbroz@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
if (noflush)
__merge_pushback_list(md);
+ up_write(&md->io_lock);
/* were we interrupted ? */
if (pending) {
+ down_write(&md->io_lock);
__flush_deferred_io(md);
up_write(&md->io_lock);
r = -EINTR;
goto out; /* pushback list is already flushed, so skip flush */
}
- up_write(&md->io_lock);
dm_table_postsuspend_targets(map);