Hi,
registering a device only partially initialised is quite bad an
idea.
Regards
Oliver
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.
===================================================================
[EMAIL PROTECTED], 2003-07-16 17:06:28+02:00, [EMAIL PROTECTED]
- fix race between probe and open
usb-skeleton.c | 37 +++++++++++++++----------------------
1 files changed, 15 insertions(+), 22 deletions(-)
diff -Nru a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
--- a/drivers/usb/usb-skeleton.c Wed Jul 16 17:08:24 2003
+++ b/drivers/usb/usb-skeleton.c Wed Jul 16 17:08:24 2003
@@ -507,7 +507,7 @@
struct usb_endpoint_descriptor *endpoint;
size_t buffer_size;
int i;
- int retval;
+ int retval = -ENOMEM;
/* See if the device offered us matches what we can accept */
if ((udev->descriptor.idVendor != USB_SKEL_VENDOR_ID) ||
@@ -515,18 +515,11 @@
return -ENODEV;
}
- retval = usb_register_dev (interface, &skel_class);
- if (retval) {
- /* something prevented us from registering this driver */
- err ("Not able to get a minor for this device.");
- goto exit;
- }
-
/* allocate memory for our device state and initialize it */
dev = kmalloc (sizeof(struct usb_skel), GFP_KERNEL);
if (dev == NULL) {
err ("Out of memory");
- goto exit_minor;
+ goto error;
}
memset (dev, 0x00, sizeof (*dev));
@@ -603,24 +596,24 @@
/* allow device read, write and ioctl */
dev->present = 1;
+ /* we can register the device now, as it is ready */
+ usb_set_intfdata (interface, dev);
+ retval = usb_register_dev (interface, &skel_class);
+ if (retval) {
+ /* something prevented us from registering this driver */
+ err ("Not able to get a minor for this device.");
+ usb_set_intfdata (interface, NULL);
+ goto error;
+ }
+
+
/* let the user know what node this device is now attached to */
info ("USB Skeleton device now attached to USBSkel-%d", dev->minor);
-
- goto exit;
+ return 0;
error:
skel_delete (dev);
- dev = NULL;
-
-exit_minor:
- usb_deregister_dev (interface, &skel_class);
-
-exit:
- if (dev) {
- usb_set_intfdata (interface, dev);
- return 0;
- }
- return -ENODEV;
+ return retval;
}
===================================================================
This BitKeeper patch contains the following changesets:
1.1470
## Wrapped with gzip_uu ##
begin 664 bkpatch28295
M'XL(`&AJ%3\``\55:T_44!#]W/LK)I`81+>]T]>6)6M0(4KD%91/:LC==G;;
MT.TE]]YE(:[_W6D7`8TB&HU]MW-F.N?,2;L*)Y;,P--U=4%&K,)K;=W`X^OI
MK*#&;VAV-IOZVDPX=JPUQX)23RE8)@3O#)$-'%D7IH(A1\KE)7#$#CSTHYLG
M[NJ<!M[QSJN3O>?'[EMAIL PROTECTED]'\+)4S83>DH/A4#AM+E1=V"WEREHWOC.JL5-RRL_U
M='$#7812AKPFV(]DDBXPE7%_D6.!J&*D0H9QEL:B)E>J>JNNFMEESY9M]]_6
MB&0?8TPC*7'!)6(4VX`^QGT),@ID/\`4L#^0Z2#,GLAP("[EMAIL PROTECTED]"3
[EMAIL PROTECTED](O10X]&%>78%1.,"(W)[EMAIL PROTECTED]@[EMAIL
PROTECTED]>0;&QD*(YN]12]WUR$
MD$J*9W#>3NK'S1>F96^#F1VU>\^>$8O,L/R6S0;*"!=QE#$;ZD=9P;>4I!1A
MAO?(]XO:[:A23"1&\0+C),PZ\_P\IW73/R0BK"/3;!D]KWD&?JEXY*;PJ9B]
MGQB:?'P`&SXF&.("$\SZG?'B[VR'@RA^B.T2Z(7A?S/><AJ'T#/S;F,C'=TS
MF#^PY7:"$E#L+D]>[EMAIL PROTECTED])@J#*&W<W"XO[._V8(R8!V3<*/#=B?/[EMAIL PROTECTED]
M9E/LIC(!Y*?!.LP)<M5PG4G5CA)<25#01<5,&SU_"LI"Y:"RC%#%%:P'PF,>
MIY;<*;]_7"BG8(VOR(Q9G:[EMAIL PROTECTED]<IWFMK&V3JC&L
M+1,?PR?NF=NS_&UU9=5,6&^Z($XMN"2,C9[>]-Q&&6.OQ>YZ])@JK*T<:`=J
M5!-;`B;\:54PK1IM8*S-=4I'U5]I7W\_L8.3O;T.=5=)[[/XP.MV*C,(6UT[
ML9G#S#0@>[EMAIL PROTECTED]>_B#RDO(S.YL.QZF2A8I'[EMAIL PROTECTED]@]-79B08`
!````
`
end
-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel