@@ -603,7 +603,11 @@ static int wdm_flush(struct file *file, fl_owner_t id)
test_bit(WDM_DISCONNECTING, &desc->flags),
WDM_FLUSH_TIMEOUT);
- /* cannot dereference desc->intf if WDM_DISCONNECTING */
+ /*
+ * to report the correct error.
+ * This is best effort
+ * We are inevitably racing with the hardware.
+ */
if (test_bit(WDM_DISCONNECTING, &desc->flags))
return -ENODEV;
if (!rv)
@@ -616,9 +620,6 @@ static int wdm_flush(struct file *file, fl_owner_t id)
desc->werr = 0;
spin_unlock_irq(&desc->iuspin);
- if (rv < 0)
- dev_err(&desc->intf->dev, "Error in flush path: %d\n", rv);
-
return usb_translate_errors(rv);
}
After a disconnect intf->dev is not a valid pointer any longer as flush() uses it only for logging purposes logging is not worth it. Remove the dev_err() Reported-by: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp> Signed-off-by: Oliver Neukum <oneukum@suse.com> --- drivers/usb/class/cdc-wdm.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)