After the worker thread is launched, bind function is doing further
configuration. In case of failure stop the thread.

Signed-off-by: Sanjay Singh Rawat <snjs...@gmail.com>
---

history:

v3: - handled Michal's comment; used existing function to change state and
      exit thread.
    - tested for f_mass_storage.c only; dropped patches for legacy.

v2: - Handled review comment from Michal.
      - Merged v2 patch-2/3/4 to make patch-2.
    - Added acked-by from Michal to patch-1.

v1: - Handled review comments from Michal.
      - updated patch-2 : added thread wake in legacy client of function 
(patch-2).
      - added patch-4 : freeing file-storage thread in configuration error case.
        - added patch-3 (needed by patch-4) : moved fsg_common structure to 
header
          file, as code is dereferencing common->thread_task.
---
 drivers/usb/gadget/function/f_mass_storage.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/gadget/function/f_mass_storage.c 
b/drivers/usb/gadget/function/f_mass_storage.c
index f936268..c5b3db5 100644
--- a/drivers/usb/gadget/function/f_mass_storage.c
+++ b/drivers/usb/gadget/function/f_mass_storage.c
@@ -3080,7 +3080,7 @@ static int fsg_bind(struct usb_configuration *c, struct 
usb_function *f)
        /* New interface */
        i = usb_interface_id(c, f);
        if (i < 0)
-               return i;
+               goto fail;
        fsg_intf_desc.bInterfaceNumber = i;
        fsg->interface_number = i;
 
@@ -3123,7 +3123,14 @@ static int fsg_bind(struct usb_configuration *c, struct 
usb_function *f)
 
 autoconf_fail:
        ERROR(fsg, "unable to autoconfigure all endpoints\n");
-       return -ENOTSUPP;
+       i = -ENOTSUPP;
+fail:
+       /* terminate the thread */
+       if (fsg->common->state != FSG_STATE_TERMINATED) {
+               raise_exception(fsg->common, FSG_STATE_EXIT);
+               wait_for_completion(&fsg->common->thread_notifier);
+       }
+       return i;
 }
 
 /****************************** ALLOCATE FUNCTION *************************/
-- 
1.9.1

--
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