On 02/21/2017 03:18 PM, Christoph Hellwig wrote:
> On Tue, Feb 21, 2017 at 01:27:08PM +0100, Hannes Reinecke wrote:
>> ioctl passthrough commands require a SCSIIO smid, but cannot
>> easily integrate with the block layer. But the driver already
>> has reserved some SCSIIO smids and we're only ever allowing
>> one ioctl command at a time we can use the first reserved smid
>> for ioctl commands.
>>
>> Signed-off-by: Hannes Reinecke <h...@suse.com>
>> ---
>>  drivers/scsi/mpt3sas/mpt3sas_base.c | 11 ++++++++---
>>  drivers/scsi/mpt3sas/mpt3sas_ctl.c  | 10 ++--------
>>  2 files changed, 10 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c 
>> b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> index 3f9148c..0875e58 100644
>> --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
>> +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
>> @@ -2432,7 +2432,9 @@ struct scsiio_tracker *
>>              ioc->scsi_lookup[i].cb_idx = 0xFF;
>>              ioc->scsi_lookup[i].scmd = NULL;
>>              ioc->scsi_lookup[i].direct_io = 0;
>> -            list_add(&ioc->scsi_lookup[i].tracker_list, &ioc->free_list);
>> +            if (i < ioc->scsiio_depth - INTERNAL_SCSIIO_CMDS_COUNT)
>> +                    list_add(&ioc->scsi_lookup[i].tracker_list,
>> +                             &ioc->free_list);
>>              spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
>>  
>>              _base_recovery_check(ioc);
>> @@ -5174,8 +5176,11 @@ struct scsiio_tracker *
>>              ioc->scsi_lookup[i].smid = smid;
>>              ioc->scsi_lookup[i].scmd = NULL;
>>              ioc->scsi_lookup[i].direct_io = 0;
>> -            list_add_tail(&ioc->scsi_lookup[i].tracker_list,
>> -                &ioc->free_list);
>> +            if (i < ioc->scsiio_depth - INTERNAL_SCSIIO_CMDS_COUNT)
>> +                    list_add_tail(&ioc->scsi_lookup[i].tracker_list,
>> +                                  &ioc->free_list);
>> +            else
>> +                    INIT_LIST_HEAD(&ioc->lookup[i].tracker_list);
> 
> Why the INIT_LIST_HEAD?  We never do a list_empty check on tracker_list,
> so it's rather pointless.
> 
Okay.

>> +            smid = ioc->scsiio_depth - ioc->host->reserved_cmds;
> 
> ioc->host->reserved_cmds is never set at this point.  But given that only
> the smids < ioc->scsiio_depth are used it's doing the right thing
> if you just remove the "- ioc->host->reserved_cmds" entirely.
> 
Not quite; then it'll clash with the hi-priority smids which are
allocated after that.
But I can be using ioc->scsio_depth - INTERNAL_SCSIIO_CMDS_COUNT here.

Cheers,

Hannes
-- 
Dr. Hannes Reinecke                Teamlead Storage & Networking
h...@suse.de                                   +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)

Reply via email to