On Sat, 6 Jul 2019, Benjamin Herrenschmidt wrote:
> On Fri, 2019-07-05 at 10:08 -0400, Alan Stern wrote:
> > On Fri, 5 Jul 2019, Benjamin Herrenschmidt wrote:
> > > Sure but it would be nice if the mass storage dealt with -ESHUTDOWN
> > > properly and stopped :-) Or other errors... if the UDC HW for example
> > > dies for some reason, mass storage will lockup.
> >
> > I suppose we could add code to check for this case and handle it,
> > although I'm not sure what would be the right thing to do. Delay for
> > one second and try again? Disable the gadget until the host does a
> > reset?
>
> I think just stop it until the next reset yes.
Can you test this patch?
Alan Stern
Index: usb-devel/drivers/usb/gadget/function/f_mass_storage.c
===================================================================
--- usb-devel.orig/drivers/usb/gadget/function/f_mass_storage.c
+++ usb-devel/drivers/usb/gadget/function/f_mass_storage.c
@@ -552,13 +552,14 @@ static int start_transfer(struct fsg_dev
/* We can't do much more than wait for a reset */
req->status = rc;
+ if (rc == -ESHUTDOWN)
+ fsg->common->running = 0;
/*
* Note: currently the net2280 driver fails zero-length
* submissions if DMA is enabled.
*/
- if (rc != -ESHUTDOWN &&
- !(rc == -EOPNOTSUPP && req->length == 0))
+ else if (!(rc == -EOPNOTSUPP && req->length == 0))
WARNING(fsg, "error in submission: %s --> %d\n",
ep->name, rc);
}