If one usb interface driver returns failure from its
suspend(auto) callback inside usb_suspend_both, its
resume() callback should be called to recover its
working state.

Unfortunately, usbcore missed it, so fix the bug by
decreasing the iterator variable to cover the current
failed interface.

Cc: sta...@vger.kernel.org
Signed-off-by: Ming Lei <ming....@canonical.com>
---
 drivers/usb/core/driver.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index ddd820d..c228c9c 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -1250,8 +1250,10 @@ static int usb_suspend_both(struct usb_device *udev, 
pm_message_t msg)
                        /* Ignore errors during system sleep transitions */
                        if (!PMSG_IS_AUTO(msg))
                                status = 0;
-                       if (status != 0)
+                       if (status != 0) {
+                               i--;
                                break;
+                       }
                }
        }
        if (status == 0) {
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to