From: Olga Kornievskaia <olga.kornievskaia@gmail.com>
To: trond.myklebust@hammerspace.com, anna.schumaker@netapp.com
Cc: linux-nfs@vger.kernel.org
Subject: [PATCH v10 05/12] NFS: skip recovery of copy open on dest server
Date: Mon, 8 Jul 2019 15:24:37 -0400 [thread overview]
Message-ID: <20190708192444.12664-6-olga.kornievskaia@gmail.com> (raw)
In-Reply-To: <20190708192444.12664-1-olga.kornievskaia@gmail.com>
From: Olga Kornievskaia <kolga@netapp.com>
Mark the open created for the source file on the destination
server. Then if this open is going thru a recovery, then fail
the recovery as we don't need to be recoving a "fake" open.
We need to fail the ongoing READs and vfs_copy_file_range().
Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
---
fs/nfs/nfs4_fs.h | 1 +
fs/nfs/nfs4file.c | 1 +
fs/nfs/nfs4state.c | 14 ++++++++++++++
3 files changed, 16 insertions(+)
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
index ff1cd600f07f..d49fc19361d2 100644
--- a/fs/nfs/nfs4_fs.h
+++ b/fs/nfs/nfs4_fs.h
@@ -168,6 +168,7 @@ enum {
NFS_STATE_CHANGE_WAIT, /* A state changing operation is outstanding */
#ifdef CONFIG_NFS_V4_2
NFS_CLNT_DST_SSC_COPY_STATE, /* dst server open state on client*/
+ NFS_SRV_SSC_COPY_STATE, /* ssc state on the dst server */
#endif /* CONFIG_NFS_V4_2 */
};
diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
index aab4d48764a7..5ef3c12bb54b 100644
--- a/fs/nfs/nfs4file.c
+++ b/fs/nfs/nfs4file.c
@@ -348,6 +348,7 @@ nfs42_ssc_open(struct vfsmount *ss_mnt, struct nfs_fh *src_fh,
if (ctx->state == NULL)
goto out_stateowner;
+ set_bit(NFS_SRV_SSC_COPY_STATE, &ctx->state->flags);
set_bit(NFS_OPEN_STATE, &ctx->state->flags);
memcpy(&ctx->state->open_stateid.other, &stateid->other,
NFS4_STATEID_OTHER_SIZE);
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index e2e3c4f04d3e..045af569835c 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -1607,6 +1607,9 @@ static int nfs4_reclaim_open_state(struct nfs4_state_owner *sp, const struct nfs
{
struct nfs4_state *state;
int status = 0;
+#ifdef CONFIG_NFS_V4_2
+ bool found_ssc_copy_state = false;
+#endif /* CONFIG_NFS_V4_2 */
/* Note: we rely on the sp->so_states list being ordered
* so that we always reclaim open(O_RDWR) and/or open(O_WRITE)
@@ -1626,6 +1629,13 @@ static int nfs4_reclaim_open_state(struct nfs4_state_owner *sp, const struct nfs
continue;
if (state->state == 0)
continue;
+#ifdef CONFIG_NFS_V4_2
+ if (test_bit(NFS_SRV_SSC_COPY_STATE, &state->flags)) {
+ nfs4_state_mark_recovery_failed(state, -EIO);
+ found_ssc_copy_state = true;
+ continue;
+ }
+#endif /* CONFIG_NFS_V4_2 */
refcount_inc(&state->count);
spin_unlock(&sp->so_lock);
status = __nfs4_reclaim_open_state(sp, state, ops);
@@ -1672,6 +1682,10 @@ static int nfs4_reclaim_open_state(struct nfs4_state_owner *sp, const struct nfs
}
raw_write_seqcount_end(&sp->so_reclaim_seqcount);
spin_unlock(&sp->so_lock);
+#ifdef CONFIG_NFS_V4_2
+ if (found_ssc_copy_state)
+ return -EIO;
+#endif /* CONFIG_NFS_V4_2 */
return 0;
out_err:
nfs4_put_open_state(state);
--
2.18.1
next prev parent reply other threads:[~2019-07-08 19:24 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-08 19:24 [PATCH v10 00/12] client-side support for "inter" SSC copy Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 01/12] NFS NFSD: defining nl4_servers structure needed by both Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 02/12] NFS: add COPY_NOTIFY operation Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 03/12] NFS: add ca_source_server<> to COPY Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 04/12] NFS: inter ssc open Olga Kornievskaia
2019-07-09 14:01 ` Schumaker, Anna
2019-07-09 16:01 ` Olga Kornievskaia
2019-07-08 19:24 ` Olga Kornievskaia [this message]
2019-07-08 19:24 ` [PATCH v10 06/12] NFS: for "inter" copy treat ESTALE as ENOTSUPP Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 07/12] NFS: COPY handle ERR_OFFLOAD_DENIED Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 08/12] NFS: also send OFFLOAD_CANCEL to source server Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 09/12] NFS handle NFS4ERR_PARTNER_NO_AUTH error Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 10/12] NFS: handle source server reboot Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 11/12] NFS based on file size issue sync copy or fallback to generic copy offload Olga Kornievskaia
2019-07-08 19:24 ` [PATCH v10 12/12] NFS: replace cross device check in copy_file_range 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=20190708192444.12664-6-olga.kornievskaia@gmail.com \
--to=olga.kornievskaia@gmail.com \
--cc=anna.schumaker@netapp.com \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@hammerspace.com \
/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).