From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753031AbbJFRRq (ORCPT ); Tue, 6 Oct 2015 13:17:46 -0400 Received: from bedivere.hansenpartnership.com ([66.63.167.143]:53392 "EHLO bedivere.hansenpartnership.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751498AbbJFRRp (ORCPT ); Tue, 6 Oct 2015 13:17:45 -0400 Message-ID: <1444151854.2245.18.camel@HansenPartnership.com> Subject: Re: [PATCHv2 1/1] SCSI: update hosts module to use idr index management From: James Bottomley To: Lee Duncan Cc: Christoph Hellwig , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, Tejun Heo , Hannes Reinecke , Johannes Thumshirn Date: Tue, 06 Oct 2015 10:17:34 -0700 In-Reply-To: <56140188.6070107@suse.com> References: <1a69690d615610c1dee725db7e6d81cf2db28266.1444085255.git.lduncan@suse.com> <20151006094040.GA24624@infradead.org> <56140188.6070107@suse.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.12.11 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 2015-10-06 at 10:14 -0700, Lee Duncan wrote: > On 10/06/2015 02:40 AM, Christoph Hellwig wrote: > >> struct Scsi_Host *scsi_host_lookup(unsigned short hostnum) > >> { > >> - struct device *cdev; > >> - struct Scsi_Host *shost = NULL; > >> - > >> - cdev = class_find_device(&shost_class, NULL, &hostnum, > >> - __scsi_host_match); > >> - if (cdev) { > >> - shost = scsi_host_get(class_to_shost(cdev)); > >> - put_device(cdev); > >> - } > >> + struct Scsi_Host *shost; > >> + > >> + spin_lock(&host_index_lock); > >> + shost = idr_find(&host_index_idr, hostnum); > >> + spin_unlock(&host_index_lock); > >> + > >> return shost; > > > > How does this actually grab a reference to the host? > > Good catch -- I should have noticed that. > > I will resubmit the patch. I'll wait to see what you produce, but I don't think, using a separate idr array, you can close the race window between lookup and get. One of the nice things about using the cdev iterator is that the get is part of the lookup process. James