Hi Christoph,

> From: Christoph Hellwig, Sent: Thursday, June 13, 2019 4:34 PM
> 
> > +   if (max_sectors > 0) {
> > +           struct device *dev = us->pusb_dev->bus->sysdev;
> > +           size_t max_dma_sectors = dma_max_mapping_size(dev) >>
> > +                                    SECTOR_SHIFT;
> > +
> > +           max_sectors = min_t(size_t, max_sectors, max_dma_sectors);
> > +           blk_queue_max_hw_sectors(sdev->request_queue, max_sectors);
> 
> I think we need to do this unconditionally for the rare (or maybe even
> theoretical case) of a dma max mapping size smaller than the default
> max_sectos.
> 
> So something like this:
> 
>       blk_queue_max_hw_sectors(sdev->request_queue,
>               min_t(unsigned long,
>                       queue_max_hw_sectors(sdev->request_queue),
>                       dma_max_mapping_size(dev) >> SECTOR_SHIFT));

I believe this patch I sent has already covered it. What do you think?

For examples (all value units are "sectors"):
        default mapping size    max_sectors
case 1  240     MAX             2048            --> we use 2048
case 2  240     512             2048            --> we use 512
case 3  240     128             2048            --> we use 128
case 4  240     128             64              --> we use 64

Best regards,
Yoshihiro Shimoda

Reply via email to