Re: Strange block/scsi/workqueue issue

From: James Bottomley
Date: Tue Apr 12 2011 - 15:57:07 EST


On Tue, 2011-04-12 at 19:33 +0100, Steven Whitehouse wrote:
> Hi,
>
> On Tue, 2011-04-12 at 12:41 -0500, James Bottomley wrote:
> > On Tue, 2011-04-12 at 17:51 +0100, Steven Whitehouse wrote:
> > > Still not quite there, but looking more hopeful now,
> >
> > Not sure I share your optimism; but this one
> >
> Neither do I any more :-) Looks like we are back in blk_peek_request()
> again.
[...]
> if (!q->elevator->ops || !q->elevator->ops->elevator_dispatch_fn
> (q, 0))
> 6d62: 49 8b 44 24 18 mov 0x18(%r12),%rax
> 6d67: 48 8b 00 mov (%rax),%rax
> 6d6a: 48 85 c0 test %rax,%rax
> 6d6d: 74 0c je 6d7b <blk_peek_request+0x11b>
> 6d6f: 31 f6 xor %esi,%esi
> 6d71: 4c 89 e7 mov %r12,%rdi <----- here
> 6d74: ff 50 28 callq *0x28(%rax)
> 6d77: 85 c0 test %eax,%eax
> 6d79: 75 da jne 6d55 <blk_peek_request+0xf5>
> 6d7b: 45 31 ed xor %r13d,%r13d

Hmm, wrong signal for no elevator then. How about this?

James

---

Index: BUILD-2.6/block/blk.h
===================================================================
--- BUILD-2.6.orig/block/blk.h 2011-04-12 14:51:35.000000000 -0500
+++ BUILD-2.6/block/blk.h 2011-04-12 14:51:53.000000000 -0500
@@ -62,7 +62,8 @@ static inline struct request *__elv_next
return rq;
}

- if (!q->elevator->ops || !q->elevator->ops->elevator_dispatch_fn(q, 0))
+ if (test_bit(QUEUE_FLAG_DEAD, &q->queue_flags) ||
+ !q->elevator->ops->elevator_dispatch_fn(q, 0))
return NULL;
}
}


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/