From: Benny Halevy <bhalevy@panasas.com>
To: Fred Isaman <iisaman@netapp.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH] SQUASHME: pnfs-submit: encode layoutreturn on close before close
Date: Mon, 15 Nov 2010 17:34:54 +0200 [thread overview]
Message-ID: <4CE1531E.2080908@panasas.com> (raw)
In-Reply-To: <AANLkTimHPTfZL5DntG3LwzyMRp9UdxH89-C1QKv3dmit@mail.gmail.com>
On 2010-11-15 17:02, Fred Isaman wrote:
> On Sun, Nov 14, 2010 at 9:21 AM, Benny Halevy <bhalevy@panasas.com> wrote:
>> And handle errors from layoutcommit and layoutreturn on the reply path.
>>
>> Signed-off-by: Benny Halevy <bhalevy@panasas.com>
>> ---
>> fs/nfs/nfs4xdr.c | 35 ++++++++++++++++++-----------------
>> fs/nfs/pnfs.c | 1 +
>> 2 files changed, 19 insertions(+), 17 deletions(-)
>>
>> diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
>> index 1804f35..0e6e5e4 100644
>> --- a/fs/nfs/nfs4xdr.c
>> +++ b/fs/nfs/nfs4xdr.c
>> @@ -441,17 +441,17 @@ static int nfs4_stat_to_errno(int);
>> #define NFS4_enc_close_sz (compound_encode_hdr_maxsz + \
>> encode_sequence_maxsz + \
>> encode_putfh_maxsz + \
>> - encode_close_maxsz + \
>> - encode_getattr_maxsz + \
>> + encode_layoutcommit_maxsz + \
>> encode_layoutreturn_maxsz + \
>> - encode_layoutcommit_maxsz)
>> + encode_close_maxsz + \
>> + encode_getattr_maxsz)
>> #define NFS4_dec_close_sz (compound_decode_hdr_maxsz + \
>> decode_sequence_maxsz + \
>> decode_putfh_maxsz + \
>> - decode_close_maxsz + \
>> - decode_getattr_maxsz + \
>> + decode_layoutcommit_maxsz + \
>> decode_layoutreturn_maxsz + \
>> - decode_layoutcommit_maxsz)
>> + decode_close_maxsz + \
>> + decode_getattr_maxsz)
>> #define NFS4_enc_setattr_sz (compound_encode_hdr_maxsz + \
>> encode_sequence_maxsz + \
>> encode_putfh_maxsz + \
>> @@ -2160,10 +2160,10 @@ static int nfs4_xdr_enc_close(struct rpc_rqst *req, __be32 *p, struct nfs_closea
>> encode_putfh(&xdr, args->fh, &hdr);
>> if (args->op_bitmask & NFS4_HAS_LAYOUTCOMMIT) /* layoutcommit set */
>> encode_layoutcommit(&xdr, &args->lc_args, &hdr);
>> - encode_close(&xdr, args, &hdr);
>> - encode_getfattr(&xdr, args->bitmask, &hdr);
>> if (args->op_bitmask & NFS4_HAS_LAYOUTRETURN) /* layoutreturn set */
>> encode_layoutreturn(&xdr, &args->lr_args, &hdr);
>> + encode_close(&xdr, args, &hdr);
>> + encode_getfattr(&xdr, args->bitmask, &hdr);
>> encode_nops(&hdr);
>> return 0;
>> }
>> @@ -5743,9 +5743,16 @@ static int nfs4_xdr_dec_close(struct rpc_rqst *rqstp, __be32 *p, struct nfs_clos
>> status = decode_putfh(&xdr);
>> if (status)
>> goto out;
>> - /* We pay no attention to the layoutcommit return */
>> - if (res->op_bitmask & NFS4_HAS_LAYOUTCOMMIT)
>> - decode_layoutcommit(&xdr);
>> + if (res->op_bitmask & NFS4_HAS_LAYOUTCOMMIT) {
>> + status = decode_layoutcommit(&xdr);
>> + if (status)
>> + goto out;
>> + }
>> + if (res->op_bitmask & NFS4_HAS_LAYOUTRETURN) {
>> + status = decode_layoutreturn(&xdr, &res->lr_res);
>> + if (status)
>> + goto out;
>
> What prevents infinite loop here? With LAYOUTCOMMIT, the inode data
> is cleared so that on retry it will not be called. I see no
> comparable "pre-cleaning" done for LAYOUTRETURN.
>
pnfs_roc will find no layout segment to return the second time around.
Benny
> Fred
>
>> + }
>> status = decode_close(&xdr, res);
>> if (status != 0)
>> goto out;
>> @@ -5757,12 +5764,6 @@ static int nfs4_xdr_dec_close(struct rpc_rqst *rqstp, __be32 *p, struct nfs_clos
>> */
>> decode_getfattr(&xdr, res->fattr, res->server,
>> !RPC_IS_ASYNC(rqstp->rq_task));
>> - /*
>> - * With the forgetful model, we pay no attention to the
>> - * layoutreturn status.
>> - */
>> - if (res->op_bitmask & NFS4_HAS_LAYOUTRETURN)
>> - decode_layoutreturn(&xdr, &res->lr_res);
>> out:
>> return status;
>> }
>> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
>> index 15673d0..90a868b 100644
>> --- a/fs/nfs/pnfs.c
>> +++ b/fs/nfs/pnfs.c
>> @@ -640,6 +640,7 @@ pnfs_roc(struct nfs4_closedata *data)
>> LIST_HEAD(tmp_list);
>> bool found = false;
>>
>> + data->arg.op_bitmask = data->res.op_bitmask = 0;
>> spin_lock(&data->inode->i_lock);
>> lo = NFS_I(data->inode)->layout;
>> if (!lo || lo->roc_iomode == 0 ||
>> --
>> 1.7.2.3
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
next prev parent reply other threads:[~2010-11-15 15:34 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-12 8:48 [PATCH 00/22] rewrite of CB_LAYOUTRECALL and layoutstate code, try 2 Fred Isaman
2010-11-12 8:48 ` [PATCH 01/22] pnfs-submit: remove RPC_ASSASSINATED(task) checks Fred Isaman
2010-11-12 8:48 ` [PATCH 02/22] pnfs-submit: remove unnecessary field lgp->status Fred Isaman
2010-11-12 8:48 ` [PATCH 03/22] pnfs-submit: layoutreturn's rpc_call_op functions need to handle bulk returns Fred Isaman
2010-11-12 8:48 ` [PATCH 04/22] pnfs-submit: argument to should_free_lseg changed from lseg to range Fred Isaman
2010-11-12 8:48 ` [PATCH 05/22] pnfs-submit: change layout state seqlock to a spinlock Fred Isaman
2010-11-12 8:48 ` [PATCH 06/22] NFSv4.1: Callback share session between ops Fred Isaman
2010-11-12 8:48 ` [PATCH 07/22] SQUASHME: pnfs-submit: fixups for nfsv4.1 callbacks Fred Isaman
2010-11-12 8:48 ` [PATCH 08/22] SQUASHME: allow cb_sequence changes to compile without v4.1 Fred Isaman
2010-11-14 12:05 ` Benny Halevy
2010-11-15 15:07 ` Fred Isaman
2010-11-12 8:48 ` [PATCH 09/22] pnfs-submit: change pnfs_layout_segment refcounting from kref to atomic_t Fred Isaman
2010-11-12 8:48 ` [PATCH 10/22] pnfs-submit: Have LAYOUTGETS wait when lo->plh_block_lgets is set Fred Isaman
2010-11-12 8:48 ` [PATCH 11/22] pnfs-submit: remove _pnfs_can_return_lseg call from pnfs_clear_lseg_list Fred Isaman
2010-11-12 8:48 ` [PATCH 12/22] pnfs_submit: nfs4_layoutreturn_release should not reference results Fred Isaman
2010-11-12 8:48 ` [PATCH 13/22] pnfs-submit: reorganize struct cb_layoutrecallargs Fred Isaman
2010-11-12 8:48 ` [PATCH 14/22] pnfs-submit: rename lo->state to lo->plh_flags Fred Isaman
2010-11-12 8:48 ` [PATCH 15/22] pnfs-submit: change pnfs_layout_hdr refcount to atomic_t Fred Isaman
2010-11-12 8:48 ` [PATCH 16/22] pnfs-submit: rewrite of layout state handling and cb_layoutrecall Fred Isaman
2010-11-13 9:11 ` Trond Myklebust
2010-11-14 11:44 ` Benny Halevy
2010-11-14 11:50 ` Benny Halevy
2010-11-15 14:28 ` Fred Isaman
2010-11-14 15:43 ` Benny Halevy
2010-11-15 14:51 ` Fred Isaman
2010-11-15 16:17 ` Benny Halevy
2010-11-15 17:53 ` [nfsv4] " Fred Isaman
2010-11-15 19:19 ` Boaz Harrosh
2010-11-15 20:40 ` Fred Isaman
2010-11-16 9:54 ` Boaz Harrosh
2010-11-16 11:12 ` Boaz Harrosh
2010-11-17 17:53 ` Benny Halevy
2010-11-12 8:48 ` [PATCH 17/22] pnfs-submit: increase number of outstanding CB_LAYOUTRECALLS we can handle Fred Isaman
2010-11-12 8:48 ` [PATCH 18/22] pnfs-submit: roc add layoutreturn op to close compound Fred Isaman
2010-11-12 16:31 ` Benny Halevy
2010-11-12 16:56 ` Fred Isaman
2010-11-14 10:54 ` Benny Halevy
2010-11-14 14:21 ` [PATCH] SQUASHME: pnfs-submit: encode layoutreturn on close before close Benny Halevy
2010-11-14 18:12 ` [PATCH 2/2] pnfs-submit: handle NFS4ERR_DELEG_REVOKED for LAYOUTRETURN Benny Halevy
2010-11-15 12:54 ` [PATCH 2/2 v2] " Benny Halevy
2010-11-15 15:02 ` [PATCH] SQUASHME: pnfs-submit: encode layoutreturn on close before close Fred Isaman
2010-11-15 15:34 ` Benny Halevy [this message]
2010-11-12 8:48 ` [PATCH 19/22] pnfs-submit refactor layoutcommit xdr structures Fred Isaman
2010-11-12 8:48 ` [PATCH 20/22] pnfs-submit refactor pnfs_layoutcommit_setup Fred Isaman
2010-11-12 8:48 ` [PATCH 21/22] pnfs_submit: roc add layoutcommit op to close compound Fred Isaman
2010-11-12 8:48 ` [PATCH 22/22] SQUASHME: make roc patches compile without v4.1 Fred Isaman
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=4CE1531E.2080908@panasas.com \
--to=bhalevy@panasas.com \
--cc=iisaman@netapp.com \
--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.