From patchwork Thu Oct 20 00:57:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: NeilBrown X-Patchwork-Id: 9385681 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E8472607D0 for ; Thu, 20 Oct 2016 00:58:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C23022960E for ; Thu, 20 Oct 2016 00:58:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B53912965D; Thu, 20 Oct 2016 00:58:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_TVD_MIME_EPI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9E2C72960E for ; Thu, 20 Oct 2016 00:58:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756517AbcJTA6F (ORCPT ); Wed, 19 Oct 2016 20:58:05 -0400 Received: from mx2.suse.de ([195.135.220.15]:54303 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756435AbcJTA6F (ORCPT ); Wed, 19 Oct 2016 20:58:05 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 5070EAC31; Thu, 20 Oct 2016 00:58:03 +0000 (UTC) From: NeilBrown To: Trond Myklebust , Anna Schumaker , Jeff Layton Date: Thu, 20 Oct 2016 11:57:55 +1100 Cc: Benjamin Coddington , Linux NFS Mailing List Subject: Re: [PATCH 4/6] NFSv4: change nfs4_select_rw_stateid to take a lock_context inplace of lock_owner In-Reply-To: <147633280750.766.16214787133000729977.stgit@noble> References: <147633263771.766.17853370901003798934.stgit@noble> <147633280750.766.16214787133000729977.stgit@noble> User-Agent: Notmuch/0.22.1 (http://notmuchmail.org) Emacs/24.5.1 (x86_64-suse-linux-gnu) Message-ID: <87zilzx2ek.fsf@notabene.neil.brown.name> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On Thu, Oct 13 2016, NeilBrown wrote: > The only time that a lock_context is not immediately available is in > setattr, and now that it has an open_context, it can easily find one > with nfs_get_lock_context. > This removes the need for the on-stack nfs_lockowner. > > This change is preparation for correctly support flock stateids. > > Signed-off-by: NeilBrown > --- > fs/nfs/nfs4_fs.h | 2 +- > fs/nfs/nfs4proc.c | 15 ++++++--------- > fs/nfs/nfs4state.c | 11 +++++------ > 3 files changed, 12 insertions(+), 16 deletions(-) > > diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h > index 9b3a82abab07..7784b79915e1 100644 > --- a/fs/nfs/nfs4_fs.h > +++ b/fs/nfs/nfs4_fs.h > @@ -457,7 +457,7 @@ extern void nfs41_handle_server_scope(struct nfs_client *, > extern void nfs4_put_lock_state(struct nfs4_lock_state *lsp); > extern int nfs4_set_lock_state(struct nfs4_state *state, struct file_lock *fl); > extern int nfs4_select_rw_stateid(struct nfs4_state *, fmode_t, > - const struct nfs_lockowner *, nfs4_stateid *, > + const struct nfs_lock_context *, nfs4_stateid *, > struct rpc_cred **); > > extern struct nfs_seqid *nfs_alloc_seqid(struct nfs_seqid_counter *counter, gfp_t gfp_mask); > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c > index 950b25413bb4..3c2f11189794 100644 > --- a/fs/nfs/nfs4proc.c > +++ b/fs/nfs/nfs4proc.c > @@ -2926,12 +2926,13 @@ static int _nfs4_do_setattr(struct inode *inode, > if (nfs4_copy_delegation_stateid(inode, fmode, &arg->stateid, &delegation_cred)) { > /* Use that stateid */ > } else if (truncate && ctx != NULL) { > - struct nfs_lockowner lockowner = { > - .l_owner = current->files, > - }; > + struct nfs_lock_context *l_ctx; > if (!nfs4_valid_open_stateid(ctx->state)) > return -EBADF; > - if (nfs4_select_rw_stateid(ctx->state, FMODE_WRITE, &lockowner, > + l_ctx = nfs_get_lock_context(ctx); > + if (IS_ERR(l_ctx)) > + return PTR_ERR(l_ctx); > + if (nfs4_select_rw_stateid(ctx->state, FMODE_WRITE, l_ctx, > &arg->stateid, &delegation_cred) == -EIO) > return -EBADF; Oops... I have an nfs_get_lock_context() here with no matching nfs_put_lock_context(); I've merged: into that patch and pushed out a new git://neil.brown.name/linux tags/nfs-flock-fix (3f5546538d7c678b82d10ce6add29a6d92565f1e) Please let me know if I should re-post the series. Thanks, NeilBrown diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 3c2f11189794..be4e3d9de1eb 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -2932,8 +2932,10 @@ static int _nfs4_do_setattr(struct inode *inode, l_ctx = nfs_get_lock_context(ctx); if (IS_ERR(l_ctx)) return PTR_ERR(l_ctx); - if (nfs4_select_rw_stateid(ctx->state, FMODE_WRITE, l_ctx, - &arg->stateid, &delegation_cred) == -EIO) + status = nfs4_select_rw_stateid(ctx->state, FMODE_WRITE, l_ctx, + &arg->stateid, &delegation_cred); + nfs_put_lock_context(l_ctx); + if (status == -EIO) return -EBADF; } else nfs4_stateid_copy(&arg->stateid, &zero_stateid);