On Fri, 2017-04-07 at 15:06 -0500, Don Brace wrote: > - mark device state sooner. > > Reviewed-by: Scott Benesh <scott.benesh@xxxxxxxxxxxxx> > Reviewed-by: Scott Teel <scott.teel@xxxxxxxxxxxxx> > Reviewed-by: Kevin Barnett <kevin.barnett@xxxxxxxxxxxxx> > Signed-off-by: Don Brace <don.brace@xxxxxxxxxxxxx> > --- > drivers/scsi/hpsa.c | 44 ++++++++++++++++++++++++++++++----------- > --- > 1 file changed, 30 insertions(+), 14 deletions(-) > > diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c > index a2852da..a6a37e0 100644 > --- a/drivers/scsi/hpsa.c > +++ b/drivers/scsi/hpsa.c > @@ -5834,7 +5834,7 @@ static int > wait_for_device_to_become_ready(struct ctlr_info *h, > */ > static int hpsa_eh_device_reset_handler(struct scsi_cmnd *scsicmd) > { > - int rc; > + int rc = SUCCESS; > struct ctlr_info *h; > struct hpsa_scsi_dev_t *dev; > u8 reset_type; > @@ -5845,17 +5845,24 @@ static int > hpsa_eh_device_reset_handler(struct scsi_cmnd *scsicmd) > if (h == NULL) /* paranoia */ > return FAILED; > > - if (lockup_detected(h)) > - return FAILED; > + h->reset_in_progress = 1; > + > + if (lockup_detected(h)) { > + rc = FAILED; > + goto return_reset_status; > + } if this is meant to communicate host state to other threads, maybe you should use an atomic type for h->reset_in_progress, or locking of some sort? Regards, Martin -- Dr. Martin Wilck <mwilck@xxxxxxxx>, Tel. +49 (0)911 74053 2107 SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton HRB 21284 (AG Nürnberg)