[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Fix the blkif_schedule() kthread loop. Much simpler; much more correct.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID 937336f98c47148e82f5624a33334db3b4a40417 # Parent 787d946ad4579b39eb13fd5fa5a0b36c1e2face6 Fix the blkif_schedule() kthread loop. Much simpler; much more correct. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> diff -r 787d946ad457 -r 937336f98c47 linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c --- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Thu Apr 6 08:47:58 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Thu Apr 6 09:20:32 2006 @@ -215,49 +215,20 @@ int blkif_schedule(void *arg) { - blkif_t *blkif = arg; + blkif_t *blkif = arg; blkif_get(blkif); + if (debug_lvl) printk(KERN_DEBUG "%s: started\n", current->comm); - for (;;) { - if (kthread_should_stop()) { - /* asked to quit? */ - if (!atomic_read(&blkif->io_pending)) - break; - if (debug_lvl) - printk(KERN_DEBUG "%s: I/O pending, " - "delaying exit\n", current->comm); - } - - if (!atomic_read(&blkif->io_pending)) { - /* Wait for work to do. */ - wait_event_interruptible( - blkif->wq, - (atomic_read(&blkif->io_pending) || - kthread_should_stop())); - } else if (list_empty(&pending_free)) { - /* Wait for pending_req becoming available. */ - wait_event_interruptible( - pending_free_wq, - !list_empty(&pending_free)); - } - - if (blkif->status != CONNECTED) { - /* make sure we are connected */ - if (debug_lvl) - printk(KERN_DEBUG "%s: not connected " - "(%d pending)\n", - current->comm, - atomic_read(&blkif->io_pending)); - wait_event_interruptible( - blkif->wq, - (blkif->status == CONNECTED || - kthread_should_stop())); - continue; - } - - /* Schedule I/O */ + + while (!kthread_should_stop()) { + wait_event_interruptible( + blkif->wq, + (atomic_read(&blkif->io_pending) && + !list_empty(&pending_free)) || + kthread_should_stop()); + atomic_set(&blkif->io_pending, 0); if (do_block_io_op(blkif)) atomic_inc(&blkif->io_pending); @@ -271,8 +242,10 @@ print_stats(blkif); if (debug_lvl) printk(KERN_DEBUG "%s: exiting\n", current->comm); + blkif->xenblkd = NULL; blkif_put(blkif); + return 0; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |