From patchwork Tue Nov 30 20:31:08 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andy Adamson X-Patchwork-Id: 369011 X-Patchwork-Delegate: Trond.Myklebust@netapp.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id oAUMTd9g024662 for ; Tue, 30 Nov 2010 22:29:40 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754935Ab0K3W3H (ORCPT ); Tue, 30 Nov 2010 17:29:07 -0500 Received: from mx2.netapp.com ([216.240.18.37]:26569 "EHLO mx2.netapp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754223Ab0K3W3G (ORCPT ); Tue, 30 Nov 2010 17:29:06 -0500 X-IronPort-AV: E=Sophos;i="4.59,282,1288594800"; d="scan'208";a="489187661" Received: from smtp1.corp.netapp.com ([10.57.156.124]) by mx2-out.netapp.com with ESMTP; 30 Nov 2010 14:29:06 -0800 Received: from localhost.localdomain (verdan01-lxp.hq.netapp.com [10.58.48.142] (may be forged)) by smtp1.corp.netapp.com (8.13.1/8.13.1/NTAP-1.6) with ESMTP id oAUMT3Zm011288; Tue, 30 Nov 2010 14:29:05 -0800 (PST) From: andros@netapp.com To: trond.myklebust@netapp.com Cc: linux-nfs@vger.kernel.org, Andy Adamson Subject: [PATCH 2/5] NFS implement v4.0 callback_ident Date: Tue, 30 Nov 2010 15:31:08 -0500 Message-Id: <1291149071-2026-3-git-send-email-andros@netapp.com> X-Mailer: git-send-email 1.6.6 In-Reply-To: <1291149071-2026-2-git-send-email-andros@netapp.com> References: <1291149071-2026-1-git-send-email-andros@netapp.com> <1291149071-2026-2-git-send-email-andros@netapp.com> Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Tue, 30 Nov 2010 22:29:41 +0000 (UTC) diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 6a653ff..a241957 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -3461,6 +3461,8 @@ do_state_recovery: return -EAGAIN; } +static u32 current_cb_ident = 1; + int nfs4_proc_setclientid(struct nfs_client *clp, u32 program, unsigned short port, struct rpc_cred *cred, struct nfs4_setclientid_res *res) @@ -3469,6 +3471,7 @@ int nfs4_proc_setclientid(struct nfs_client *clp, u32 program, struct nfs4_setclientid setclientid = { .sc_verifier = &sc_verifier, .sc_prog = program, + .sc_cb_ident = current_cb_ident++, }; struct rpc_message msg = { .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_SETCLIENTID], @@ -3513,6 +3516,8 @@ int nfs4_proc_setclientid(struct nfs_client *clp, u32 program, if (++clp->cl_id_uniquifier == 0) break; } + if (status == NFS_OK) + res->cb_ident = setclientid.sc_cb_ident; return status; } diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index f575a31..fe61422 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -79,6 +79,7 @@ int nfs4_init_clientid(struct nfs_client *clp, struct rpc_cred *cred) if (status != 0) goto out; clp->cl_clientid = clid.clientid; + clp->cl_cb_ident = clid.cb_ident; nfs4_schedule_state_renewal(clp); out: return status; diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 452d964..1eaa054 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h @@ -71,6 +71,7 @@ struct nfs_client { */ char cl_ipaddr[48]; unsigned char cl_id_uniquifier; + u32 cl_cb_ident; /* v4.0 callback identifier */ const struct nfs4_minor_version_ops *cl_mvops; #endif /* CONFIG_NFS_V4 */ diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index 80f0719..24e77a6 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h @@ -868,6 +868,7 @@ struct nfs4_setclientid { struct nfs4_setclientid_res { u64 clientid; nfs4_verifier confirm; + u32 cb_ident; }; struct nfs4_statfs_arg {