Re: [PATCH v3] mpt3sas: correct reset of smid while clearing scsi tracker

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2018-08-03 at 12:16 -0400, Sreekanth Reddy wrote:
+AD4- diff --git a/drivers/scsi/mpt3sas/mpt3sas+AF8-base.c b/drivers/scsi/mpt3sas/mpt3sas+AF8-base.c
+AD4- index 902610d..2c5a5b4 100644
+AD4- --- a/drivers/scsi/mpt3sas/mpt3sas+AF8-base.c
+AD4- +-+-+- b/drivers/scsi/mpt3sas/mpt3sas+AF8-base.c
+AD4- +AEAAQA- -1702,6 +-1702,13 +AEAAQA- static int mpt3sas+AF8-remove+AF8-dead+AF8-ioc+AF8-func(void +ACo-arg)
+AD4-  		return NULL+ADs-
+AD4-  
+AD4-  	chain+AF8-req +AD0- +ACY-ioc-+AD4-chain+AF8-lookup+AFs-smid - 1+AF0-.chains+AF8-per+AF8-smid+AFs-chain+AF8-offset+AF0AOw-
+AD4- +-
+AD4- +-	/+ACo-
+AD4- +-	 +ACo- Added memory barrier to make sure that correct chain tracker
+AD4- +-	 +ACo- is retrieved before incrementing the smid pool's chain+AF8-offset
+AD4- +-	 +ACo- value in chain lookup table.
+AD4- +-	 +ACo-/
+AD4- +-	smp+AF8-mb()+ADs-
+AD4-  	atomic+AF8-inc(+ACY-ioc-+AD4-chain+AF8-lookup+AFs-smid - 1+AF0-.chain+AF8-offset)+ADs-
+AD4-  	return chain+AF8-req+ADs-
+AD4-  +AH0-
+AD4- +AEAAQA- -3283,8 +-3290,15 +AEAAQA- void mpt3sas+AF8-base+AF8-clear+AF8-st(struct MPT3SAS+AF8-ADAPTER +ACo-ioc,
+AD4-  		return+ADs-
+AD4-  	st-+AD4-cb+AF8-idx +AD0- 0xFF+ADs-
+AD4-  	st-+AD4-direct+AF8-io +AD0- 0+ADs-
+AD4- -	st-+AD4-smid +AD0- 0+ADs-
+AD4-  	atomic+AF8-set(+ACY-ioc-+AD4-chain+AF8-lookup+AFs-st-+AD4-smid - 1+AF0-.chain+AF8-offset, 0)+ADs-
+AD4- +-
+AD4- +-	/+ACo-
+AD4- +-	 +ACo- Added memory barrier to make sure that smid is set to zero
+AD4- +-	 +ACo- only after resetting corresponding smid pool's chain+AF8-offset to zero
+AD4- +-	 +ACo- in chain lookup table.
+AD4- +-	 +ACo-/
+AD4- +-	smp+AF8-mb()+ADs-
+AD4- +-	st-+AD4-smid +AD0- 0+ADs-
+AD4-  +AH0-

Thanks for having addressed previous review comments. Hence:

Reviewed-by: Bart Van Assche +ADw-bart.vanassche+AEA-wdc.com+AD4-

However, I'm not yet convinced that this patch is sufficient to fix the race
between +AF8-base+AF8-get+AF8-chain+AF8-buffer+AF8-tracker() and mpt3sas+AF8-base+AF8-clear+AF8-st(). Can e.g.
the atomic+AF8-set() that resets chain+AF8-offset occur after it has been read by
+AF8-base+AF8-get+AF8-chain+AF8-buffer+AF8-tracker() and before that function increments the
chain+AF8-offset member variable?

Thanks,

Bart.





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux