Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

uio: convert to idr_alloc()

Convert to the much saner new idr interface.

Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Hans J. Koch" <hjk@hansjkoch.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Tejun Heo and committed by
Linus Torvalds
6d770931 6deb69fa

+4 -15
+4 -15
drivers/uio/uio.c
··· 369 369 static int uio_get_minor(struct uio_device *idev) 370 370 { 371 371 int retval = -ENOMEM; 372 - int id; 373 372 374 373 mutex_lock(&minor_lock); 375 - if (idr_pre_get(&uio_idr, GFP_KERNEL) == 0) 376 - goto exit; 377 - 378 - retval = idr_get_new(&uio_idr, idev, &id); 379 - if (retval < 0) { 380 - if (retval == -EAGAIN) 381 - retval = -ENOMEM; 382 - goto exit; 383 - } 384 - if (id < UIO_MAX_DEVICES) { 385 - idev->minor = id; 386 - } else { 374 + retval = idr_alloc(&uio_idr, idev, 0, UIO_MAX_DEVICES, GFP_KERNEL); 375 + if (retval >= 0) { 376 + idev->minor = retval; 377 + } else if (retval == -ENOSPC) { 387 378 dev_err(idev->dev, "too many uio devices\n"); 388 379 retval = -EINVAL; 389 - idr_remove(&uio_idr, id); 390 380 } 391 - exit: 392 381 mutex_unlock(&minor_lock); 393 382 return retval; 394 383 }