On Tue, Sep 06, 2016 at 10:46:55AM -0400, Alan Stern wrote: Not knowing where INFO() goes, you should use trace_printk() not printk(), as the former is strictly per cpu, while the latter is globally serialized and can hide all these problems. > Index: usb-4.x/drivers/usb/gadget/function/f_mass_storage.c > =================================================================== > --- usb-4.x.orig/drivers/usb/gadget/function/f_mass_storage.c > +++ usb-4.x/drivers/usb/gadget/function/f_mass_storage.c > @@ -485,6 +485,8 @@ static void bulk_out_complete(struct usb > spin_lock(&common->lock); > bh->outreq_busy = 0; > bh->state = BUF_STATE_FULL; > + if (bh->bulk_out_intended_length == US_BULK_CB_WRAP_LEN) > + INFO(common, "compl: bh %p state %d\n", bh, bh->state); > wakeup_thread(common); > spin_unlock(&common->lock); > } > @@ -2207,6 +2209,7 @@ static int get_next_command(struct fsg_c > rc = sleep_thread(common, true); > if (rc) > return rc; > + INFO(common, "next: bh %p state %d\n", bh, bh->state); > } > smp_rmb(); > rc = fsg_is_set(common) ? received_cbw(common->fsg, bh) : -EIO; > -- 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