From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753208Ab1GVQlh (ORCPT ); Fri, 22 Jul 2011 12:41:37 -0400 Received: from ppsw-51.csi.cam.ac.uk ([131.111.8.151]:49925 "EHLO ppsw-51.csi.cam.ac.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752670Ab1GVQla (ORCPT ); Fri, 22 Jul 2011 12:41:30 -0400 X-Cam-AntiVirus: no malware found X-Cam-SpamDetails: not scanned X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/ From: Jonathan Cameron To: linux-kernel@vger.kernel.org Cc: lm-sensors@lm-sensors.org, rtc-linux@googlegroups.com, osd-dev@open-osd.org, linux-scsi@vger.kernel.org, dri-devel@lists.freedesktop.org, jkosina@suse.cz, naota@elisp.net, rusty@rustcorp.com.au, paulmck@linux.vnet.ibm.com, namhyung@gmail.com, randy.dunlap@oracle.com, tj@kernel.org, cabarnes@indesign-llc.com, akpm@linux-foundation.org, airlied@redhat.com, thellstrom@vmware.com, johnpol@2ka.mipt.ru, JBottomley@parallels.com, bhalevy@panasas.com, bharrosh@panasas.com, a.zummo@towertech.it, guenter.roeck@ericsson.com, khali@linux-fr.org, airlied@linux.ie, Jonathan Cameron Subject: [PATCH 6/8] [SCSI] osduld: use ida_simple_get to handle id. Date: Fri, 22 Jul 2011 17:41:15 +0100 Message-Id: <1311352886-4047-7-git-send-email-jic23@cam.ac.uk> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: <1311352886-4047-1-git-send-email-jic23@cam.ac.uk> References: <1311352886-4047-1-git-send-email-jic23@cam.ac.uk> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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