Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=149a051f82d2b3860fe32fa182dbc83a66274894
Commit:     149a051f82d2b3860fe32fa182dbc83a66274894
Parent:     5b10ca19ea4859d3884d10a3eb8495de92089792
Author:     Jens Axboe <[EMAIL PROTECTED]>
AuthorDate: Tue Jan 29 22:25:18 2008 +0100
Committer:  Jens Axboe <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 09:11:10 2008 +0100

    as-iosched: fix double locking bug in as_merged_requests()
    
    If the two requests belong to the same io context, we will attempt
    to lock the same lock twice. But swapping contexts is pointless in
    that case, so just check for rioc == nioc before doing the double
    lock and copy.
    
    Tested-by: Olof Johansson <[EMAIL PROTECTED]>
    Signed-off-by: Jens Axboe <[EMAIL PROTECTED]>
---
 block/as-iosched.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/block/as-iosched.c b/block/as-iosched.c
index b201d16..9603684 100644
--- a/block/as-iosched.c
+++ b/block/as-iosched.c
@@ -1275,9 +1275,13 @@ static void as_merged_requests(struct request_queue *q, 
struct request *req,
                         * Don't copy here but swap, because when anext is
                         * removed below, it must contain the unused context
                         */
-                       double_spin_lock(&rioc->lock, &nioc->lock, rioc < nioc);
-                       swap_io_context(&rioc, &nioc);
-                       double_spin_unlock(&rioc->lock, &nioc->lock, rioc < 
nioc);
+                       if (rioc != nioc) {
+                               double_spin_lock(&rioc->lock, &nioc->lock,
+                                                               rioc < nioc);
+                               swap_io_context(&rioc, &nioc);
+                               double_spin_unlock(&rioc->lock, &nioc->lock,
+                                                               rioc < nioc);
+                       }
                }
        }
 
-
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