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