From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932372Ab1GVVzd (ORCPT ); Fri, 22 Jul 2011 17:55:33 -0400 Received: from natasha.panasas.com ([67.152.220.90]:42935 "EHLO natasha.panasas.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932241Ab1GVVzc (ORCPT ); Fri, 22 Jul 2011 17:55:32 -0400 Message-ID: <4E29EFDA.1080407@panasas.com> Date: Fri, 22 Jul 2011 14:47:06 -0700 From: Boaz Harrosh User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110621 Fedora/3.1.11-1.fc15 Thunderbird/3.1.11 MIME-Version: 1.0 To: Jonathan Cameron CC: , , , , , , , , , , , , , , , , , , , , , , , Subject: Re: [osd-dev] [PATCH 6/8] [SCSI] osduld: use ida_simple_get to handle id. References: <1311352886-4047-1-git-send-email-jic23@cam.ac.uk> <1311352886-4047-7-git-send-email-jic23@cam.ac.uk> In-Reply-To: <1311352886-4047-7-git-send-email-jic23@cam.ac.uk> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/22/2011 09:41 AM, Jonathan Cameron wrote: > This does involve additional use of the spin lock in idr.c. > Is this an issue? > Actually it looks like a bug fix. I had a TODO: to add one. > Also, some error mangling was needed to keep the interface > the same. Does this matter or can we return -ENOSPC instead > of -EBUSY? > Na. -ENOSPC is just fine. All the osd Application just check for "any error" not a specific one. > Signed-off-by: Jonathan Cameron Ack-by: Boaz Harrosh > --- > 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; Just drop the translation is fine as well > + 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; > } >