From patchwork Wed Dec 30 13:13:59 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin Coddington X-Patchwork-Id: 7933051 Return-Path: X-Original-To: patchwork-linux-nfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 4F98BBEEE5 for ; Wed, 30 Dec 2015 13:14:44 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 30E5520148 for ; Wed, 30 Dec 2015 13:14:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EB1BC202EC for ; Wed, 30 Dec 2015 13:14:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754749AbbL3NOK (ORCPT ); Wed, 30 Dec 2015 08:14:10 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44236 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754751AbbL3NOI (ORCPT ); Wed, 30 Dec 2015 08:14:08 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (Postfix) with ESMTPS id C69CF694; Wed, 30 Dec 2015 13:14:07 +0000 (UTC) Received: from bcodding-csb.redhat.com (vpn-60-47.rdu2.redhat.com [10.10.60.47]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id tBUDE6Wx013769; Wed, 30 Dec 2015 08:14:06 -0500 Received: by bcodding-csb.redhat.com (Postfix, from userid 24008) id 2BD5CE3B5B; Wed, 30 Dec 2015 08:14:06 -0500 (EST) From: Benjamin Coddington To: Trond Myklebust , Anna Schumaker , Jeff Layton , "J. Bruce Fields" , Christoph Hellwig Cc: linux-nfs@vger.kernel.org Subject: [PATCH v4 03/10] NFS: Pass nfs_open_context instead of file to the lock procs Date: Wed, 30 Dec 2015 08:13:59 -0500 Message-Id: <9492581f59a84b87ae5d68c2cc08542261946acc.1451480826.git.bcodding@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP We only use the file struct pointer to obtain the nfs_open_context (or the inode for v2/v3), so just pass that instead. This allows us to use the lock procedure without a reference to a struct file which may not be available while releasing locks after a file close. Signed-off-by: Benjamin Coddington Reviewed-by: Jeff Layton Reviewed-by: Christoph Hellwig --- fs/nfs/file.c | 9 ++++++--- fs/nfs/nfs3proc.c | 4 ++-- fs/nfs/nfs4proc.c | 4 +--- fs/nfs/proc.c | 4 ++-- include/linux/nfs_xdr.h | 2 +- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 8b16a08..20a0541 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -711,6 +711,7 @@ static int do_getlk(struct file *filp, int cmd, struct file_lock *fl, int is_local) { struct inode *inode = filp->f_mapping->host; + struct nfs_open_context *ctx = nfs_file_open_context(filp); int status = 0; unsigned int saved_type = fl->fl_type; @@ -728,7 +729,7 @@ do_getlk(struct file *filp, int cmd, struct file_lock *fl, int is_local) if (is_local) goto out_noconflict; - status = NFS_PROTO(inode)->lock(filp, cmd, fl); + status = NFS_PROTO(inode)->lock(ctx, cmd, fl); out: return status; out_noconflict: @@ -745,6 +746,7 @@ static int do_unlk(struct file *filp, int cmd, struct file_lock *fl, int is_local) { struct inode *inode = filp->f_mapping->host; + struct nfs_open_context *ctx = nfs_file_open_context(filp); struct nfs_lock_context *l_ctx; int status; @@ -771,7 +773,7 @@ do_unlk(struct file *filp, int cmd, struct file_lock *fl, int is_local) * "-olocal_lock=" */ if (!is_local) - status = NFS_PROTO(inode)->lock(filp, cmd, fl); + status = NFS_PROTO(inode)->lock(ctx, cmd, fl); else status = do_vfs_lock(filp, fl); return status; @@ -786,6 +788,7 @@ static int do_setlk(struct file *filp, int cmd, struct file_lock *fl, int is_local) { struct inode *inode = filp->f_mapping->host; + struct nfs_open_context *ctx = nfs_file_open_context(filp); int status; /* @@ -801,7 +804,7 @@ do_setlk(struct file *filp, int cmd, struct file_lock *fl, int is_local) * "-olocal_lock=" */ if (!is_local) - status = NFS_PROTO(inode)->lock(filp, cmd, fl); + status = NFS_PROTO(inode)->lock(ctx, cmd, fl); else status = do_vfs_lock(filp, fl); if (status < 0) diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c index cb28cce..a10e147 100644 --- a/fs/nfs/nfs3proc.c +++ b/fs/nfs/nfs3proc.c @@ -866,9 +866,9 @@ static void nfs3_proc_commit_setup(struct nfs_commit_data *data, struct rpc_mess } static int -nfs3_proc_lock(struct file *filp, int cmd, struct file_lock *fl) +nfs3_proc_lock(struct nfs_open_context *ctx, int cmd, struct file_lock *fl) { - struct inode *inode = file_inode(filp); + struct inode *inode = d_inode(ctx->dentry); return nlmclnt_proc(NFS_SERVER(inode)->nlm_host, cmd, fl); } diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 05ea1e1..784ba4e 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -6097,15 +6097,13 @@ static int nfs4_proc_setlk(struct nfs4_state *state, int cmd, struct file_lock * } static int -nfs4_proc_lock(struct file *filp, int cmd, struct file_lock *request) +nfs4_proc_lock(struct nfs_open_context *ctx, int cmd, struct file_lock *request) { - struct nfs_open_context *ctx; struct nfs4_state *state; unsigned long timeout = NFS4_LOCK_MINTIMEOUT; int status; /* verify open state */ - ctx = nfs_file_open_context(filp); state = ctx->state; if (IS_GETLK(cmd)) { diff --git a/fs/nfs/proc.c b/fs/nfs/proc.c index b417bbc..185deb9 100644 --- a/fs/nfs/proc.c +++ b/fs/nfs/proc.c @@ -634,9 +634,9 @@ nfs_proc_commit_setup(struct nfs_commit_data *data, struct rpc_message *msg) } static int -nfs_proc_lock(struct file *filp, int cmd, struct file_lock *fl) +nfs_proc_lock(struct nfs_open_context *ctx, int cmd, struct file_lock *fl) { - struct inode *inode = file_inode(filp); + struct inode *inode = d_inode(ctx->dentry); return nlmclnt_proc(NFS_SERVER(inode)->nlm_host, cmd, fl); } diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 11bbae4..58c4682 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h @@ -1555,7 +1555,7 @@ struct nfs_rpc_ops { void (*commit_setup) (struct nfs_commit_data *, struct rpc_message *); void (*commit_rpc_prepare)(struct rpc_task *, struct nfs_commit_data *); int (*commit_done) (struct rpc_task *, struct nfs_commit_data *); - int (*lock)(struct file *, int, struct file_lock *); + int (*lock)(struct nfs_open_context *, int, struct file_lock *); int (*lock_check_bounds)(const struct file_lock *); void (*clear_acl_cache)(struct inode *); void (*close_context)(struct nfs_open_context *ctx, int);