From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from nautica.notk.org ([91.121.71.147]:41120 "EHLO nautica.notk.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726269AbeGKMpE (ORCPT ); Wed, 11 Jul 2018 08:45:04 -0400 Date: Wed, 11 Jul 2018 14:40:38 +0200 From: Dominique Martinet To: Matthew Wilcox Cc: v9fs-developer@lists.sourceforge.net, Latchesar Ionkov , Eric Van Hensbergen , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Ron Minnich Subject: Re: [V9fs-developer] [PATCH 2/6] 9p: Replace the fidlist with an IDR Message-ID: <20180711124038.GB835@nautica> References: <20180628132629.3148-1-willy@infradead.org> <20180628132629.3148-3-willy@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20180628132629.3148-3-willy@infradead.org> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Matthew Wilcox wrote on Thu, Jun 28, 2018: > diff --git a/net/9p/client.c b/net/9p/client.c > index f8d58b0852fe..bbab82f22c20 100644 > --- a/net/9p/client.c > +++ b/net/9p/client.c > @@ -908,30 +908,27 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt) > { > int ret; > struct p9_fid *fid; > - unsigned long flags; > > p9_debug(P9_DEBUG_FID, "clnt %p\n", clnt); > fid = kmalloc(sizeof(struct p9_fid), GFP_KERNEL); > if (!fid) > return NULL; > > - ret = p9_idpool_get(clnt->fidpool); > - if (ret < 0) > - goto error; > - fid->fid = ret; > - > memset(&fid->qid, 0, sizeof(struct p9_qid)); > fid->mode = -1; > fid->uid = current_fsuid(); > fid->clnt = clnt; > fid->rdir = NULL; > - spin_lock_irqsave(&clnt->lock, flags); > - list_add(&fid->flist, &clnt->fidlist); > - spin_unlock_irqrestore(&clnt->lock, flags); > > - return fid; > + idr_preload(GFP_KERNEL); > + spin_lock_irq(&clnt->lock); > + ret = idr_alloc_u32(&clnt->fids, fid, &fid->fid, UINT_MAX, GFP_NOWAIT); There's also a P9_NOFID that we shouldn't use, so the max here should be P9_NOFID - 1 That aside this introduces a change of behaviour that fid used to be alloc'd linearily from 0 which no longer holds true, that breaks one serveur (nfs-ganesha just returns ERANGE) but others seem to handle this just fine so they'll just need to fix that server. max aside this looks good. -- Dominique Martinet