Commit 2bea2e4abf2fe8bc7384103aeaad91089109cfba

Authored by Linus Torvalds

Merge branch 'bkl-removal' of git://git.lwn.net/linux-2.6

* 'bkl-removal' of git://git.lwn.net/linux-2.6:
  UIO: BKL removal

Showing 1 changed file Side-by-side Diff

... ... @@ -47,6 +47,9 @@
47 47 struct class *class;
48 48 } *uio_class;
49 49  
  50 +/* Protect idr accesses */
  51 +static DEFINE_MUTEX(minor_lock);
  52 +
50 53 /*
51 54 * attributes
52 55 */
... ... @@ -239,7 +242,6 @@
239 242  
240 243 static int uio_get_minor(struct uio_device *idev)
241 244 {
242   - static DEFINE_MUTEX(minor_lock);
243 245 int retval = -ENOMEM;
244 246 int id;
245 247  
246 248  
... ... @@ -261,7 +263,9 @@
261 263  
262 264 static void uio_free_minor(struct uio_device *idev)
263 265 {
  266 + mutex_lock(&minor_lock);
264 267 idr_remove(&uio_idr, idev->minor);
  268 + mutex_unlock(&minor_lock);
265 269 }
266 270  
267 271 /**
268 272  
... ... @@ -305,8 +309,9 @@
305 309 struct uio_listener *listener;
306 310 int ret = 0;
307 311  
308   - lock_kernel();
  312 + mutex_lock(&minor_lock);
309 313 idev = idr_find(&uio_idr, iminor(inode));
  314 + mutex_unlock(&minor_lock);
310 315 if (!idev) {
311 316 ret = -ENODEV;
312 317 goto out;
313 318  
314 319  
315 320  
316 321  
... ... @@ -332,18 +337,15 @@
332 337 if (ret)
333 338 goto err_infoopen;
334 339 }
335   - unlock_kernel();
336 340 return 0;
337 341  
338 342 err_infoopen:
339   -
340 343 kfree(listener);
341   -err_alloc_listener:
342 344  
  345 +err_alloc_listener:
343 346 module_put(idev->owner);
344 347  
345 348 out:
346   - unlock_kernel();
347 349 return ret;
348 350 }
349 351