linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "William A. (Andy) Adamson" <androsadamson@gmail.com>
To: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Benny Halevy <bhalevy@panasas.com>,
	linux-nfs@vger.kernel.org, pnfs@linux-nfs.org
Subject: Re: [pnfs] [PATCH v2 25/47] nfsd41: non-page DRC for solo sequence responses
Date: Wed, 1 Apr 2009 09:15:52 -0400	[thread overview]
Message-ID: <89c397150904010615r7278fd75tf507808e192b2cd7@mail.gmail.com> (raw)
In-Reply-To: <20090401041212.GC28096@fieldses.org>

On Wed, Apr 1, 2009 at 12:12 AM, J. Bruce Fields <bfields@fieldses.org> wrote:
> On Sat, Mar 28, 2009 at 11:33:11AM +0300, Benny Halevy wrote:
>> From: Andy Adamson <andros@netapp.com>
>>
>> A session inactivity time compound (lease renewal) or a compound where the
>> sequence operation has sa_cachethis set to FALSE do not require any pages
>> to be held in the v4.1 DRC. This is because struct nfsd4_slot is already
>> caching the session information.
>>
>> Add logic to the nfs41 server to not cache response pages for solo sequence
>> responses.
>>
>> Return nfserr_replay_uncached_rep on the operation following the sequence
>> operation when sa_cachethis is FALSE.
>>
>> Signed-off-by: Andy Adamson <andros@netapp.com>
>> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
>> ---
>>  fs/nfsd/nfs4proc.c         |   34 +++++++++++++++++++++++++++++-
>>  fs/nfsd/nfs4state.c        |   47 ++++++++++++++++++++++++++++++++++++++-----
>>  fs/nfsd/nfs4xdr.c          |    5 ++-
>>  include/linux/nfsd/state.h |    1 +
>>  include/linux/nfsd/xdr4.h  |   15 +++++++++++++-
>>  5 files changed, 91 insertions(+), 11 deletions(-)
>>
>> diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
>> index bdbeb87..a273023 100644
>> --- a/fs/nfsd/nfs4proc.c
>> +++ b/fs/nfsd/nfs4proc.c
>> @@ -828,6 +828,34 @@ static struct nfsd4_operation nfsd4_ops[];
>>  static const char *nfsd4_op_name(unsigned opnum);
>>
>>  /*
>> + * This is a replay of a compound for which no cache entry pages
>> + * were used. Encode the sequence operation, and if cachethis is FALSE
>> + * encode the uncache rep error on the next operation.
>> + */
>> +static __be32
>> +nfsd4_enc_no_page_replay(struct nfsd4_compoundargs *args,
>> +                      struct nfsd4_compoundres *resp)
>> +{
>> +     struct nfsd4_op *op;
>> +
>> +     dprintk("--> %s resp->opcnt %d ce_cachethis %u \n", __func__,
>> +             resp->opcnt, resp->cstate.slot->sl_cache_entry.ce_cachethis);
>> +
>> +     /* Encode the replayed sequence operation */
>> +     BUG_ON(resp->opcnt != 1);
>> +     op = &args->ops[resp->opcnt - 1];
>> +     nfsd4_encode_operation(resp, op);
>> +
>> +     /*return nfserr_retry_uncached_rep in next operation. */
>> +     if (resp->cstate.slot->sl_cache_entry.ce_cachethis == 0) {
>> +             op = &args->ops[resp->opcnt++];
>> +             op->status = nfserr_retry_uncached_rep;
>> +             nfsd4_encode_operation(resp, op);
>
> Encoding both operations here makes me very nervous, but I haven't
> thought it through.

We only encode the sequence operation here, and set the error in the
next operation which gets encoded in the next nfsd4_proc_compound
loop.

>
>> +     }
>> +     return op->status;
>> +}
>> +
>> +/*
>>   * COMPOUND call.
>>   */
>>  static __be32
>> @@ -879,7 +907,6 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
>>               dprintk("nfsv4 compound op #%d/%d: %d (%s)\n",
>>                       resp->opcnt, args->opcnt, op->opnum,
>>                       nfsd4_op_name(op->opnum));
>> -
>>               /*
>>                * The XDR decode routines may have pre-set op->status;
>>                * for example, if there is a miscellaneous XDR error
>> @@ -923,7 +950,10 @@ encode_op:
>>               /* Only from SEQUENCE or CREATE_SESSION */
>>               if (resp->cstate.status == nfserr_replay_cache) {
>>                       dprintk("%s NFS4.1 replay from cache\n", __func__);
>> -                     status = op->status;
>> +                     if (nfsd4_no_page_in_cache(resp))
>
> Why not just call that nfsd4_not_cached()?


OK

>
>> +                             status = nfsd4_enc_no_page_replay(args, resp);
>
> and nfsd4_enc_uncached_replay()?  (The "no_page" this is a technical
> detail of the current caching implementation.)

OK

>
>> +                     else
>> +                             status = op->status;
>>                       goto out;
>>               }
>>               if (op->status == nfserr_replay_me) {
>> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
>> index 61af434..f42cda9 100644
>> --- a/fs/nfsd/nfs4state.c
>> +++ b/fs/nfsd/nfs4state.c
>> @@ -1068,17 +1068,31 @@ nfsd4_set_cache_entry(struct nfsd4_compoundres *resp)
>>       /* Don't cache a failed OP_SEQUENCE. */
>>       if (resp->opcnt == 1 && op->opnum == OP_SEQUENCE && resp->cstate.status)
>>               return;
>> +
>>       nfsd4_release_respages(entry->ce_respages, entry->ce_resused);
>> +     entry->ce_opcnt = resp->opcnt;
>> +     entry->ce_status = resp->cstate.status;
>> +
>> +     /*
>> +      * Don't need a page to cache just the sequence operation - the slot
>> +      * does this for us!
>> +      */
>> +
>> +     if (nfsd4_no_page_in_cache(resp)) {
>> +             entry->ce_resused = 0;
>> +             entry->ce_rpchdrlen = 0;
>> +             dprintk("%s Just cache SEQUENCE. ce_cachethis %d\n", __func__,
>> +                     resp->cstate.slot->sl_cache_entry.ce_cachethis);
>> +             return;
>> +     }
>
> Do we *ever* actually need to cache the initial sequence op?  Should we
> only be storing subsequent ops in the reply cache?

We cache encoded pages, or not. If we did not do this, then we would
be mucking with each and every reply just to cache it. e.g. we would
be doing a copy of all the other subsequent ops out of the page into
some other storage. We also need the rpc header of the reply so that
we have the choice later on to compare the original principal with the
incoming replay principal.

To me it makes a lot more sense to do the least amount of work in the
common no-replay case, which is to simply store the page or two of the
reply.

>
>>       entry->ce_resused = rqstp->rq_resused;
>>       if (entry->ce_resused > NFSD_PAGES_PER_SLOT + 1)
>>               entry->ce_resused = NFSD_PAGES_PER_SLOT + 1;
>>       nfsd4_move_pages(entry->ce_respages, rqstp->rq_respages,
>>                        entry->ce_resused);
>> -     entry->ce_status = resp->cstate.status;
>>       entry->ce_datav.iov_base = resp->cstate.statp;
>>       entry->ce_datav.iov_len = resv->iov_len - ((char *)resp->cstate.statp -
>>                               (char *)page_address(rqstp->rq_respages[0]));
>> -     entry->ce_opcnt = resp->opcnt;
>>       /* Current request rpc header length*/
>>       entry->ce_rpchdrlen = (char *)resp->cstate.statp -
>>                               (char *)page_address(rqstp->rq_respages[0]);
>> @@ -1117,13 +1131,28 @@ nfsd41_copy_replay_data(struct nfsd4_compoundres *resp,
>>   * cached page.  Replace any futher replay pages from the cache.
>>   */
>>  __be32
>> -nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp)
>> +nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
>> +                      struct nfsd4_sequence *seq)
>>  {
>>       struct nfsd4_cache_entry *entry = &resp->cstate.slot->sl_cache_entry;
>>       __be32 status;
>>
>>       dprintk("--> %s entry %p\n", __func__, entry);
>>
>> +     /*
>> +      * If this is just the sequence operation, we did not keep
>> +      * a page in the cache entry because we can just use the
>> +      * slot info stored in struct nfsd4_sequence that was checked
>> +      * against the slot in nfsd4_sequence().
>> +      *
>> +      * This occurs when seq->cachethis is FALSE, or when the client
>> +      * session inactivity timer fires and a solo sequence operation
>> +      * is sent (lease renewal).
>> +      */
>> +     if (seq && nfsd4_no_page_in_cache(resp)) {
>> +             seq->maxslots = resp->cstate.slot->sl_session->se_fnumslots;
>> +             return nfs_ok;
>> +     }
>>
>>       if (!nfsd41_copy_replay_data(resp, entry)) {
>>               /*
>> @@ -1347,7 +1376,7 @@ nfsd4_create_session(struct svc_rqst *rqstp,
>>                       cstate->slot = slot;
>>                       cstate->status = status;
>>                       /* Return the cached reply status */
>> -                     status = nfsd4_replay_cache_entry(resp);
>> +                     status = nfsd4_replay_cache_entry(resp, NULL);
>>                       goto out;
>>               } else if (cr_ses->seqid != conf->cl_slot.sl_seqid + 1) {
>>                       status = nfserr_seq_misordered;
>> @@ -1397,6 +1426,8 @@ nfsd4_create_session(struct svc_rqst *rqstp,
>>
>>       slot->sl_inuse = true;
>>       cstate->slot = slot;
>> +     /* Ensure a page is used for the cache */
>> +     slot->sl_cache_entry.ce_cachethis = 1;
>>  out:
>>       nfs4_unlock_state();
>>       dprintk("%s returns %d\n", __func__, ntohl(status));
>> @@ -1441,8 +1472,8 @@ nfsd4_sequence(struct svc_rqst *rqstp,
>>       if (status == nfserr_replay_cache) {
>>               cstate->slot = slot;
>>               /* Return the cached reply status and set cstate->status
>> -              * for nfsd4_svc_encode_compoundres processing*/
>> -             status = nfsd4_replay_cache_entry(resp);
>> +              * for nfsd4_svc_encode_compoundres processing */
>
> The comment typo-fix doesn't belong in this patch.

OK

>
>> +             status = nfsd4_replay_cache_entry(resp, seq);
>>               cstate->status = nfserr_replay_cache;
>>               goto replay_cache;
>>       }
>> @@ -1452,6 +1483,10 @@ nfsd4_sequence(struct svc_rqst *rqstp,
>>       /* Success! bump slot seqid */
>>       slot->sl_inuse = true;
>>       slot->sl_seqid = seq->seqid;
>> +     slot->sl_cache_entry.ce_cachethis = seq->cachethis;
>> +     /* Always set the cache entry cachethis for solo sequence */
>> +     if (nfsd4_is_solo_sequence(resp))
>> +             slot->sl_cache_entry.ce_cachethis = 1;
>>
>>       cstate->slot = slot;
>>
>> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
>> index 60db854..a8bb04a 100644
>> --- a/fs/nfsd/nfs4xdr.c
>> +++ b/fs/nfsd/nfs4xdr.c
>> @@ -2984,7 +2984,7 @@ nfsd4_encode_destroy_session(struct nfsd4_compoundres *resp, int nfserr,
>>       return nfserr;
>>  }
>>
>> -static __be32
>> +__be32
>>  nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr,
>>                     struct nfsd4_sequence *seq)
>>  {
>> @@ -3204,7 +3204,8 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
>>       BUG_ON(iov->iov_len > PAGE_SIZE);
>>  #ifdef CONFIG_NFSD_V4_1
>>       if (resp->cstate.slot != NULL) {
>> -             if (resp->cstate.status == nfserr_replay_cache) {
>> +             if (resp->cstate.status == nfserr_replay_cache &&
>> +                             !nfsd4_no_page_in_cache(resp)) {
>>                       iov->iov_len = resp->cstate.iovlen;
>>               } else {
>>                       nfsd4_set_cache_entry(resp);
>> diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
>> index 49d89fd..47c7836 100644
>> --- a/include/linux/nfsd/state.h
>> +++ b/include/linux/nfsd/state.h
>> @@ -110,6 +110,7 @@ struct nfsd4_cache_entry {
>>       __be32          ce_status;
>>       struct kvec     ce_datav; /* encoded NFSv4.1 data in rq_res.head[0] */
>>       struct page     *ce_respages[NFSD_PAGES_PER_SLOT + 1];
>> +     int             ce_cachethis;
>>       short           ce_resused;
>>       int             ce_opcnt;
>>       int             ce_rpchdrlen;
>> diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
>> index c7bf0a1..641e5cd 100644
>> --- a/include/linux/nfsd/xdr4.h
>> +++ b/include/linux/nfsd/xdr4.h
>> @@ -482,6 +482,18 @@ struct nfsd4_compoundres {
>>       struct nfsd4_compound_state     cstate;
>>  };
>>
>> +static inline u32 nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
>> +{
>> +     struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
>> +     return args->opcnt == 1 ? 1 : 0;
>
> Drop the redundant "? 1: 0", and make the return int (or boolean, if you
> want).

OK

>
>> +}
>> +
>> +static inline u32 nfsd4_no_page_in_cache(struct nfsd4_compoundres *resp)
>
> Ditto on the return type.

OK

>
>> +{
>> +     return (resp->cstate.slot->sl_cache_entry.ce_cachethis == 0 ||
>> +                     nfsd4_is_solo_sequence(resp));
>
> Drop the extra parentheses.

OK

>
> --b.
>
>> +}
>> +
>>  #define NFS4_SVC_XDRSIZE             sizeof(struct nfsd4_compoundargs)
>>
>>  static inline void
>> @@ -513,7 +525,8 @@ extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
>>               struct nfsd4_setclientid_confirm *setclientid_confirm);
>>  #if defined(CONFIG_NFSD_V4_1)
>>  extern void nfsd4_set_cache_entry(struct nfsd4_compoundres *resp);
>> -extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp);
>> +extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
>> +             struct nfsd4_sequence *seq);
>>  extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
>>               struct nfsd4_compound_state *,
>>  struct nfsd4_exchange_id *);
>> --
>> 1.6.2.1
>>
> _______________________________________________
> pNFS mailing list
> pNFS@linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>

  reply	other threads:[~2009-04-01 13:15 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
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         ` William A. (Andy) Adamson [this message]
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=89c397150904010615r7278fd75tf507808e192b2cd7@mail.gmail.com \
    --to=androsadamson@gmail.com \
    --cc=bfields@fieldses.org \
    --cc=bhalevy@panasas.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).