Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94d6351e authored by Milan Broz's avatar Milan Broz Committed by Alasdair G Kergon
Browse files

dm: split dm_suspend io_lock hold into two



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: default avatarMilan Broz <mbroz@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent 73d410c0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1434,9 +1434,11 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags)

	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);

@@ -1444,7 +1446,6 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags)
		r = -EINTR;
		goto out; /* pushback list is already flushed, so skip flush */
	}
	up_write(&md->io_lock);

	dm_table_postsuspend_targets(map);