[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1311352886-4047-16-git-send-email-jic23@cam.ac.uk>
Date: Fri, 22 Jul 2011 17:41:24 +0100
From: Jonathan Cameron <jic23@....ac.uk>
To: linux-kernel@...r.kernel.org
Cc: lm-sensors@...sensors.org, rtc-linux@...glegroups.com,
osd-dev@...n-osd.org, linux-scsi@...r.kernel.org,
dri-devel@...ts.freedesktop.org, jkosina@...e.cz, naota@...sp.net,
rusty@...tcorp.com.au, paulmck@...ux.vnet.ibm.com,
namhyung@...il.com, randy.dunlap@...cle.com, tj@...nel.org,
cabarnes@...esign-llc.com, akpm@...ux-foundation.org,
airlied@...hat.com, thellstrom@...are.com, johnpol@....mipt.ru,
JBottomley@...allels.com, bhalevy@...asas.com,
bharrosh@...asas.com, a.zummo@...ertech.it,
guenter.roeck@...csson.com, khali@...ux-fr.org, airlied@...ux.ie,
Jonathan Cameron <jic23@....ac.uk>
Subject: [PATCH 6/8] [SCSI] osduld: 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@....ac.uk>
---
drivers/scsi/osd/osd_uld.c | 22 ++++++++--------------
1 files changed, 8 insertions(+), 14 deletions(-)
diff --git a/drivers/scsi/osd/osd_uld.c b/drivers/scsi/osd/osd_uld.c
index b31a8e3..fa849bd 100644
--- a/drivers/scsi/osd/osd_uld.c
+++ b/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;
}
--
1.7.3.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists