On Tue, 26 Jan 2010, Michal Nazarewicz wrote: > The mass storage function responded needlessly to a set > configuration packet. This was a leftover from converting > gadget (file storage gadget) into a composite function. > > Moreover, it has failed to respond to get max LUN request. > Adding request queueing made the function work better. > > Signed-off-by: Michal Nazarewicz <m.nazarewicz@xxxxxxxxxxx> > Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > --- > drivers/usb/gadget/f_mass_storage.c | 16 +++++++--------- > 1 files changed, 7 insertions(+), 9 deletions(-) > > diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c > index a37640e..84f6491 100644 > --- a/drivers/usb/gadget/f_mass_storage.c > +++ b/drivers/usb/gadget/f_mass_storage.c > @@ -614,7 +614,13 @@ static int fsg_setup(struct usb_function *f, > return -EDOM; > VDBG(fsg, "get max LUN\n"); > *(u8 *) req->buf = fsg->common->nluns - 1; > - return 1; > + > + /* Respond with data/status */ > + req->length = 1; > + req->zero = 1 < w_length; I'm not familiar with the context here. It sure looks like the routine originally named class_setup_req() was renamed to fsg_setup(), and the additional code originally present in fsg_setup() was dropped. That could easily be a bug... I don't know if it really is. Regardless, setting req->length to 1 is probably wrong if w_length is 0. And setting req->zero at all is unnecessary. > + fsg->common->ep0req_name = > + ctrl->bRequestType & USB_DIR_IN ? "ep0-in" : "ep0-out"; > + return ep0_queue(fsg->common); Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html