Message ID | 574329ae.c726620a.60f3.ffffd14b@mx.google.com (mailing list archive) |
---|---|
State | Rejected, archived |
Headers | show |
On Tue, May 24, 2016 at 12:02:43AM +0800, tom.ty89@gmail.com wrote: > From: Tom Yan <tom.ty89@gmail.com> > > Commit 198de51dbc34 ("USB: uas: Limit qdepth at the scsi-host level") made > qdepth limit set in host template (`.can_queue = MAX_CMNDS`) useless. > > Instead of removing the template limit, now we only change limit according > to the qdepth reported by the device if it is smaller than MAX_CMNDS. > > Signed-off-by: Tom Yan <tom.ty89@gmail.com> > > diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c > index 4d49fce..d7790e6 100644 > --- a/drivers/usb/storage/uas.c > +++ b/drivers/usb/storage/uas.c > @@ -972,7 +972,8 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) > * 1 tag is reserved for untagged commands + > * 1 tag to avoid off by one errors in some bridge firmwares > */ > - shost->can_queue = devinfo->qdepth - 2; > + if (devinfo->qdepth - 2 < MAX_CMNDS) > + shost->can_queue = devinfo->qdepth - 2; What's wrong with Hans's patch for this issue instead? -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Nothing wrong. It's just .can_queue = MAX_CMNDS in the host template is no longer neceesary, since with his patch, uas will set can_queue again later (to devinfo->qdepth - 2). Originally I thought .can_queue = MAX_CMNDS can hence be removed; but after a second thought, I think it might probably be better if we leave it there and make use of it, in case certain device somehow inapproriately reports an enormous qdepth (i.e. larger than MAX_CMNDS). (According to the commit message of 55ff8cfbc4e1 ("USB: uas: Reduce can_queue to MAX_CMNDS"), "The uas driver can never queue more then MAX_CMNDS...") On 24 May 2016 at 01:00, Greg KH <gregkh@linuxfoundation.org> wrote: > On Tue, May 24, 2016 at 12:02:43AM +0800, tom.ty89@gmail.com wrote: >> From: Tom Yan <tom.ty89@gmail.com> >> >> Commit 198de51dbc34 ("USB: uas: Limit qdepth at the scsi-host level") made >> qdepth limit set in host template (`.can_queue = MAX_CMNDS`) useless. >> >> Instead of removing the template limit, now we only change limit according >> to the qdepth reported by the device if it is smaller than MAX_CMNDS. >> >> Signed-off-by: Tom Yan <tom.ty89@gmail.com> >> >> diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c >> index 4d49fce..d7790e6 100644 >> --- a/drivers/usb/storage/uas.c >> +++ b/drivers/usb/storage/uas.c >> @@ -972,7 +972,8 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) >> * 1 tag is reserved for untagged commands + >> * 1 tag to avoid off by one errors in some bridge firmwares >> */ >> - shost->can_queue = devinfo->qdepth - 2; >> + if (devinfo->qdepth - 2 < MAX_CMNDS) >> + shost->can_queue = devinfo->qdepth - 2; > > What's wrong with Hans's patch for this issue instead? > -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 2016-05-24 at 01:23 +0800, Tom Yan wrote: > Nothing wrong. It's just .can_queue = MAX_CMNDS in the host template > is no longer neceesary, since with his patch, uas will set can_queue > again later (to devinfo->qdepth - 2). > > Originally I thought .can_queue = MAX_CMNDS can hence be removed; but > after a second thought, I think it might probably be better if we > leave it there and make use of it, in case certain device somehow > inapproriately reports an enormous qdepth (i.e. larger than > MAX_CMNDS). (According to the commit message of 55ff8cfbc4e1 ("USB: > uas: Reduce can_queue to MAX_CMNDS"), "The uas driver can never queue > more then MAX_CMNDS...") OK, so try this as an exercise: Why would this not be the right thing to do after the host is prepared: It has to do with the streams resources the driver has already created. James -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
I don't quite get what you mean. Are you saying that it is impossible that UAS devices would report inappropriately high qdepth, because of this? https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/usb/storage/uas.c?h=v4.6#n908 In that case should I send another patch that simply has `.can_queue = MAX_CMNDS` in the host template removed? On 24 May 2016 at 01:27, James Bottomley <James.Bottomley@hansenpartnership.com> wrote: > On Tue, 2016-05-24 at 01:23 +0800, Tom Yan wrote: >> Nothing wrong. It's just .can_queue = MAX_CMNDS in the host template >> is no longer neceesary, since with his patch, uas will set can_queue >> again later (to devinfo->qdepth - 2). >> >> Originally I thought .can_queue = MAX_CMNDS can hence be removed; but >> after a second thought, I think it might probably be better if we >> leave it there and make use of it, in case certain device somehow >> inapproriately reports an enormous qdepth (i.e. larger than >> MAX_CMNDS). (According to the commit message of 55ff8cfbc4e1 ("USB: >> uas: Reduce can_queue to MAX_CMNDS"), "The uas driver can never queue >> more then MAX_CMNDS...") > > OK, so try this as an exercise: Why would this not be the right thing > to do after the host is prepared: It has to do with the streams > resources the driver has already created. > > James > > -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 2016-05-24 at 02:33 +0800, Tom Yan wrote: > I don't quite get what you mean. Are you saying that it is impossible > that UAS devices would report inappropriately high qdepth, because of > this? > https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/ > drivers/usb/storage/uas.c?h=v4.6#n908 OK, you found the statement, now translate what it means to resource allocation and it will show you why the if you proposed to add would always be true. James > In that case should I send another patch that simply has `.can_queue > = > MAX_CMNDS` in the host template removed? > > On 24 May 2016 at 01:27, James Bottomley > <James.Bottomley@hansenpartnership.com> wrote: > > On Tue, 2016-05-24 at 01:23 +0800, Tom Yan wrote: > > > Nothing wrong. It's just .can_queue = MAX_CMNDS in the host > > > template > > > is no longer neceesary, since with his patch, uas will set > > > can_queue > > > again later (to devinfo->qdepth - 2). > > > > > > Originally I thought .can_queue = MAX_CMNDS can hence be removed; > > > but > > > after a second thought, I think it might probably be better if we > > > leave it there and make use of it, in case certain device somehow > > > inapproriately reports an enormous qdepth (i.e. larger than > > > MAX_CMNDS). (According to the commit message of 55ff8cfbc4e1 > > > ("USB: > > > uas: Reduce can_queue to MAX_CMNDS"), "The uas driver can never > > > queue > > > more then MAX_CMNDS...") > > > > OK, so try this as an exercise: Why would this not be the right > > thing > > to do after the host is prepared: It has to do with the streams > > resources the driver has already created. > > > > James > > > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" > in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c index 4d49fce..d7790e6 100644 --- a/drivers/usb/storage/uas.c +++ b/drivers/usb/storage/uas.c @@ -972,7 +972,8 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id) * 1 tag is reserved for untagged commands + * 1 tag to avoid off by one errors in some bridge firmwares */ - shost->can_queue = devinfo->qdepth - 2; + if (devinfo->qdepth - 2 < MAX_CMNDS) + shost->can_queue = devinfo->qdepth - 2; usb_set_intfdata(intf, shost); result = scsi_add_host(shost, &intf->dev);