From: Olga Kornievskaia <kolga@netapp.com>
To: <Trond.Myklebust@primarydata.com>, <anna.schumaker@netapp.com>
Cc: <linux-nfs@vger.kernel.org>
Subject: [PATCH v7 06/12] NFS COPY xdr handle async reply
Date: Tue, 20 Feb 2018 11:42:18 -0500 [thread overview]
Message-ID: <20180220164224.65366-7-kolga@netapp.com> (raw)
In-Reply-To: <20180220164224.65366-1-kolga@netapp.com>
If server returns async reply, it must include a callback stateid,
wr_callback_id in the write_response4.
Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
---
fs/nfs/nfs42xdr.c | 22 ++++++++++++----------
include/linux/nfs_xdr.h | 1 +
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c
index 7fda85c..9d70892 100644
--- a/fs/nfs/nfs42xdr.c
+++ b/fs/nfs/nfs42xdr.c
@@ -427,21 +427,23 @@ static int decode_write_response(struct xdr_stream *xdr,
struct nfs42_write_res *res)
{
__be32 *p;
+ int status, count;
- p = xdr_inline_decode(xdr, 4 + 8 + 4);
+ p = xdr_inline_decode(xdr, 4);
if (unlikely(!p))
goto out_overflow;
-
- /*
- * We never use asynchronous mode, so warn if a server returns
- * a stateid.
- */
- if (unlikely(*p != 0)) {
- pr_err_once("%s: server has set unrequested "
- "asynchronous mode\n", __func__);
+ count = be32_to_cpup(p);
+ if (count > 1)
return -EREMOTEIO;
+ else if (count == 1) {
+ status = decode_opaque_fixed(xdr, &res->stateid,
+ NFS4_STATEID_SIZE);
+ if (unlikely(status))
+ goto out_overflow;
}
- p++;
+ p = xdr_inline_decode(xdr, 8 + 4);
+ if (unlikely(!p))
+ goto out_overflow;
p = xdr_decode_hyper(p, &res->count);
res->verifier.committed = be32_to_cpup(p);
return decode_verifier(xdr, &res->verifier.verifier);
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index b5ea289..4735f7d 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1388,6 +1388,7 @@ struct nfs42_copy_args {
};
struct nfs42_write_res {
+ nfs4_stateid stateid;
u64 count;
struct nfs_writeverf verifier;
};
--
1.8.3.1
next prev parent reply other threads:[~2018-02-20 16:42 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-20 16:42 [PATCH v7 00/12] NFS support for async intra COPY Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 01/12] fs: Don't copy beyond the end of the file Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 02/12] NFS CB_OFFLOAD xdr Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 03/12] NFS OFFLOAD_STATUS xdr Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 04/12] NFS OFFLOAD_STATUS op Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 05/12] NFS OFFLOAD_CANCEL xdr Olga Kornievskaia
2018-02-20 16:42 ` Olga Kornievskaia [this message]
2018-02-20 16:42 ` [PATCH v7 07/12] NFS add support for asynchronous COPY Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 08/12] NFS handle COPY reply CB_OFFLOAD call race Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 09/12] NFS export nfs4_async_handle_error Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 10/12] NFS send OFFLOAD_CANCEL when COPY killed Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 11/12] NFS handle COPY ERR_OFFLOAD_NO_REQS Olga Kornievskaia
2018-02-20 16:42 ` [PATCH v7 12/12] NFS add a simple sync nfs4_proc_commit after async COPY Olga Kornievskaia
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=20180220164224.65366-7-kolga@netapp.com \
--to=kolga@netapp.com \
--cc=Trond.Myklebust@primarydata.com \
--cc=anna.schumaker@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 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).