[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 6908c5236e5d7d48ffee00d40887d5be519f01f5 # Parent 8cb9c4eb41bacd90967d0d167ad9a7ad16d0309b Fix the blkif_schedule() kthread loop. Much simpler; much more correct. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> diff -r 8cb9c4eb41ba -r 6908c5236e5d 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:48:51 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Thu Apr 6 09:21:04 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 |