From: Benny Halevy <bhalevy@panasas.com>
To: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: "J. Bruce Fields" <bfields@fieldses.org>,
linux-nfs@vger.kernel.org, pnfs@linux-nfs.org,
Andy Adamson <andros@netapp.com>
Subject: Re: [PATCH 02/47] sunrpc: add cl_private field to struct rpc_clnt
Date: Sat, 28 Mar 2009 22:26:44 +0300 [thread overview]
Message-ID: <49CE79F4.1060106@panasas.com> (raw)
In-Reply-To: <1238261753.6679.13.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
On Mar. 28, 2009, 20:35 +0300, Trond Myklebust <Trond.Myklebust@netapp.com> wrote:
> On Sat, 2009-03-28 at 20:29 +0300, Benny Halevy wrote:
>> On Mar. 28, 2009, 20:23 +0300, Trond Myklebust <Trond.Myklebust@netapp.com> wrote:
>>> On Sat, 2009-03-28 at 11:20 +0300, Benny Halevy wrote:
>>>> On Mar. 28, 2009, 3:39 +0300, "Myklebust, Trond" <Trond.Myklebust@netapp.com> wrote:
>>>>> On Mar 27, 2009, at 8:06 PM, "J. Bruce Fields" <bfields@fieldses.org>
>>>>> wrote:
>>>>>
>>>>>> On Fri, Mar 27, 2009 at 06:01:48AM +0300, Benny Halevy wrote:
>>>>>>> From: Andy Adamson <andros@netapp.com>
>>>>>>>
>>>>>>> Note: the NFSv4.1 client also uses (and declares) this pointer.
>>>>>> OK. Ack from trond?
>>>>> First, someone would need to remind me why it is necessary, and add
>>>>> that justification to the changelog.
>>>> First time this is used in this patchset is here:
>>>> [PATCH 35/47] nfsd: minorversion support for the back channel
>>>>
>>>> The client uses cl_private to determine the minorversion
>>>> (via a struct nfs_client *) to be set in the compound header,
>>>> and to know when to generate a SEQUENCE op.
>>>> Similarly, the server puts a struct nfs4_callback * in
>>>> there for callback compounds' CB_COMPOUND and CB_SEQUENCE.
>>> Why would the rpc_client need to know and track minor versions? That is
>>> an NFS protocol specific thing.
>> Agreed. the rpc_client doesn't know anything about the minor version.
>> This is why we store it in a void *cl_private.
>>
>>> Besides, the caller should always know what minor version it is using.
>>> It shouldn't need a back-pointer in the rpc_client...
>>>
>> The back pointer is used in the xdr layer like this:
>> struct xdr_stream xdr;
>> + struct nfs_client *clp =
>> + (struct nfs_client *)req->rq_task->tk_client->cl_private;
>> struct compound_hdr hdr = {
>> - .nops = 0,
>> + .minorversion = clp->cl_minorversion,
>> };
>
> Just put that information in the RPC arguments where it _BELONGS_.
>
BTW, we are going back and forth on this...
cl_private was suggested on the review we did on November '08:
http://linux-nfs.org/pipermail/pnfs/2008-November/005435.html
Anyway, the following adds a *session to the nfs4_sequence_args
and res. It increases the memory footprint of all rpc args and res
but I agree it's cleaner.
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
git diff --stat -p 2e00c20
fs/nfs/client.c | 1 -
fs/nfs/nfs4proc.c | 8 ++-
fs/nfs/nfs4xdr.c | 235 ++++++++++++++++---------------------------
include/linux/nfs_xdr.h | 7 ++
include/linux/sunrpc/clnt.h | 1 -
5 files changed, 99 insertions(+), 153 deletions(-)
diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index 6e3ab63..bce02da 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -648,7 +648,6 @@ static int nfs_create_rpc_client(struct nfs_client *clp,
}
clp->cl_rpcclient = clnt;
- clnt->cl_private = clp;
return 0;
}
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 5614cfa..e997882 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -514,11 +514,13 @@ static int nfs41_setup_sequence(struct nfs4_session *session,
spin_unlock(&tbl->slot_tbl_lock);
slot = tbl->slots + slotid;
+ args->sa_session = session;
args->sa_slotid = slotid;
args->sa_cache_this = cache_reply;
dprintk("<-- %s slotid=%d seqid=%d\n", __func__, slotid, slot->seq_nr);
+ res->sr_session = session;
res->sr_slotid = slotid;
res->sr_renewal_time = jiffies;
/*
@@ -4244,6 +4246,7 @@ static int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred)
{
nfs4_verifier verifier;
struct nfs41_exchange_id_args args = {
+ .client = clp,
.flags = clp->cl_exchange_flags,
};
struct nfs41_exchange_id_res res = {
@@ -4659,10 +4662,13 @@ static int _nfs4_proc_create_session(struct nfs_client *clp)
.client = clp,
.cb_program = NFS4_CALLBACK,
};
-
+ struct nfs41_create_session_res res = {
+ .client = clp,
+ };
struct rpc_message msg = {
.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CREATE_SESSION],
.rpc_argp = &args,
+ .rpc_resp = &res,
};
int status;
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 342bb68..ae01d82 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -1641,20 +1641,18 @@ static void encode_destroy_session(struct xdr_stream *xdr,
#endif /* CONFIG_NFS_V4_1 */
static void encode_sequence(struct xdr_stream *xdr,
- const struct nfs_client *clp,
const struct nfs4_sequence_args *args,
struct compound_hdr *hdr)
{
#if defined(CONFIG_NFS_V4_1)
- struct nfs4_session *session;
+ struct nfs4_session *session = args->sa_session;
struct nfs4_slot_table *tp;
struct nfs4_slot *slot;
__be32 *p;
- if (!clp->cl_minorversion)
+ if (!session)
return;
- session = clp->cl_session;
tp = &session->fc_slot_table;
WARN_ON(args->sa_slotid == NFS4_MAX_SLOT_TABLE);
@@ -1690,21 +1688,28 @@ static void encode_sequence(struct xdr_stream *xdr,
* END OF "GENERIC" ENCODE ROUTINES.
*/
+static u32 nfs4_xdr_minorversion(const struct nfs4_sequence_args *args)
+{
+#if defined(CONFIG_NFS_V4_1)
+ if (args->sa_session)
+ return args->sa_session->clp->cl_minorversion;
+#endif /* CONFIG_NFS_V4_1 */
+ return 0;
+}
+
/*
* Encode an ACCESS request
*/
static int nfs4_xdr_enc_access(struct rpc_rqst *req, __be32 *p, const struct nfs4_accessargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_access(&xdr, args->access, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
@@ -1718,15 +1723,13 @@ static int nfs4_xdr_enc_access(struct rpc_rqst *req, __be32 *p, const struct nfs
static int nfs4_xdr_enc_lookup(struct rpc_rqst *req, __be32 *p, const struct nfs4_lookup_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->dir_fh, &hdr);
encode_lookup(&xdr, args->name, &hdr);
encode_getfh(&xdr, &hdr);
@@ -1741,15 +1744,13 @@ static int nfs4_xdr_enc_lookup(struct rpc_rqst *req, __be32 *p, const struct nfs
static int nfs4_xdr_enc_lookup_root(struct rpc_rqst *req, __be32 *p, const struct nfs4_lookup_root_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putrootfh(&xdr, &hdr);
encode_getfh(&xdr, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
@@ -1763,15 +1764,13 @@ static int nfs4_xdr_enc_lookup_root(struct rpc_rqst *req, __be32 *p, const struc
static int nfs4_xdr_enc_remove(struct rpc_rqst *req, __be32 *p, const struct nfs_removeargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_remove(&xdr, &args->name, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
@@ -1785,15 +1784,13 @@ static int nfs4_xdr_enc_remove(struct rpc_rqst *req, __be32 *p, const struct nfs
static int nfs4_xdr_enc_rename(struct rpc_rqst *req, __be32 *p, const struct nfs4_rename_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->old_dir, &hdr);
encode_savefh(&xdr, &hdr);
encode_putfh(&xdr, args->new_dir, &hdr);
@@ -1811,15 +1808,13 @@ static int nfs4_xdr_enc_rename(struct rpc_rqst *req, __be32 *p, const struct nfs
static int nfs4_xdr_enc_link(struct rpc_rqst *req, __be32 *p, const struct nfs4_link_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_savefh(&xdr, &hdr);
encode_putfh(&xdr, args->dir_fh, &hdr);
@@ -1837,15 +1832,13 @@ static int nfs4_xdr_enc_link(struct rpc_rqst *req, __be32 *p, const struct nfs4_
static int nfs4_xdr_enc_create(struct rpc_rqst *req, __be32 *p, const struct nfs4_create_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->dir_fh, &hdr);
encode_savefh(&xdr, &hdr);
encode_create(&xdr, args, &hdr);
@@ -1871,15 +1864,13 @@ static int nfs4_xdr_enc_symlink(struct rpc_rqst *req, __be32 *p, const struct nf
static int nfs4_xdr_enc_getattr(struct rpc_rqst *req, __be32 *p, const struct nfs4_getattr_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
encode_nops(&hdr);
@@ -1892,15 +1883,13 @@ static int nfs4_xdr_enc_getattr(struct rpc_rqst *req, __be32 *p, const struct nf
static int nfs4_xdr_enc_close(struct rpc_rqst *req, __be32 *p, struct nfs_closeargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_close(&xdr, args, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
@@ -1914,15 +1903,13 @@ static int nfs4_xdr_enc_close(struct rpc_rqst *req, __be32 *p, struct nfs_closea
static int nfs4_xdr_enc_open(struct rpc_rqst *req, __be32 *p, struct nfs_openargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_savefh(&xdr, &hdr);
encode_open(&xdr, args, &hdr);
@@ -1958,15 +1945,13 @@ static int nfs4_xdr_enc_open_confirm(struct rpc_rqst *req, __be32 *p, struct nfs
static int nfs4_xdr_enc_open_noattr(struct rpc_rqst *req, __be32 *p, struct nfs_openargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_open(&xdr, args, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
@@ -1980,15 +1965,13 @@ static int nfs4_xdr_enc_open_noattr(struct rpc_rqst *req, __be32 *p, struct nfs_
static int nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req, __be32 *p, struct nfs_closeargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_open_downgrade(&xdr, args, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
@@ -2002,15 +1985,13 @@ static int nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req, __be32 *p, struct n
static int nfs4_xdr_enc_lock(struct rpc_rqst *req, __be32 *p, struct nfs_lock_args *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_lock(&xdr, args, &hdr);
encode_nops(&hdr);
@@ -2023,15 +2004,13 @@ static int nfs4_xdr_enc_lock(struct rpc_rqst *req, __be32 *p, struct nfs_lock_ar
static int nfs4_xdr_enc_lockt(struct rpc_rqst *req, __be32 *p, struct nfs_lockt_args *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_lockt(&xdr, args, &hdr);
encode_nops(&hdr);
@@ -2044,15 +2023,13 @@ static int nfs4_xdr_enc_lockt(struct rpc_rqst *req, __be32 *p, struct nfs_lockt_
static int nfs4_xdr_enc_locku(struct rpc_rqst *req, __be32 *p, struct nfs_locku_args *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_locku(&xdr, args, &hdr);
encode_nops(&hdr);
@@ -2065,15 +2042,13 @@ static int nfs4_xdr_enc_locku(struct rpc_rqst *req, __be32 *p, struct nfs_locku_
static int nfs4_xdr_enc_readlink(struct rpc_rqst *req, __be32 *p, const struct nfs4_readlink *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_readlink(&xdr, args, req, &hdr);
@@ -2089,15 +2064,13 @@ static int nfs4_xdr_enc_readlink(struct rpc_rqst *req, __be32 *p, const struct n
static int nfs4_xdr_enc_readdir(struct rpc_rqst *req, __be32 *p, const struct nfs4_readdir_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_readdir(&xdr, args, req, &hdr);
@@ -2116,15 +2089,13 @@ static int nfs4_xdr_enc_readdir(struct rpc_rqst *req, __be32 *p, const struct nf
static int nfs4_xdr_enc_read(struct rpc_rqst *req, __be32 *p, struct nfs_readargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_read(&xdr, args, &hdr);
@@ -2141,15 +2112,13 @@ static int nfs4_xdr_enc_read(struct rpc_rqst *req, __be32 *p, struct nfs_readarg
static int nfs4_xdr_enc_setattr(struct rpc_rqst *req, __be32 *p, struct nfs_setattrargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_setattr(&xdr, args, args->server, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
@@ -2165,15 +2134,13 @@ nfs4_xdr_enc_getacl(struct rpc_rqst *req, __be32 *p,
struct nfs_getaclargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_getattr_two(&xdr, FATTR4_WORD0_ACL, 0, &hdr);
@@ -2189,15 +2156,13 @@ nfs4_xdr_enc_getacl(struct rpc_rqst *req, __be32 *p,
static int nfs4_xdr_enc_write(struct rpc_rqst *req, __be32 *p, struct nfs_writeargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_write(&xdr, args, &hdr);
req->rq_snd_buf.flags |= XDRBUF_WRITE;
@@ -2212,15 +2177,13 @@ static int nfs4_xdr_enc_write(struct rpc_rqst *req, __be32 *p, struct nfs_writea
static int nfs4_xdr_enc_commit(struct rpc_rqst *req, __be32 *p, struct nfs_writeargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_commit(&xdr, args, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
@@ -2234,15 +2197,13 @@ static int nfs4_xdr_enc_commit(struct rpc_rqst *req, __be32 *p, struct nfs_write
static int nfs4_xdr_enc_fsinfo(struct rpc_rqst *req, __be32 *p, struct nfs4_fsinfo_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_fsinfo(&xdr, args->bitmask, &hdr);
encode_nops(&hdr);
@@ -2255,15 +2216,13 @@ static int nfs4_xdr_enc_fsinfo(struct rpc_rqst *req, __be32 *p, struct nfs4_fsin
static int nfs4_xdr_enc_pathconf(struct rpc_rqst *req, __be32 *p, const struct nfs4_pathconf_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_getattr_one(&xdr, args->bitmask[0] & nfs4_pathconf_bitmap[0],
&hdr);
@@ -2277,15 +2236,13 @@ static int nfs4_xdr_enc_pathconf(struct rpc_rqst *req, __be32 *p, const struct n
static int nfs4_xdr_enc_statfs(struct rpc_rqst *req, __be32 *p, const struct nfs4_statfs_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
encode_getattr_two(&xdr, args->bitmask[0] & nfs4_statfs_bitmap[0],
args->bitmask[1] & nfs4_statfs_bitmap[1], &hdr);
@@ -2300,15 +2257,13 @@ static int nfs4_xdr_enc_server_caps(struct rpc_rqst *req, __be32 *p,
struct nfs4_server_caps_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fhandle, &hdr);
encode_getattr_one(&xdr, FATTR4_WORD0_SUPPORTED_ATTRS|
FATTR4_WORD0_LINK_SUPPORT|
@@ -2378,15 +2333,13 @@ static int nfs4_xdr_enc_setclientid_confirm(struct rpc_rqst *req, __be32 *p, str
static int nfs4_xdr_enc_delegreturn(struct rpc_rqst *req, __be32 *p, const struct nfs4_delegreturnargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fhandle, &hdr);
encode_delegreturn(&xdr, args->stateid, &hdr);
encode_getfattr(&xdr, args->bitmask, &hdr);
@@ -2400,15 +2353,13 @@ static int nfs4_xdr_enc_delegreturn(struct rpc_rqst *req, __be32 *p, const struc
static int nfs4_xdr_enc_fs_locations(struct rpc_rqst *req, __be32 *p, struct nfs4_fs_locations_arg *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->dir_fh, &hdr);
encode_lookup(&xdr, args->name, &hdr);
encode_fs_locations(&xdr, args->bitmask, &hdr);
@@ -2424,13 +2375,11 @@ static int nfs4_xdr_enc_fs_locations(struct rpc_rqst *req, __be32 *p, struct nfs
* EXCHANGE_ID request
*/
static int nfs4_xdr_enc_exchange_id(struct rpc_rqst *req, uint32_t *p,
- void *args)
+ struct nfs41_exchange_id_args *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = args->client->cl_minorversion,
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
@@ -2447,10 +2396,8 @@ static int nfs4_xdr_enc_create_session(struct rpc_rqst *req, uint32_t *p,
struct nfs41_create_session_args *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = args->client->cl_minorversion,
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
@@ -2467,10 +2414,8 @@ static int nfs4_xdr_enc_destroy_session(struct rpc_rqst *req, uint32_t *p,
struct nfs4_session *session)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = session->clp->cl_minorversion,
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
@@ -2487,15 +2432,13 @@ static int nfs4_xdr_enc_sequence(struct rpc_rqst *req, uint32_t *p,
struct nfs4_sequence_args *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(args),
};
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, args, &hdr);
+ encode_sequence(&xdr, args, &hdr);
encode_nops(&hdr);
return 0;
}
@@ -2507,16 +2450,14 @@ static int nfs4_xdr_enc_get_lease_time(struct rpc_rqst *req, uint32_t *p,
struct nfs4_get_lease_time_args *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->la_seq_args),
};
const u32 lease_bitmap[2] = { FATTR4_WORD0_LEASE_TIME, 0 };
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->la_seq_args, &hdr);
+ encode_sequence(&xdr, &args->la_seq_args, &hdr);
encode_putrootfh(&xdr, &hdr);
encode_fsinfo(&xdr, lease_bitmap, &hdr);
encode_nops(&hdr);
@@ -4198,13 +4139,13 @@ static int decode_exchange_id(struct xdr_stream *xdr,
return 0;
}
-static int decode_create_session(struct xdr_stream *xdr, struct rpc_rqst *rqstp)
+static int decode_create_session(struct xdr_stream *xdr,
+ struct nfs41_create_session_res *res)
{
uint32_t *p;
int status;
u32 nr_attrs;
- struct nfs_client *clp =
- (struct nfs_client *)rqstp->rq_task->tk_client->cl_private;
+ struct nfs_client *clp = res->client;
struct nfs4_session *session = clp->cl_session;
status = decode_op_hdr(xdr, OP_CREATE_SESSION);
@@ -4266,16 +4207,13 @@ static int decode_sequence(struct xdr_stream *xdr,
struct rpc_rqst *rqstp)
{
#if defined(CONFIG_NFS_V4_1)
- struct nfs4_slot_table *tp;
struct nfs4_slot *slot;
- struct nfs_client *clp =
- (struct nfs_client *)rqstp->rq_task->tk_client->cl_private;
struct nfs4_sessionid id;
u32 dummy;
int status;
__be32 *p;
- if (clp->cl_minorversion == 0)
+ if (!res->sr_session)
return 0;
status = decode_op_hdr(xdr, OP_SEQUENCE);
@@ -4288,11 +4226,10 @@ static int decode_sequence(struct xdr_stream *xdr,
*/
status = -ESERVERFAULT;
- tp = &clp->cl_session->fc_slot_table;
- slot = tp->slots + res->sr_slotid;
+ slot = &res->sr_session->fc_slot_table.slots[res->sr_slotid];
READ_BUF(NFS4_MAX_SESSIONID_LEN + 20);
COPYMEM(id.data, NFS4_MAX_SESSIONID_LEN);
- if (memcmp(id.data, clp->cl_session->sess_id.data,
+ if (memcmp(id.data, res->sr_session->sess_id.data,
NFS4_MAX_SESSIONID_LEN)) {
dprintk("%s Invalid session id\n", __func__);
goto out_err;
@@ -4601,16 +4538,14 @@ static int
nfs4_xdr_enc_setacl(struct rpc_rqst *req, __be32 *p, struct nfs_setaclargs *args)
{
struct xdr_stream xdr;
- struct nfs_client *clp =
- (struct nfs_client *)req->rq_task->tk_client->cl_private;
struct compound_hdr hdr = {
- .minorversion = clp->cl_minorversion,
+ .minorversion = nfs4_xdr_minorversion(&args->seq_args),
};
int status;
xdr_init_encode(&xdr, &req->rq_snd_buf, p);
encode_compound_hdr(&xdr, req, &hdr);
- encode_sequence(&xdr, clp, &args->seq_args, &hdr);
+ encode_sequence(&xdr, &args->seq_args, &hdr);
encode_putfh(&xdr, args->fh, &hdr);
status = encode_setacl(&xdr, args, &hdr);
encode_nops(&hdr);
@@ -5233,7 +5168,7 @@ static int nfs4_xdr_dec_exchange_id(struct rpc_rqst *rqstp, uint32_t *p,
* a CREATE_SESSION request
*/
static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp, uint32_t *p,
- void *res)
+ struct nfs41_create_session_res *res)
{
struct xdr_stream xdr;
struct compound_hdr hdr;
@@ -5242,7 +5177,7 @@ static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp, uint32_t *p,
xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
status = decode_compound_hdr(&xdr, &hdr);
if (!status)
- status = decode_create_session(&xdr, rqstp);
+ status = decode_create_session(&xdr, res);
return status;
}
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index 517291e..4feacc6 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -130,11 +130,13 @@ struct nfs4_slot {
};
struct nfs4_sequence_args {
+ struct nfs4_session *sa_session;
u8 sa_slotid;
u8 sa_cache_this;
};
struct nfs4_sequence_res {
+ struct nfs4_session *sr_session;
u8 sr_slotid; /* slot used to send request */
unsigned long sr_renewal_time;
int sr_status; /* sequence operation status */
@@ -870,6 +872,7 @@ struct nfs_impl_id4 {
#define NFS4_EXCHANGE_ID_LEN (48)
struct nfs41_exchange_id_args {
+ struct nfs_client *client;
nfs4_verifier *verifier;
unsigned int id_len;
char id[NFS4_EXCHANGE_ID_LEN];
@@ -902,6 +905,10 @@ struct nfs41_create_session_args {
struct nfs4_channel_attrs fc_attrs; /* Fore Channel */
struct nfs4_channel_attrs bc_attrs; /* Back Channel */
};
+
+struct nfs41_create_session_res {
+ struct nfs_client *client;
+};
#endif /* CONFIG_NFS_V4_1 */
struct nfs_page;
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h
index 8ca3fef..37881f1 100644
--- a/include/linux/sunrpc/clnt.h
+++ b/include/linux/sunrpc/clnt.h
@@ -53,7 +53,6 @@ struct rpc_clnt {
char cl_pathname[30];/* Path in rpc_pipe_fs */
struct vfsmount * cl_vfsmnt;
struct dentry * cl_dentry; /* inode */
- void *cl_private; /* private data */
struct rpc_clnt * cl_parent; /* Points to parent of clones */
struct rpc_rtt cl_rtt_default;
struct rpc_timeout cl_timeout_default;
next prev parent reply other threads:[~2009-03-28 19:28 UTC|newest]
Thread overview: 204+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-27 2:58 [PATCH 0/47] NFSv4.1 Sessions server code for 2.6.30 Benny Halevy
2009-03-27 3:01 ` [PATCH 01/47] nfsd: don't use the deferral service, return NFS4ERR_DELAY Benny Halevy
2009-03-28 0:04 ` J. Bruce Fields
2009-03-28 7:54 ` Benny Halevy
2009-03-27 3:01 ` [PATCH 02/47] sunrpc: add cl_private field to struct rpc_clnt Benny Halevy
2009-03-28 0:05 ` J. Bruce Fields
2009-03-28 0:39 ` Myklebust, Trond
2009-03-28 8:20 ` Benny Halevy
2009-03-28 17:23 ` Trond Myklebust
[not found] ` <1238261035.6679.4.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-03-28 17:29 ` Benny Halevy
2009-03-28 17:35 ` Trond Myklebust
[not found] ` <1238261753.6679.13.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-03-28 19:26 ` Benny Halevy [this message]
2009-03-28 20:37 ` Trond Myklebust
2009-03-27 3:02 ` [PATCH 03/47] nfsd: embed nfsd4_current_state in nfsd4_compoundres Benny Halevy
2009-03-27 3:05 ` [PATCH 04/47] nfsd: add a struct nfsd4_slot pointer to struct nfsd4_compound_state Benny Halevy
2009-03-27 3:06 ` [PATCH 05/47] nfs41: common protocol definitions Benny Halevy
2009-03-27 3:06 ` [PATCH 06/47] nfsd41: change NFSERR_REPLAY_ME Benny Halevy
2009-03-27 3:06 ` [PATCH 07/47] nfsd41: Add Kconfig symbols for NFSv4.1 Benny Halevy
2009-03-27 3:07 ` [PATCH 08/47] nfsd41: define nfs41 error codes Benny Halevy
2009-03-27 3:07 ` [PATCH 09/47] nfsd41: sessions basic data types Benny Halevy
2009-03-27 3:07 ` [PATCH 10/47] nfsd41: introduce nfs4_client cl_sessions list Benny Halevy
2009-03-27 3:08 ` [PATCH 11/47] nfsd41: release_session when client is expired Benny Halevy
2009-03-27 3:08 ` [PATCH 12/47] nfsd41: sessionid hashing Benny Halevy
2009-03-27 3:08 ` [PATCH 13/47] nfsd41: xdr infrastructure Benny Halevy
2009-03-27 3:09 ` [PATCH 14/47] nfsd: remove nfsd4_ops array size Benny Halevy
2009-03-27 3:11 ` [PATCH 15/47] nfsd41: proc stubs Benny Halevy
2009-03-27 3:15 ` [PATCH 16/47] nfsd41: exchange_id operation Benny Halevy
2009-03-27 3:15 ` [PATCH 17/47] nfsd41: match clientid establishment method Benny Halevy
2009-03-27 3:15 ` [PATCH 18/47] nfsd41: sequence operation Benny Halevy
2009-03-27 3:15 ` [PATCH 19/47] nfsd41: enforce NFS4ERR_SEQUENCE_POS operation order rules Benny Halevy
2009-03-27 3:16 ` [PATCH 20/47] nfsd41: DRC save, restore, and clear functions Benny Halevy
2009-03-27 3:16 ` [PATCH 21/47] nfsd41: hard page limit for DRC Benny Halevy
2009-03-27 3:16 ` [PATCH 22/47] nfsd41: nfsd DRC logic Benny Halevy
2009-03-27 3:16 ` [PATCH 23/47] nfsd41: clear DRC cache on free_session Benny Halevy
2009-03-27 3:16 ` [PATCH 24/47] nfsd41: create_session operation Benny Halevy
2009-03-27 3:16 ` [PATCH 25/47] nfsd41: Add a create session replay cache Benny Halevy
2009-03-27 3:16 ` [PATCH 26/47] nfsd41: non-page DRC for solo sequence responses Benny Halevy
2009-03-27 3:16 ` [PATCH 27/47] nfsd41: destroy_session operation Benny Halevy
2009-03-27 3:17 ` [PATCH 28/47] nfsd41: stateid handling Benny Halevy
2009-03-27 3:17 ` [PATCH 29/47] nfsd41: check encode size for sessions maxresponse cached Benny Halevy
2009-03-27 3:17 ` [PATCH 30/47] nfsd41: clientid handling Benny Halevy
2009-03-27 3:17 ` [PATCH 31/47] nfsd41: access_valid Benny Halevy
2009-03-27 3:18 ` [PATCH 32/47] nfsd41: add OPEN4_SHARE_ACCESS_WANT nfs4_stateid bmap Benny Halevy
2009-03-27 3:18 ` [PATCH 33/47] nfsd41: provide support for minor version 1 at rpc level Benny Halevy
2009-03-27 3:18 ` [PATCH 34/47] nfsd: cleanup nfs4.0 callback encode routines Benny Halevy
2009-03-27 3:18 ` [PATCH 35/47] nfsd: minorversion support for the back channel Benny Halevy
2009-03-27 3:18 ` [PATCH 36/47] nfsd41: sunrpc: Added rpc server-side backchannel handling Benny Halevy
2009-03-27 3:19 ` [PATCH 37/47] nfsd41: callback infrastructure Benny Halevy
2009-03-27 3:19 ` [PATCH 38/47] nfsd41: Remember the auth flavor to use for callbacks Benny Halevy
2009-03-27 3:19 ` [PATCH 39/47] nfsd41: introduce cl_cb_mutex Benny Halevy
2009-03-27 3:19 ` [PATCH 40/47] nfsd41: cb_sequence callback Benny Halevy
2009-03-27 3:20 ` [PATCH 41/47] nfsd41: introduce nfs4_cb_call_sync for nfs4 and nfs41 Benny Halevy
2009-03-27 3:20 ` [PATCH 42/47] nfsd41: cb_recall callback Benny Halevy
2009-03-27 3:20 ` [PATCH 43/47] nfsd41: pass writable attrs mask to nfsd4_decode_fattr Benny Halevy
2009-03-27 3:20 ` [PATCH 44/47] nfsd41: support for 3-word long attribute bitmask Benny Halevy
2009-03-27 3:20 ` [PATCH 45/47] nfsd41: SUPPATTR_EXCLCREAT attribute Benny Halevy
2009-03-27 3:22 ` [PATCH 46/47] nfsd41: CREATE_EXCLUSIVE4_1 Benny Halevy
2009-03-27 3:23 ` [PATCH 47/47] nfsd41: Documentation/filesystems/nfs41-server.txt Benny Halevy
2009-03-28 0:01 ` [PATCH 0/47] NFSv4.1 Sessions server code for 2.6.30 J. Bruce Fields
2009-03-28 8:28 ` Benny Halevy
2009-03-28 8:30 ` [PATCH v2 01/47] nfsd: don't use the deferral service, return NFS4ERR_DELAY Benny Halevy
2009-03-28 8:30 ` [PATCH v2 02/47] nfsd: embed nfsd4_current_state in nfsd4_compoundres Benny Halevy
2009-03-29 20:46 ` J. Bruce Fields
2009-03-28 8:30 ` [PATCH v2 03/47] nfsd: add a struct nfsd4_slot pointer to struct nfsd4_compound_state Benny Halevy
2009-03-29 20:46 ` J. Bruce Fields
2009-03-30 19:59 ` Benny Halevy
2009-03-28 8:31 ` [PATCH v2 04/47] nfs41: common protocol definitions Benny Halevy
2009-03-30 21:54 ` J. Bruce Fields
2009-03-31 7:06 ` Benny Halevy
2009-03-28 8:31 ` [PATCH v2 05/47] nfsd41: change NFSERR_REPLAY_ME Benny Halevy
2009-03-28 8:31 ` [PATCH v2 06/47] nfsd41: Add Kconfig symbols for NFSv4.1 Benny Halevy
2009-04-01 4:33 ` J. Bruce Fields
2009-04-01 8:31 ` Benny Halevy
2009-04-01 13:10 ` J. Bruce Fields
2009-04-01 14:07 ` Benny Halevy
2009-04-01 15:32 ` [pnfs] " Benny Halevy
2009-04-02 9:18 ` Benny Halevy
2009-04-02 13:27 ` J. Bruce Fields
2009-04-02 13:46 ` Benny Halevy
2009-04-02 14:16 ` Trond Myklebust
[not found] ` <1238681800.6191.5.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-04-02 14:22 ` J. Bruce Fields
2009-04-02 14:25 ` Trond Myklebust
[not found] ` <1238682355.6191.6.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-04-02 14:31 ` J. Bruce Fields
2009-04-02 16:34 ` Benny Halevy
2009-04-02 16:54 ` J. Bruce Fields
2009-04-02 17:45 ` Benny Halevy
2009-04-02 17:52 ` Benny Halevy
2009-04-02 17:55 ` J. Bruce Fields
2009-04-02 17:58 ` J. Bruce Fields
2009-04-02 18:41 ` Benny Halevy
2009-04-02 18:46 ` J. Bruce Fields
2009-04-02 19:05 ` Benny Halevy
2009-04-02 22:49 ` J. Bruce Fields
2009-04-03 0:11 ` Benny Halevy
2009-04-03 2:29 ` J. Bruce Fields
2009-03-28 8:31 ` [PATCH v2 07/47] nfsd41: define nfs41 error codes Benny Halevy
2009-03-30 18:16 ` J. Bruce Fields
2009-03-30 19:59 ` Benny Halevy
2009-03-30 20:08 ` J. Bruce Fields
2009-03-28 8:31 ` [PATCH v2 08/47] nfsd41: sessions basic data types Benny Halevy
2009-03-28 8:31 ` [PATCH v2 09/47] nfsd41: introduce nfs4_client cl_sessions list Benny Halevy
2009-03-28 8:31 ` [PATCH v2 10/47] nfsd41: release_session when client is expired Benny Halevy
2009-03-28 8:31 ` [PATCH v2 11/47] nfsd41: sessionid hashing Benny Halevy
2009-03-30 20:08 ` J. Bruce Fields
2009-03-30 20:34 ` Benny Halevy
2009-03-30 20:59 ` J. Bruce Fields
2009-03-31 7:02 ` Benny Halevy
2009-03-28 8:31 ` [PATCH v2 12/47] nfsd41: xdr infrastructure Benny Halevy
2009-03-28 8:32 ` [PATCH v2 13/47] nfsd: remove nfsd4_ops array size Benny Halevy
2009-03-28 8:32 ` [PATCH v2 14/47] nfsd41: proc stubs Benny Halevy
2009-03-28 8:32 ` [PATCH v2 15/47] nfsd41: exchange_id operation Benny Halevy
2009-03-30 22:06 ` J. Bruce Fields
2009-03-31 7:44 ` Benny Halevy
2009-03-31 2:47 ` J. Bruce Fields
[not found] ` <7A6A58246D5F0B4EA127BEA555B3A9AD72ED6C@RTPMVEXC1-PRD.hq.netapp.com>
[not found] ` <7A6A58246D5F0B4EA127BEA555B3A9AD72ED6C-rtwIt2gI0FxT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2009-04-01 15:01 ` [pnfs] " J. Bruce Fields
2009-04-01 15:53 ` Sager, Mike
2009-03-28 8:32 ` [PATCH v2 16/47] nfsd41: match clientid establishment method Benny Halevy
2009-03-30 22:07 ` J. Bruce Fields
2009-03-31 6:59 ` Benny Halevy
2009-03-31 17:59 ` J. Bruce Fields
2009-03-31 18:21 ` Benny Halevy
2009-03-31 3:04 ` J. Bruce Fields
2009-03-31 8:49 ` Benny Halevy
2009-03-31 14:10 ` Andy Adamson
2009-04-02 0:01 ` J. Bruce Fields
2009-04-02 0:14 ` J. Bruce Fields
2009-04-02 7:22 ` Benny Halevy
2009-03-28 8:32 ` [PATCH v2 17/47] nfsd41: sequence operation Benny Halevy
2009-03-31 19:23 ` J. Bruce Fields
2009-03-28 8:32 ` [PATCH v2 18/47] nfsd41: enforce NFS4ERR_SEQUENCE_POS operation order rules Benny Halevy
2009-03-31 3:20 ` J. Bruce Fields
2009-03-31 9:04 ` Benny Halevy
2009-03-28 8:32 ` [PATCH v2 19/47] nfsd41: DRC save, restore, and clear functions Benny Halevy
2009-03-31 23:03 ` J. Bruce Fields
2009-04-01 18:23 ` Andy Adamson
2009-04-02 21:16 ` J. Bruce Fields
2009-04-02 21:29 ` [pnfs] " William A. (Andy) Adamson
[not found] ` <89c397150904021429i6731a9c0ibe064a0828941d16-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-04-02 22:31 ` J. Bruce Fields
2009-03-28 8:32 ` [PATCH v2 20/47] nfsd41: hard page limit for DRC Benny Halevy
2009-03-28 8:32 ` [PATCH v2 21/47] nfsd41: nfsd DRC logic Benny Halevy
2009-03-31 19:30 ` J. Bruce Fields
2009-04-01 19:01 ` [pnfs] " William A. (Andy) Adamson
[not found] ` <89c397150904011201j3cc19794x4a017d4e97bcd8f5-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-04-01 19:10 ` J. Bruce Fields
2009-04-01 20:20 ` William A. (Andy) Adamson
2009-03-28 8:32 ` [PATCH v2 22/47] nfsd41: clear DRC cache on free_session Benny Halevy
2009-03-28 8:32 ` [PATCH v2 23/47] nfsd41: create_session operation Benny Halevy
2009-03-31 23:38 ` J. Bruce Fields
2009-04-01 1:06 ` J. Bruce Fields
2009-03-28 8:33 ` [PATCH v2 24/47] nfsd41: Add a create session replay cache Benny Halevy
2009-04-01 1:27 ` J. Bruce Fields
2009-03-28 8:33 ` [PATCH v2 25/47] nfsd41: non-page DRC for solo sequence responses Benny Halevy
2009-04-01 4:12 ` J. Bruce Fields
2009-04-01 13:15 ` [pnfs] " William A. (Andy) Adamson
2009-03-28 8:33 ` [PATCH v2 26/47] nfsd41: destroy_session operation Benny Halevy
2009-03-28 8:33 ` [PATCH v2 27/47] nfsd41: stateid handling Benny Halevy
2009-04-01 4:21 ` J. Bruce Fields
2009-03-28 8:33 ` [PATCH v2 28/47] nfsd41: check encode size for sessions maxresponse cached Benny Halevy
2009-04-01 21:54 ` J. Bruce Fields
2009-03-28 8:33 ` [PATCH v2 29/47] nfsd41: clientid handling Benny Halevy
2009-03-28 8:33 ` [PATCH v2 30/47] nfsd41: access_valid Benny Halevy
2009-03-28 8:33 ` [PATCH v2 31/47] nfsd41: add OPEN4_SHARE_ACCESS_WANT nfs4_stateid bmap Benny Halevy
2009-03-28 8:33 ` [PATCH v2 32/47] nfsd41: provide support for minor version 1 at rpc level Benny Halevy
2009-03-28 8:34 ` [PATCH v2 33/47] nfsd: cleanup nfs4.0 callback encode routines Benny Halevy
2009-03-28 8:34 ` [PATCH v2 34/47] sunrpc: add cl_private field to struct rpc_clnt Benny Halevy
2009-03-28 8:34 ` [PATCH v2 35/47] nfsd: minorversion support for the back channel Benny Halevy
2009-03-28 8:34 ` [PATCH v2 36/47] nfsd41: sunrpc: Added rpc server-side backchannel handling Benny Halevy
2009-04-01 4:35 ` J. Bruce Fields
2009-03-28 8:34 ` [PATCH v2 37/47] nfsd41: callback infrastructure Benny Halevy
2009-03-28 8:34 ` [PATCH v2 38/47] nfsd41: Remember the auth flavor to use for callbacks Benny Halevy
2009-03-28 8:34 ` [PATCH v2 39/47] nfsd41: introduce cl_cb_mutex Benny Halevy
2009-03-28 8:34 ` [PATCH v2 40/47] nfsd41: cb_sequence callback Benny Halevy
2009-04-01 4:39 ` J. Bruce Fields
2009-04-01 8:43 ` Benny Halevy
2009-04-01 22:49 ` J. Bruce Fields
2009-04-02 8:47 ` Benny Halevy
2009-04-02 18:51 ` J. Bruce Fields
2009-04-02 19:20 ` Benny Halevy
2009-04-02 19:27 ` J. Bruce Fields
2009-04-02 19:34 ` Benny Halevy
2009-04-02 20:54 ` J. Bruce Fields
2009-04-03 1:06 ` Labiaga, Ricardo
[not found] ` <273FE88A07F5D445824060902F70034405026F00-hX7t0kiaRRpT+ZUat5FNkAK/GNPrWCqfQQ4Iyu8u01E@public.gmane.org>
2009-04-03 2:34 ` J. Bruce Fields
2009-04-03 21:15 ` Labiaga, Ricardo
2009-04-02 20:32 ` Labiaga, Ricardo
2009-03-28 8:34 ` [PATCH v2 41/47] nfsd41: introduce nfs4_cb_call_sync for nfs4 and nfs41 Benny Halevy
2009-03-28 8:34 ` [PATCH v2 42/47] nfsd41: cb_recall callback Benny Halevy
2009-03-28 8:35 ` [PATCH v2 43/47] nfsd41: pass writable attrs mask to nfsd4_decode_fattr Benny Halevy
2009-03-28 8:35 ` [PATCH v2 44/47] nfsd41: support for 3-word long attribute bitmask Benny Halevy
2009-03-28 8:35 ` [PATCH v2 45/47] nfsd41: SUPPATTR_EXCLCREAT attribute Benny Halevy
2009-03-28 8:35 ` [PATCH v2 46/47] nfsd41: CREATE_EXCLUSIVE4_1 Benny Halevy
2009-03-28 8:35 ` [PATCH v2 47/47] nfsd41: Documentation/filesystems/nfs41-server.txt Benny Halevy
2009-03-28 16:37 ` [PATCH 0/47] NFSv4.1 Sessions server code for 2.6.30 J. Bruce Fields
2009-03-30 18:33 ` J. Bruce Fields
2009-03-30 18:59 ` J. Bruce Fields
2009-03-30 19:03 ` Benny Halevy
2009-03-30 19:07 ` J. Bruce Fields
2009-03-30 19:38 ` Benny Halevy
2009-03-30 21:15 ` J. Bruce Fields
2009-03-31 7:04 ` Benny Halevy
2009-03-31 1:27 ` Labiaga, Ricardo
2009-03-28 1:17 ` J. Bruce Fields
2009-03-28 18:32 ` Benny Halevy
2009-03-28 18:33 ` [PATCH 1/2] SQUASHME: nfsd41: do not verify nfserr_sequence_pos for minorversion 0 Benny Halevy
2009-03-28 18:33 ` [PATCH 2/2] nfsd: dynamically skip encoded fattr bitmap in _nfsd4_verify Benny Halevy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49CE79F4.1060106@panasas.com \
--to=bhalevy@panasas.com \
--cc=Trond.Myklebust@netapp.com \
--cc=andros@netapp.com \
--cc=bfields@fieldses.org \
--cc=linux-nfs@vger.kernel.org \
--cc=pnfs@linux-nfs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.