From: Mi Jinlong <mijinlong@cn.fujitsu.com>
To: "J. Bruce Fields" <bfields@fieldses.org>
Cc: NFS <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH] nfsd41: check the size of response
Date: Thu, 19 May 2011 13:35:25 +0800 [thread overview]
Message-ID: <4DD4AC1D.2070509@cn.fujitsu.com> (raw)
In-Reply-To: <20110519010700.GF26545@fieldses.org>
J. Bruce Fields:
> On Wed, May 18, 2011 at 10:19:23AM +0800, Mi Jinlong wrote:
>> Compare response's size to the session se_fmaxresp_sz and
>> se_fmaxresp_cached at the same function.
>>
>> And modify function name nfsd4_check_drc_limit to
>> nfsd4_check_response_size.
>
> Hm. I guess that's OK. Note we have a bigger problem, though, which is
> that we're waiting too late to check these limits:
>
> http://wiki.linux-nfs.org/wiki/index.php/Server_4.0_and_4.1_issues#DRC_limit_checking
>
> Have you looked at that list, by the way?:
I will have a look, and try to solve this problem.
Maybe it will take me some times.
--
----
thanks
Mi Jinlong
>
> http://wiki.linux-nfs.org/wiki/index.php/Server_4.0_and_4.1_issues#Highest_priority
>
> Those are the 4.1 spec compliance problems that I think are the most
> important to fix--the ones that I think we have to get done before we
> can really declare the 4.1 server correct.
>
> --b.
>
>> Signed-off-by: Mi Jinlong <mijinlong@cn.fujitsu.com>
>> ---
>> fs/nfsd/nfs4xdr.c | 20 ++++++++++++--------
>> 1 files changed, 12 insertions(+), 8 deletions(-)
>>
>> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
>> index c6766af..a7cf985 100644
>> --- a/fs/nfsd/nfs4xdr.c
>> +++ b/fs/nfsd/nfs4xdr.c
>> @@ -3224,12 +3224,12 @@ static nfsd4_enc nfsd4_enc_ops[] = {
>> * pad: add on 8 bytes for the next operation's op_code and status so that
>> * there is room to cache a failure on the next operation.
>> *
>> - * Compare this length to the session se_fmaxresp_cached.
>> + * Compare this length to the session se_fmaxresp_sz and se_fmaxresp_cached.
>> *
>> * Our se_fmaxresp_cached will always be a multiple of PAGE_SIZE, and so
>> * will be at least a page and will therefore hold the xdr_buf head.
>> */
>> -static int nfsd4_check_drc_limit(struct nfsd4_compoundres *resp)
>> +static int nfsd4_check_response_size(struct nfsd4_compoundres *resp)
>> {
>> int status = 0;
>> struct xdr_buf *xb = &resp->rqstp->rq_res;
>> @@ -3242,7 +3242,7 @@ static int nfsd4_check_drc_limit(struct nfsd4_compoundres *resp)
>> return status;
>>
>> session = resp->cstate.session;
>> - if (session == NULL || slot->sl_cachethis == 0)
>> + if (session == NULL)
>> return status;
>>
>> if (resp->opcnt >= args->opcnt)
>> @@ -3259,10 +3259,14 @@ static int nfsd4_check_drc_limit(struct nfsd4_compoundres *resp)
>> dprintk("%s length %u, xb->page_len %u tlen %u pad %u\n", __func__,
>> length, xb->page_len, tlen, pad);
>>
>> - if (length <= session->se_fchannel.maxresp_cached)
>> - return status;
>> - else
>> + if (length > session->se_fchannel.maxresp_sz)
>> + return nfserr_rep_too_big;
>> +
>> + if (slot->sl_cachethis == 1 &&
>> + length > session->se_fchannel.maxresp_cached)
>> return nfserr_rep_too_big_to_cache;
>> +
>> + return status;
>> }
>>
>> void
>> @@ -3282,8 +3286,8 @@ nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op)
>> !nfsd4_enc_ops[op->opnum]);
>> op->status = nfsd4_enc_ops[op->opnum](resp, op->status, &op->u);
>> /* nfsd4_check_drc_limit guarantees enough room for error status */
>> - if (!op->status && nfsd4_check_drc_limit(resp))
>> - op->status = nfserr_rep_too_big_to_cache;
>> + if (!op->status)
>> + op->status = nfsd4_check_response_size(resp);
>> status:
>> /*
>> * Note: We write the status directly, instead of using WRITE32(),
>> --
>> 1.7.4.5
>>
>>
>
>
prev parent reply other threads:[~2011-05-19 5:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-18 2:19 [PATCH] nfsd41: check the size of response Mi Jinlong
2011-05-19 1:07 ` J. Bruce Fields
2011-05-19 5:35 ` Mi Jinlong [this message]
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=4DD4AC1D.2070509@cn.fujitsu.com \
--to=mijinlong@cn.fujitsu.com \
--cc=bfields@fieldses.org \
--cc=linux-nfs@vger.kernel.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.