diff options
| author | Tejun Heo <[email protected]> | 2012-04-19 23:29:22 +0000 |
|---|---|---|
| committer | Jens Axboe <[email protected]> | 2012-04-20 08:06:40 +0000 |
| commit | aaf7c680682f1999ef2e574f743c45d1674a8b8a (patch) | |
| tree | 82d597ddfa7456553262435174948d9fb03fffef /net/unix/af_unix.c | |
| parent | block: collapse blk_alloc_request() into get_request() (diff) | |
| download | kernel-aaf7c680682f1999ef2e574f743c45d1674a8b8a.tar.gz kernel-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 <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Diffstat (limited to 'net/unix/af_unix.c')
0 files changed, 0 insertions, 0 deletions
