• Keith Busch's avatar
    block: keep established cmd_flags when cloning into a blk-mq request · 77a08689
    Keith Busch authored
    blk_mq_alloc_request() may establish REQ_MQ_INFLIGHT in addition to
    incrementing the hctx->nr_active count.  Any cmd_flags that are
    established in the newly allocated clone request must be preserved in
    addition to the cmd_flags that are later copied over from the original
    request as part of blk_rq_prep_clone().
    
    Otherwise, if REQ_MQ_INFLIGHT isn't set in the clone request the
    hctx->nr_active count won't get decremented via blk_mq_free_request().
    
    The only consumer of blk_rq_prep_clone() is request-based DM, which uses
    blk_rq_init() prior to calling blk_rq_prep_clone() for the non-blk-mq
    case.  Given the cloned request's cmd_flags will be 0 it is safe to OR
    them with the original request's cmd_flags for both the non-blk-mq and
    blk-mq cases.
    Reported-by: default avatarBart Van Assche <bvanassche@acm.org>
    Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    77a08689
blk-core.c 89.8 KB