From 6f78712f0096f515b295461617c8fb4236fd6e18 Mon Sep 17 00:00:00 2001 From: Alasdair G Kergon Date: Thu, 9 Apr 2009 00:27:13 +0100 Subject: [PATCH] --- yaml --- r: 142890 b: refs/heads/master c: df12ee996378a5917e9555169fe278ecca0612d4 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/md/dm.c | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 94eb031daeb7..6251c6d18ec5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 692d0eb9e02cf81fb387ff891f53840db2f3110a +refs/heads/master: df12ee996378a5917e9555169fe278ecca0612d4 diff --git a/trunk/drivers/md/dm.c b/trunk/drivers/md/dm.c index ab3b5d84df65..020a9e1993a7 100644 --- a/trunk/drivers/md/dm.c +++ b/trunk/drivers/md/dm.c @@ -1437,18 +1437,19 @@ static void dm_wq_work(struct work_struct *work) down_write(&md->io_lock); -next_bio: - spin_lock_irq(&md->deferred_lock); - c = bio_list_pop(&md->deferred); - spin_unlock_irq(&md->deferred_lock); + while (1) { + spin_lock_irq(&md->deferred_lock); + c = bio_list_pop(&md->deferred); + spin_unlock_irq(&md->deferred_lock); + + if (!c) { + clear_bit(DMF_BLOCK_IO, &md->flags); + break; + } - if (c) { __split_and_process_bio(md, c); - goto next_bio; } - clear_bit(DMF_BLOCK_IO, &md->flags); - up_write(&md->io_lock); }