Skip to content
  • Tejun Heo's avatar
    block: fix elvpriv allocation failure handling · aaf7c680
    Tejun Heo authored
    
    
    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: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    aaf7c680