• J
    blk-mq: start request gstate with gen 1 · f4560231
    Jianchao Wang 提交于
    rq->gstate and rq->aborted_gstate both are zero before rqs are
    allocated. If we have a small timeout, when the timer fires,
    there could be rqs that are never allocated, and also there could
    be rq that has been allocated but not initialized and started. At
    the moment, the rq->gstate and rq->aborted_gstate both are 0, thus
    the blk_mq_terminate_expired will identify the rq is timed out and
    invoke .timeout early.
    
    For scsi, this will cause scsi_times_out to be invoked before the
    scsi_cmnd is not initialized, scsi_cmnd->device is still NULL at
    the moment, then we will get crash.
    
    Cc: Bart Van Assche <bart.vanassche@wdc.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Ming Lei <ming.lei@redhat.com>
    Cc: Martin Steigerwald <Martin@Lichtvoll.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: NJianchao Wang <jianchao.w.wang@oracle.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    f4560231
blk-core.c 105.1 KB