All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 10/11] Introduce single user mode
  2012-06-06 16:27 [PATCH] fix usb skeleton driver stefani
@ 2012-06-06 16:27 ` stefani
  0 siblings, 0 replies; 4+ messages in thread
From: stefani @ 2012-06-06 16:27 UTC (permalink / raw)
  To: linux-kernel, gregkh, oneukum; +Cc: alan, linux-usb, Stefani Seibold

From: Stefani Seibold <stefani@seibold.net>

Most USB devices can only used in a single usage mode. This patch
prevents a reopening on an already opened device.

Signed-off-by: Stefani Seibold <stefani@seibold.net>
---
 drivers/usb/usb-skeleton.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
index 11cc97b..81d256f 100644
--- a/drivers/usb/usb-skeleton.c
+++ b/drivers/usb/usb-skeleton.c
@@ -61,6 +61,7 @@ struct usb_skel {
 	int			errors;			/* the last request tanked */
 	bool			ongoing_read;		/* a read is going on */
 	bool			connected;		/* connected flag */
+	bool			in_use;			/* in use flag */
 	spinlock_t		err_lock;		/* lock for errors */
 	struct kref		kref;
 	struct mutex		io_mutex;		/* synchronize with disconnect */
@@ -104,6 +105,11 @@ static int skel_open(struct inode *inode, struct file *file)
 		goto exit;
 	}
 
+	if (dev->in_use) {
+		retval = -EBUSY;
+		goto exit;
+	}
+
 	retval = usb_autopm_get_interface(interface);
 	if (retval)
 		goto exit;
@@ -111,6 +117,7 @@ static int skel_open(struct inode *inode, struct file *file)
 	/* increment our usage count for the device */
 	kref_get(&dev->kref);
 
+	dev->in_use = true;
 	mutex_unlock(&sync_mutex);
 
 	/* save our object in the file's private structure */
@@ -131,6 +138,7 @@ static int skel_release(struct inode *inode, struct file *file)
 	if (dev->connected)
 		usb_autopm_put_interface(
 			usb_find_interface(&skel_driver, iminor(inode)));
+	dev->in_use = false;
 
 	/* decrement the count on our device */
 	kref_put(&dev->kref, skel_delete);
@@ -529,6 +537,7 @@ static int skel_probe(struct usb_interface *interface,
 
 	dev->udev = usb_get_dev(interface_to_usbdev(interface));
 	dev->connected = true;
+	dev->in_use = false;
 
 	/* set up the endpoint information */
 	/* use only the first bulk-in and bulk-out endpoints */
-- 
1.7.8.6


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 10/11] Introduce single user mode
@ 2012-06-06 16:31 stefani
  2012-06-06 16:31 ` [PATCH 11/11] Bump version number and add aditional author stefani
  2012-06-07 17:48 ` [PATCH 10/11] Introduce single user mode Andi Kleen
  0 siblings, 2 replies; 4+ messages in thread
From: stefani @ 2012-06-06 16:31 UTC (permalink / raw)
  To: linux-kernel, gregkh, oneukum; +Cc: alan, linux-usb, Stefani Seibold

From: Stefani Seibold <stefani@seibold.net>

Most USB devices can only used in a single usage mode. This patch
prevents a reopening on an already opened device.

Signed-off-by: Stefani Seibold <stefani@seibold.net>
---
 drivers/usb/usb-skeleton.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
index 11cc97b..81d256f 100644
--- a/drivers/usb/usb-skeleton.c
+++ b/drivers/usb/usb-skeleton.c
@@ -61,6 +61,7 @@ struct usb_skel {
 	int			errors;			/* the last request tanked */
 	bool			ongoing_read;		/* a read is going on */
 	bool			connected;		/* connected flag */
+	bool			in_use;			/* in use flag */
 	spinlock_t		err_lock;		/* lock for errors */
 	struct kref		kref;
 	struct mutex		io_mutex;		/* synchronize with disconnect */
@@ -104,6 +105,11 @@ static int skel_open(struct inode *inode, struct file *file)
 		goto exit;
 	}
 
+	if (dev->in_use) {
+		retval = -EBUSY;
+		goto exit;
+	}
+
 	retval = usb_autopm_get_interface(interface);
 	if (retval)
 		goto exit;
@@ -111,6 +117,7 @@ static int skel_open(struct inode *inode, struct file *file)
 	/* increment our usage count for the device */
 	kref_get(&dev->kref);
 
+	dev->in_use = true;
 	mutex_unlock(&sync_mutex);
 
 	/* save our object in the file's private structure */
@@ -131,6 +138,7 @@ static int skel_release(struct inode *inode, struct file *file)
 	if (dev->connected)
 		usb_autopm_put_interface(
 			usb_find_interface(&skel_driver, iminor(inode)));
+	dev->in_use = false;
 
 	/* decrement the count on our device */
 	kref_put(&dev->kref, skel_delete);
@@ -529,6 +537,7 @@ static int skel_probe(struct usb_interface *interface,
 
 	dev->udev = usb_get_dev(interface_to_usbdev(interface));
 	dev->connected = true;
+	dev->in_use = false;
 
 	/* set up the endpoint information */
 	/* use only the first bulk-in and bulk-out endpoints */
-- 
1.7.8.6


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 11/11] Bump version number and add aditional author
  2012-06-06 16:31 [PATCH 10/11] Introduce single user mode stefani
@ 2012-06-06 16:31 ` stefani
  2012-06-07 17:48 ` [PATCH 10/11] Introduce single user mode Andi Kleen
  1 sibling, 0 replies; 4+ messages in thread
From: stefani @ 2012-06-06 16:31 UTC (permalink / raw)
  To: linux-kernel, gregkh, oneukum; +Cc: alan, linux-usb, Stefani Seibold

From: Stefani Seibold <stefani@seibold.net>

Signed-off-by: Stefani Seibold <stefani@seibold.net>
---
 drivers/usb/usb-skeleton.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
index 81d256f..c93841c 100644
--- a/drivers/usb/usb-skeleton.c
+++ b/drivers/usb/usb-skeleton.c
@@ -1,7 +1,8 @@
 /*
- * USB Skeleton driver - 2.2
+ * USB Skeleton driver - 2.3
  *
  * Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com)
+ * fixes by Stefani Seibold (stefani@seibold.net)
  *
  *	This program is free software; you can redistribute it and/or
  *	modify it under the terms of the GNU General Public License as
-- 
1.7.8.6


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 10/11] Introduce single user mode
  2012-06-06 16:31 [PATCH 10/11] Introduce single user mode stefani
  2012-06-06 16:31 ` [PATCH 11/11] Bump version number and add aditional author stefani
@ 2012-06-07 17:48 ` Andi Kleen
  1 sibling, 0 replies; 4+ messages in thread
From: Andi Kleen @ 2012-06-07 17:48 UTC (permalink / raw)
  To: stefani; +Cc: linux-kernel, gregkh, oneukum, alan, linux-usb

stefani@seibold.net writes:
>  	}
>  
> +	if (dev->in_use) {
> +		retval = -EBUSY;
> +		goto exit;
> +	}

This plus setting the flag has to be inside the mutex, otherwise you
have an obvious race.

-Andi

-- 
ak@linux.intel.com -- Speaking for myself only

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-06-07 17:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-06 16:31 [PATCH 10/11] Introduce single user mode stefani
2012-06-06 16:31 ` [PATCH 11/11] Bump version number and add aditional author stefani
2012-06-07 17:48 ` [PATCH 10/11] Introduce single user mode Andi Kleen
  -- strict thread matches above, loose matches on Subject: below --
2012-06-06 16:27 [PATCH] fix usb skeleton driver stefani
2012-06-06 16:27 ` [PATCH 10/11] Introduce single user mode stefani

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.