Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=94d6351e147231b2c5a9512d69693ee8ac0c204d Commit: 94d6351e147231b2c5a9512d69693ee8ac0c204d Parent: 73d410c0137f63c6597e9763c81e5f4d015e9940 Author: Milan Broz <[EMAIL PROTECTED]> AuthorDate: Fri Feb 8 02:10:27 2008 +0000 Committer: Alasdair G Kergon <[EMAIL PROTECTED]> CommitDate: Fri Feb 8 02:10:27 2008 +0000
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: Milan Broz <[EMAIL PROTECTED]> Signed-off-by: Alasdair G Kergon <[EMAIL PROTECTED]> --- drivers/md/dm.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 5191954..11f422e 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -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); - To unsubscribe from this list: send the line "unsubscribe git-commits-head" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html