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

Reply via email to