> -----Original Message----- > On Tue, 2017-04-25 at 14:46 -0500, Don Brace wrote: > > +static int pqi_device_wait_for_pending_io(struct pqi_ctrl_info *ctrl_info, > > + struct pqi_scsi_dev *device) > > +{ > > + while (atomic_read(&device->scsi_cmds_outstanding)) { > > + pqi_check_ctrl_health(ctrl_info); > > + if (pqi_ctrl_offline(ctrl_info)) > > + return -ENXIO; > > + usleep_range(1000, 2000); > > + } > > + > > + return 0; > > +} > > + > > +static int pqi_ctrl_wait_for_pending_io(struct pqi_ctrl_info *ctrl_info) > > +{ > > + bool io_pending; > > + unsigned long flags; > > + struct pqi_scsi_dev *device; > > + > > + while (1) { > > + io_pending = false; > > + > > + spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags); > > + list_for_each_entry(device, &ctrl_info->scsi_device_list, > > + scsi_device_list_entry) { > > + if (atomic_read(&device->scsi_cmds_outstanding)) { > > + io_pending = true; > > + break; > > + } > > + } > > + spin_unlock_irqrestore(&ctrl_info->scsi_device_list_lock, > > + flags); > > + > > + if (!io_pending) > > + break; > > + > > + pqi_check_ctrl_health(ctrl_info); > > + if (pqi_ctrl_offline(ctrl_info)) > > + return -ENXIO; > > + > > + usleep_range(1000, 2000); > > + } > > + > > + return 0; > > +} > > The same comment applies here that applies to the previous patch: please > use > scsi_target_block() / scsi_target_unblock() instead of reimplementing these > functions. > > Thanks, > > Bart. Our LUN reset functions have to do several PQI-specific things in order to work correctly, which is why we did not use scsi_target_block()/scsi_target_unblock() Hope this is acceptable Thanks for your review Don Brace ESC - Smart Storage Microsemi Corporation