From: Felipe Balbi <felipe.balbi@nokia.com>
Date: Mon, 8 Dec 2008 11:50:27 +0000 (+0200)
Subject: USB: gadget: don't wait for completion twice
X-Git-Tag: firefly_0821_release~16082^2~65
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=889394b1eb95f040525d06dd4f2f1222b94023e2;p=firefly-linux-kernel-4.4.55.git

USB: gadget: don't wait for completion twice

In some obscure scenarios e.g. passing a 0-byte backing file
storage, wait_for_completion() would wait forever in fsg_cleanup().

Prevent it by completing the thread in fsg_bind() error path.

Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---

diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
index 93933155e81c..b10fa31cc915 100644
--- a/drivers/usb/gadget/file_storage.c
+++ b/drivers/usb/gadget/file_storage.c
@@ -4182,6 +4182,7 @@ out:
 	fsg->state = FSG_STATE_TERMINATED;	// The thread is dead
 	fsg_unbind(gadget);
 	close_all_backing_files(fsg);
+	complete(&fsg->thread_notifier);
 	return rc;
 }