Hi Ewan, 

On 3/18/19, 6:36 AM, "linux-scsi-ow...@vger.kernel.org on behalf of Ewan D. 
Milne" <linux-scsi-ow...@vger.kernel.org on behalf of emi...@redhat.com> wrote:

    On Fri, 2019-03-15 at 15:04 -0700, Himanshu Madhani wrote:
    > This patch fixes crash due to NULL pointer derefrence because
    > CPU pointer is not set and used by driver.  Instead, driver is
    > passes CPU as tag via ha->isp_ops->{lun_reset|target_reset}
    > 
    ...
    > 
    > Fixes: 9cf2bab630765 ("block: kill request ->cpu member")
    > Signed-off-by: Himanshu Madhani <hmadh...@marvell.com>
    > ---
    >  drivers/scsi/qla2xxx/qla_os.c | 2 +-
    >  1 file changed, 1 insertion(+), 1 deletion(-)
    > 
    > diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
    > index 677f82fdf56f..91f576d743fe 100644
    > --- a/drivers/scsi/qla2xxx/qla_os.c
    > +++ b/drivers/scsi/qla2xxx/qla_os.c
    > @@ -1517,7 +1517,7 @@ __qla2xxx_eh_generic_reset(char *name, enum 
nexus_wait_type type,
    >           goto eh_reset_failed;
    >   }
    >   err = 2;
    > - if (do_reset(fcport, cmd->device->lun, blk_mq_rq_cpu(cmd->request) + 1)
    > + if (do_reset(fcport, cmd->device->lun, 1)
    >           != QLA_SUCCESS) {
    >           ql_log(ql_log_warn, vha, 0x800c,
    >               "do_reset failed for cmd=%p.\n", cmd);
    
    Hi Himanshu-
    
    The 3rd parameter to do_reset() may end up being passed to the HBA in the TM
    IOCB in qla2x00_async_tm_cmd().  Can you explain why the CPU number was used
    previously and why passing a constant here is sufficient?  Was this not 
needed
    in the original implementation or is this a functional change?

    -Ewan

In earlier BLK-MQ implementation 3rd field must have some meaning and so driver 
must be setting that value. 
(I could not find history on old implementation). However, with latest updates  
to BLK-MQ, 3rd parameter is
passed as tag in the driver and it's not being used in driver. 

In qla2x00_async_tm_cmd(),  3rd parameter is passed as tag to and its value is 
saved in tm_iocb->u.tmf.data  but
not used in the driver anywhere else, so passing value of 1 is safe here since 
return value from qla2x00_start_sp()
will override this value. 

Thanks,
Himanshu 

    
    

Reply via email to