diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index fca61720b8733140c805c36fd8b7398fd58fac12..38072e4e74bd66776e64ae6fdd9c1ad97dac3aae 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c @@ -1659,6 +1659,11 @@ static int usb_runtime_suspend(struct device *dev) return -EAGAIN; status = usb_suspend_both(udev, PMSG_AUTO_SUSPEND); + /* The PM core reacts badly unless the return code is 0, + * -EAGAIN, or -EBUSY, so always return -EBUSY on an error. + */ + if (status != 0) + return -EBUSY; return status; }