On Thu, 3 Feb 2005, Nick Sillik wrote:
> I changed the filenames (monetouch.* -> onetouch.*). I also changed the
> description in the Kconfig to something a little more informative.
> +++ linux-2.6.10nsillik/drivers/usb/storage/onetouch.c 2005-02-03
> 21:14:21.000000000 -0500
> +void onetouch_connect_input(struct us_data *ss)
> +void onetouch_release_input(struct us_data *ss)
Although it doesn't really matter, it's customary to use "us" as the local
variable for struct us_data.
> +++ linux-2.6.10nsillik/drivers/usb/storage/onetouch.h 2005-02-03
> 21:14:16.000000000 -0500
> +#include <linux/config.h>
> +#include "usb.h"
> +#include "linux/input.h"
This should be <linux/input.h>, not "linux/input.h". And it should
probably come before the line for "usb.h".
> +++ linux-2.6.10nsillik/drivers/usb/storage/usb.c 2005-02-03
> 19:18:28.000000000 -0500
> +#ifdef CONFIG_USB_STORAGE_ONETOUCH
> +#include "monetouch.h"
> +#endif
> +#ifndef CONFIG_USB_STORAGE_ONETOUCH
> +static inline void onetouch_connect_input (struct us_data *ss) {}
> +static inline void onetouch_release_input (struct us_data *ss) {}
> +#endif
You can replace the #endif - #ifndef combination with a simple #else.
> @@ -994,6 +1000,8 @@ static int storage_probe(struct usb_inte
> if (result)
> goto BadDevice;
>
> + onetouch_connect_input(us);
> +
> /* Acquire all the other resources and add the host */
> result = usb_stor_acquire_resources(us);
> if (result)
> @@ -1047,6 +1055,8 @@ static void storage_disconnect(struct us
> up(&us->dev_semaphore);
> scsi_remove_host(us->host);
>
> + onetouch_release_input(us);
> +
> /* Wait for everything to become idle and release all our resources */
> usb_stor_release_resources(us);
> dissociate_dev(us);
By arranging the code like this, you have guaranteed that the onetouch
device won't be released properly if something goes wrong during
usb_stor_acquire_resources(). You should move the call to
onetouch_connect_input() into usb_stor_acquire_resources() and the call to
onetouch_release_input() into usb_stor_release_resources().
I don't know a lot about the input layer. Can you guarantee that nothing
will go wrong if a user opens the onetouch device at the same time as
onetouch_release_input() is running?
For that matter, what happens if onetouch_release_input() runs while
onetouch->open_count > 0? When the user closes the device sometime later,
won't the resulting call to onetouch_close() cause an oops?
Alan Stern
-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel