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.