Re: Processes stuck on D state on Dual Opteron

Nick Piggin
2005-04-12T11:51:21Z

[-- Attachment #1: Type: text/plain, Size: 394 bytes --]

Nick Piggin wrote:
> Chen, Kenneth W wrote:

>> I like the patch a lot and already did bench it on our db setup.
>> However,
>> I'm seeing a negative regression compare to a very very crappy patch (see
>> attached, you can laugh at me for doing things like that :-).
>>
>
> OK - if we go that way, perhaps the following patch may be the
> way to do it.
>

Here.

--
SUSE Labs, Novell Inc.

[-- Attachment #2: blk-efficient2.patch --]
[-- Type: text/plain, Size: 770 bytes --]

Index: linux-2.6/drivers/block/ll_rw_blk.c
===================================================================
--- linux-2.6.orig/drivers/block/ll_rw_blk.c 2005-04-12 21:03:01.000000000 +1000
+++ linux-2.6/drivers/block/ll_rw_blk.c 2005-04-12 21:03:45.000000000 +1000
@@ -1956,10 +1956,11 @@ out:
*/
static struct request *get_request_wait(request_queue_t *q, int rw)
{
- DEFINE_WAIT(wait);
struct request *rq;

- do {
+ rq = get_request(q, rw, GFP_NOIO);
+ while (!rq) {
+ DEFINE_WAIT(wait);
struct request_list *rl = &q->rq;

prepare_to_wait_exclusive(&rl->wait[rw], &wait,
@@ -1987,7 +1988,7 @@ static struct request *get_request_wait(
spin_lock_irq(q->queue_lock);
}
finish_wait(&rl->wait[rw], &wait);
- } while (!rq);
+ }

return rq;
}