diff options
author | Tejun Heo <tj@kernel.org> | 2012-04-19 19:29:22 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2012-04-20 04:06:40 -0400 |
commit | aaf7c680682f1999ef2e574f743c45d1674a8b8a (patch) | |
tree | 82d597ddfa7456553262435174948d9fb03fffef /lib/ioremap.c | |
parent | 29e2b09ab5fa790514d47838f3c05497130908b3 (diff) |
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 'lib/ioremap.c')
0 files changed, 0 insertions, 0 deletions