aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/char/misc.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/char/misc.c b/drivers/char/misc.c
index 522136d40843..190d4423653f 100644
--- a/drivers/char/misc.c
+++ b/drivers/char/misc.c
@@ -183,19 +183,12 @@ static const struct file_operations misc_fops = {
183 183
184int misc_register(struct miscdevice * misc) 184int misc_register(struct miscdevice * misc)
185{ 185{
186 struct miscdevice *c;
187 dev_t dev; 186 dev_t dev;
188 int err = 0; 187 int err = 0;
189 188
190 INIT_LIST_HEAD(&misc->list); 189 INIT_LIST_HEAD(&misc->list);
191 190
192 mutex_lock(&misc_mtx); 191 mutex_lock(&misc_mtx);
193 list_for_each_entry(c, &misc_list, list) {
194 if (c->minor == misc->minor) {
195 mutex_unlock(&misc_mtx);
196 return -EBUSY;
197 }
198 }
199 192
200 if (misc->minor == MISC_DYNAMIC_MINOR) { 193 if (misc->minor == MISC_DYNAMIC_MINOR) {
201 int i = find_first_zero_bit(misc_minors, DYNAMIC_MINORS); 194 int i = find_first_zero_bit(misc_minors, DYNAMIC_MINORS);
@@ -205,6 +198,15 @@ int misc_register(struct miscdevice * misc)
205 } 198 }
206 misc->minor = DYNAMIC_MINORS - i - 1; 199 misc->minor = DYNAMIC_MINORS - i - 1;
207 set_bit(i, misc_minors); 200 set_bit(i, misc_minors);
201 } else {
202 struct miscdevice *c;
203
204 list_for_each_entry(c, &misc_list, list) {
205 if (c->minor == misc->minor) {
206 mutex_unlock(&misc_mtx);
207 return -EBUSY;
208 }
209 }
208 } 210 }
209 211
210 dev = MKDEV(MISC_MAJOR, misc->minor); 212 dev = MKDEV(MISC_MAJOR, misc->minor);