From: Jonathan Cameron <jic23@xxxxxxxxx> Subject: drivers/scsi/osd/osd_uld.c: use ida_simple_get() to handle id This does involve additional use of the spin lock in idr.c. Is this an issue? Also, some error mangling was needed to keep the interface the same. Does this matter or can we return -ENOSPC instead of -EBUSY? Signed-off-by: Jonathan Cameron <jic23@xxxxxxxxx> Cc: Rusty Russell <rusty@xxxxxxxxxxxxxxx> Cc: Tejun Heo <tj@xxxxxxxxxx> Cc: James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> Cc: Boaz Harrosh <bharrosh@xxxxxxxxxxx> Cc: Benny Halevy <bhalevy@xxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxx> --- drivers/scsi/osd/osd_uld.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff -puN drivers/scsi/osd/osd_uld.c~drivers-scsi-osd-osd_uldc-use-ida_simple_get-to-handle-id drivers/scsi/osd/osd_uld.c --- a/drivers/scsi/osd/osd_uld.c~drivers-scsi-osd-osd_uldc-use-ida_simple_get-to-handle-id +++ a/drivers/scsi/osd/osd_uld.c @@ -387,7 +387,7 @@ static void __remove(struct device *dev) if (oud->disk) put_disk(oud->disk); - ida_remove(&osd_minor_ida, oud->minor); + ida_simple_remove(&osd_minor_ida, oud->minor); kfree(oud); } @@ -403,18 +403,12 @@ static int osd_probe(struct device *dev) if (scsi_device->type != TYPE_OSD) return -ENODEV; - do { - if (!ida_pre_get(&osd_minor_ida, GFP_KERNEL)) - return -ENODEV; - - error = ida_get_new(&osd_minor_ida, &minor); - } while (error == -EAGAIN); - - if (error) - return error; - if (minor >= SCSI_OSD_MAX_MINOR) { - error = -EBUSY; - goto err_retract_minor; + minor = ida_simple_get(&osd_minor_ida, 0, + SCSI_OSD_MAX_MINOR, GFP_KERNEL); + if (minor < 0) { + if (minor == -ENOSPC) + return -EBUSY; + return minor; } error = -ENOMEM; @@ -491,7 +485,7 @@ err_free_osd: dev_set_drvdata(dev, NULL); kfree(oud); err_retract_minor: - ida_remove(&osd_minor_ida, minor); + ida_simple_remove(&osd_minor_ida, minor); return error; } _ -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html