[PATCH] pcmcia: release_class

Properly wait for the class refcount to reach zero.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Dominik Brodowski and committed by Linus Torvalds 378a33a6 3448139b

+15 -1
+15 -1
drivers/pcmcia/cs.c
··· 903 } 904 905 906 struct class pcmcia_socket_class = { 907 .name = "pcmcia_socket", 908 .hotplug = pcmcia_socket_hotplug, 909 .release = pcmcia_release_socket, 910 }; 911 EXPORT_SYMBOL(pcmcia_socket_class); 912 913 914 static int __init init_pcmcia_cs(void) 915 { 916 - int ret = class_register(&pcmcia_socket_class); 917 if (ret) 918 return (ret); 919 return class_interface_register(&pccard_sysfs_interface); ··· 935 { 936 class_interface_unregister(&pccard_sysfs_interface); 937 class_unregister(&pcmcia_socket_class); 938 } 939 940 subsys_initcall(init_pcmcia_cs);
··· 903 } 904 905 906 + static struct completion pcmcia_unload; 907 + 908 + static void pcmcia_release_socket_class(struct class *data) 909 + { 910 + complete(&pcmcia_unload); 911 + } 912 + 913 + 914 struct class pcmcia_socket_class = { 915 .name = "pcmcia_socket", 916 .hotplug = pcmcia_socket_hotplug, 917 .release = pcmcia_release_socket, 918 + .class_release = pcmcia_release_socket_class, 919 }; 920 EXPORT_SYMBOL(pcmcia_socket_class); 921 922 923 static int __init init_pcmcia_cs(void) 924 { 925 + int ret; 926 + 927 + init_completion(&pcmcia_unload); 928 + ret = class_register(&pcmcia_socket_class); 929 if (ret) 930 return (ret); 931 return class_interface_register(&pccard_sysfs_interface); ··· 923 { 924 class_interface_unregister(&pccard_sysfs_interface); 925 class_unregister(&pcmcia_socket_class); 926 + 927 + wait_for_completion(&pcmcia_unload); 928 } 929 930 subsys_initcall(init_pcmcia_cs);