diff options
author | Constantine Shulyupin <const@MakeLinux.com> | 2012-10-10 10:14:00 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-10-24 17:40:50 -0400 |
commit | e8cebb9cde3716800219ea8473306d431e83154b (patch) | |
tree | 6577ad2ba289d7d62c44208220d4b69b51ab185d /drivers | |
parent | 801f00633568ed6d5eebef5ef10d8b5661379f2c (diff) |
USB: usb-skeleton.c: fix compilation error and restored kref_put on fail in skel_open
Fixing compilaton error.
Incrementing usage counter only on successful execution of skel_open.
Removing redundant locking
Some last changes in function skel_open and finally commit
52a7499 Revert "USB: usb-skeleton.c: fix open/disconnect race"
introduced a bug in function skel_open, which this patch fixes.
Changes since v2:
- refactoring
- Removing redundant mutex synchronization.
Changes since v1:
- Fixed accordingly feedback of Oliver Neukum oneukum@suse.de: also need to drop the lock.
Signed-off-by: Constantine Shulyupin <const@MakeLinux.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/usb-skeleton.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c index 0616f235bd6b..ce310170829f 100644 --- a/drivers/usb/usb-skeleton.c +++ b/drivers/usb/usb-skeleton.c | |||
@@ -105,20 +105,15 @@ static int skel_open(struct inode *inode, struct file *file) | |||
105 | goto exit; | 105 | goto exit; |
106 | } | 106 | } |
107 | 107 | ||
108 | /* increment our usage count for the device */ | ||
109 | kref_get(&dev->kref); | ||
110 | |||
111 | /* lock the device to allow correctly handling errors | ||
112 | * in resumption */ | ||
113 | mutex_lock(&dev->io_mutex); | ||
114 | |||
115 | retval = usb_autopm_get_interface(interface); | 108 | retval = usb_autopm_get_interface(interface); |
116 | if (retval) | 109 | if (retval) |
117 | goto out_err; | 110 | goto exit; |
111 | |||
112 | /* increment our usage count for the device */ | ||
113 | kref_get(&dev->kref); | ||
118 | 114 | ||
119 | /* save our object in the file's private structure */ | 115 | /* save our object in the file's private structure */ |
120 | file->private_data = dev; | 116 | file->private_data = dev; |
121 | mutex_unlock(&dev->io_mutex); | ||
122 | 117 | ||
123 | exit: | 118 | exit: |
124 | return retval; | 119 | return retval; |