> -----Original Message----- > From: Bart Van Assche [mailto:Bart.VanAssche@xxxxxxx] > Sent: Friday, December 22, 2017 8:27 AM > To: jejb@xxxxxxxxxxxxxxxxxx; Raghava Aditya Renukunta > <RaghavaAditya.Renukunta@xxxxxxxxxxxxx>; linux-scsi@xxxxxxxxxxxxxxx; > martin.petersen@xxxxxxxxxx > Cc: dl-esc-Aacraid Linux Driver <aacraid@xxxxxxxxxxxxx>; > gpiccoli@xxxxxxxxxxxxxxxxxx; Tom White <tom.white@xxxxxxxxxxxxx>; > Scott Benesh <scott.benesh@xxxxxxxxxxxxx> > Subject: Re: [PATCH 08/29] scsi: aacraid: Move code to wait for IO completion > to shutdown func > > EXTERNAL EMAIL > > > On Thu, 2017-12-21 at 17:59 +0000, Bart Van Assche wrote: > > On Thu, 2017-12-21 at 09:33 -0800, Raghava Aditya Renukunta wrote: > > > +static void aac_wait_for_io_completion(struct aac_dev *aac) > > > +{ > > > + unsigned long flagv = 0; > > > + int i = 0; > > > + > > > + for (i = 60; i; --i) { > > > + struct scsi_device *dev; > > > + struct scsi_cmnd *command; > > > + int active = 0; > > > + > > > + __shost_for_each_device(dev, aac->scsi_host_ptr) { > > > + spin_lock_irqsave(&dev->list_lock, flagv); > > > + list_for_each_entry(command, &dev->cmd_list, list) { > > > + if (command->SCp.phase == AAC_OWNER_FIRMWARE) { > > > + active++; > > > + break; > > > + } > > > + } > > > + spin_unlock_irqrestore(&dev->list_lock, flagv); > > > + if (active) > > > + break; > > > + > > > + } > > > + /* > > > + * We can exit If all the commands are complete > > > + */ > > > + if (active == 0) > > > + break; > > > + ssleep(1); > > > + } > > > +} > > > > Have you considered to call scsi_target_block() and scsi_target_unblock() > instead > > of implementing functionality like the above in a SCSI LLD? > > (replying to my own e-mail) > > It seems like I misread your code - calling scsi_target_block() and > scsi_target_unblock() would not be sufficient. But calling > blk_mq_freeze_queue() > and blk_mq_unfreeze_queue() should be sufficient. The following commit > made these > functions work not only for scsi-mq but also for legacy scsi queues: commit > 055f6e18e08f ("block: Make q_usage_counter also track legacy requests"). Hi Bart, That piece of code is very much legacy that I removed and placed in a function that would benefit all code paths that shutdown the controller. The 2 functions you mentioned are a god send but I think I will hold off on this patchset and do a full refactor with them in the next patchset. ( I suspect that I will have to touch a bunch of different code paths and perform extensive testing to be fully confident) Regards, Raghava Aditya > Bart.