dm: rearrange dm_wq_work
authorAlasdair G Kergon <agk@redhat.com>
Wed, 8 Apr 2009 23:27:13 +0000 (00:27 +0100)
committerAlasdair G Kergon <agk@redhat.com>
Wed, 8 Apr 2009 23:27:13 +0000 (00:27 +0100)
Refactor dm_wq_work() to make later patch more readable.

Signed-off-by: Alasdair G Kergon <agk@redhat.com>
drivers/md/dm.c

index ab3b5d84df65c58c8bdae4ec1a2f39913b5df00b..020a9e1993a75be2e43d9dbe369f22211f3c071f 100644 (file)
@@ -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);
 }