|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] Fix the blkif_schedule() kthread loop. Much simpler; mu
# 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
|
|
|
|
|