RE: [PATCH 08/29] scsi: aacraid: Move code to wait for IO completion to shutdown func

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

 




> -----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.




[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