@@ -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)
@@ -611,9 +615,7 @@ static int wdm_flush(struct file *file, fl_owner_t id)
if (rv < 0)
return -EINTR;
rv = desc->werr;
- if (rv < 0)
- dev_err(&desc->intf->dev, "Error in flush path: %d\n",
- rv);
+ desc->werr = 0;
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 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)