diff options
Diffstat (limited to 'drivers/char/misc.c')
-rw-r--r-- | drivers/char/misc.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/char/misc.c b/drivers/char/misc.c index 281edefffa0b..a3a02f6303c8 100644 --- a/drivers/char/misc.c +++ b/drivers/char/misc.c | |||
@@ -214,6 +214,9 @@ int misc_register(struct miscdevice * misc) | |||
214 | misc->this_device = device_create(misc_class, misc->parent, dev, | 214 | misc->this_device = device_create(misc_class, misc->parent, dev, |
215 | misc, "%s", misc->name); | 215 | misc, "%s", misc->name); |
216 | if (IS_ERR(misc->this_device)) { | 216 | if (IS_ERR(misc->this_device)) { |
217 | int i = misc->minor; | ||
218 | if (i < DYNAMIC_MINORS && i >= 0) | ||
219 | misc_minors[i>>3] &= ~(1 << (i & 7)); | ||
217 | err = PTR_ERR(misc->this_device); | 220 | err = PTR_ERR(misc->this_device); |
218 | goto out; | 221 | goto out; |
219 | } | 222 | } |
@@ -248,9 +251,8 @@ int misc_deregister(struct miscdevice *misc) | |||
248 | mutex_lock(&misc_mtx); | 251 | mutex_lock(&misc_mtx); |
249 | list_del(&misc->list); | 252 | list_del(&misc->list); |
250 | device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor)); | 253 | device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor)); |
251 | if (i < DYNAMIC_MINORS && i>0) { | 254 | if (i < DYNAMIC_MINORS && i >= 0) |
252 | misc_minors[i>>3] &= ~(1 << (misc->minor & 7)); | 255 | misc_minors[i>>3] &= ~(1 << (i & 7)); |
253 | } | ||
254 | mutex_unlock(&misc_mtx); | 256 | mutex_unlock(&misc_mtx); |
255 | return 0; | 257 | return 0; |
256 | } | 258 | } |