diff options
author | 2012-04-19 16:29:22 -0700 | |
---|---|---|
committer | 2012-04-20 10:06:40 +0200 | |
commit | aaf7c680682f1999ef2e574f743c45d1674a8b8a (patch) | |
tree | 82d597ddfa7456553262435174948d9fb03fffef /block/blk-flush.c | |
parent | block: collapse blk_alloc_request() into get_request() (diff) | |
download | linux-dev-aaf7c680682f1999ef2e574f743c45d1674a8b8a.tar.xz linux-dev-aaf7c680682f1999ef2e574f743c45d1674a8b8a.zip |
block: fix elvpriv allocation failure handling
Request allocation is mempool backed to guarantee forward progress
under memory pressure; unfortunately, this property got broken while
adding elvpriv data. Failures during elvpriv allocation, including
ioc and icq creation failures, currently make get_request() fail as
whole. There's no forward progress guarantee for these allocations -
they may fail indefinitely under memory pressure stalling IO and
deadlocking the system.
This patch updates get_request() such that elvpriv allocation failure
doesn't make the whole function fail. If elvpriv allocation fails,
the allocation is degraded into !ELVPRIV. This will force the request
to ELEVATOR_INSERT_BACK disturbing scheduling but elvpriv alloc
failures should be rare (nothing is per-request) and anything is
better than deadlocking.
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions