From: "J. Bruce Fields" <bfields@fieldses.org>
To: Benny Halevy <benny@tonian.com>
Cc: " J. Bruce Fields" <bfields@redhat.com>,
linux-nfs@vger.kernel.org, Benny Halevy <bhalevy@tonian.com>
Subject: Re: [PATCH 5/7] nfsd4: implement NFS4_SHARE_WANT_NO_DELEG, NFS4_OPEN_DELEGATE_NONE_EXT
Date: Thu, 20 Oct 2011 07:52:24 -0400 [thread overview]
Message-ID: <20111020115224.GH5444@fieldses.org> (raw)
In-Reply-To: <1319076801-13474-1-git-send-email-benny@tonian.com>
On Wed, Oct 19, 2011 at 07:13:21PM -0700, Benny Halevy wrote:
> From: Benny Halevy <bhalevy@tonian.com>
>
> Respect client request for not getting a delegation in NFSv4.1
> Appropriately return delegation "type" NFS4_OPEN_DELEGATE_NONE_EXT
> and WND4_NOT_WANTED reason.
As I read it, if we're going to implement part of this, then we have to
implement all of it. ("If the server supports the new _WANT_ flags and
the client sends one or more of the new flags, then in the event the
server does not return a delegation, it MUST return a delegation type of
OPEN_DELEGATE_NONE_EXT. The field ond_why in the reply indicates why no
delegation was returned and will be one of....")
As long as we don't implement any want flags, we escape that MUST.
So I'd rather put this aside till it's more complete.
--b.
>
> Signed-off-by: Benny Halevy <bhalevy@tonian.com>
> ---
> fs/nfsd/nfs4state.c | 10 ++++++++--
> fs/nfsd/nfs4xdr.c | 3 +++
> include/linux/nfs4.h | 15 ++++++++++++++-
> 3 files changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index ec361bb..5c3377c 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -2931,15 +2931,21 @@ static int nfs4_set_delegation(struct nfs4_delegation *dp, int flag)
> update_stateid(&stp->st_stid.sc_stateid);
> memcpy(&open->op_stateid, &stp->st_stid.sc_stateid, sizeof(stateid_t));
>
> - if (nfsd4_has_session(&resp->cstate))
> + if (nfsd4_has_session(&resp->cstate)) {
> open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED;
>
> + if (open->op_share_access & NFS4_SHARE_WANT_NO_DELEG) {
> + open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT;
> + goto nodeleg;
> + }
> + }
> +
> /*
> * Attempt to hand out a delegation. No error return, because the
> * OPEN succeeds even if we fail.
> */
> nfs4_open_delegation(current_fh, open, stp);
> -
> +nodeleg:
> status = nfs_ok;
>
> dprintk("%s: stateid=" STATEID_FMT "\n", __func__,
> diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
> index 706ada1..1a419c0 100644
> --- a/fs/nfsd/nfs4xdr.c
> +++ b/fs/nfsd/nfs4xdr.c
> @@ -2842,6 +2842,9 @@ static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp,
> WRITE32(0); /* XXX: is NULL principal ok? */
> ADJUST_ARGS();
> break;
> + case NFS4_OPEN_DELEGATE_NONE_EXT: /* 4.1 */
> + WRITE32(WND4_NOT_WANTED); /* only reason for now */
> + break;
> default:
> BUG();
> }
> diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
> index 32345c2..8cdde4d 100644
> --- a/include/linux/nfs4.h
> +++ b/include/linux/nfs4.h
> @@ -441,7 +441,20 @@ enum limit_by4 {
> enum open_delegation_type4 {
> NFS4_OPEN_DELEGATE_NONE = 0,
> NFS4_OPEN_DELEGATE_READ = 1,
> - NFS4_OPEN_DELEGATE_WRITE = 2
> + NFS4_OPEN_DELEGATE_WRITE = 2,
> + NFS4_OPEN_DELEGATE_NONE_EXT = 3, /* 4.1 */
> +};
> +
> +enum why_no_delegation4 { /* new to v4.1 */
> + WND4_NOT_WANTED = 0,
> + WND4_CONTENTION = 1,
> + WND4_RESOURCE = 2,
> + WND4_NOT_SUPP_FTYPE = 3,
> + WND4_WRITE_DELEG_NOT_SUPP_FTYPE = 4,
> + WND4_NOT_SUPP_UPGRADE = 5,
> + WND4_NOT_SUPP_DOWNGRADE = 6,
> + WND4_CANCELLED = 7,
> + WND4_IS_DIR = 8,
> };
>
> enum lock_type4 {
> --
> 1.7.6
>
next prev parent reply other threads:[~2011-10-20 11:52 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-20 2:10 [PATCH 0/7] Bakeathon server fixes Benny Halevy
2011-10-20 2:12 ` [PATCH 1/7] nfsd4: implement new 4.1 open reclaim types Benny Halevy
2011-10-20 12:23 ` J. Bruce Fields
2011-10-20 2:12 ` [PATCH 2/7] nfsd41: use SEQ4_STATUS_BACKCHANNEL_FAULT when cb_sequence is invalid Benny Halevy
2011-10-20 2:13 ` [PATCH 3/7] nfsd4: seq->status_flags may be used unitialized Benny Halevy
2011-10-20 2:13 ` [PATCH 4/7] nfsd4: allow NFS4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL | NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED Benny Halevy
2011-10-20 2:13 ` [PATCH 5/7] nfsd4: implement NFS4_SHARE_WANT_NO_DELEG, NFS4_OPEN_DELEGATE_NONE_EXT Benny Halevy
2011-10-20 11:52 ` J. Bruce Fields [this message]
2011-10-20 12:36 ` Benny Halevy
2011-10-20 12:47 ` J. Bruce Fields
2011-10-20 19:16 ` Benny Halevy
2011-10-20 19:21 ` J. Bruce Fields
2011-10-20 2:13 ` [PATCH 6/7] nfsd4: typo logical vs bitwise negate for want_mask Benny Halevy
2011-10-20 11:53 ` J. Bruce Fields
2011-10-20 2:13 ` [PATCH 7/7] nfsd4: share_access_to_flags should consider only nfs4.x share_access flags Benny Halevy
2011-10-20 11:56 ` J. Bruce Fields
2011-10-20 18:59 ` Benny Halevy
2011-10-20 11:58 ` [PATCH 0/7] Bakeathon server fixes J. Bruce Fields
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=20111020115224.GH5444@fieldses.org \
--to=bfields@fieldses.org \
--cc=benny@tonian.com \
--cc=bfields@redhat.com \
--cc=bhalevy@tonian.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 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).