Hello,

On my test system, blk_get_request() continuously hangs in schedule().

schedule+0x35/0x80
schedule_timeout+0x237/0x2d0
io_schedule_timeout+0xa6/0x110
get_request+0x258/0x760
blk_get_request+0x7f/0x100

I suspect the problem might be due to __get_request returning ENOMEM,
leading to sleep in schedule().

static struct request *__get_request(struct request_list *rl, unsigned
int op, struct bio *bio, gfp_t gfp_mask)   {
...
/*
* The queue is full and the allocating
* process is not a "batcher", and not
* exempted by the IO scheduler
*/
return ERR_PTR(-ENOMEM);
...

if (rl->count[is_sync] >= (3 * q->nr_requests / 2))
return ERR_PTR(-ENOMEM);
...

}

However, there is no significant memory pressure or IO load on my test
system, I wonder why the __get_request might be failing leading to
sleep.

Any possible cause?   Any suggestions are welcome!


Thanks & Regards,
Suraj

Reply via email to