All of lore.kernel.org
 help / color / mirror / Atom feed
From: Olga Kornievskaia <olga.kornievskaia@gmail.com>
To: bfields@redhat.com
Cc: linux-nfs@vger.kernel.org
Subject: [PATCH v1 10/13] NFSD check stateids against copy stateids
Date: Fri, 19 Oct 2018 11:29:02 -0400	[thread overview]
Message-ID: <20181019152905.32418-11-olga.kornievskaia@gmail.com> (raw)
In-Reply-To: <20181019152905.32418-1-olga.kornievskaia@gmail.com>

From: Olga Kornievskaia <kolga@netapp.com>

Incoming stateid (used by a READ) could be a saved copy stateid.
On first use make it active and check that the copy has started
within the allowable lease time.

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
---
 fs/nfsd/nfs4state.c | 43 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 7764a8b..16359de 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -5206,6 +5206,47 @@ static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid)
 
 	return 0;
 }
+/*
+ * A READ from an inter server to server COPY will have a
+ * copy stateid. Return the parent nfs4_stid.
+ */
+static __be32 _find_cpntf_state(struct nfsd_net *nn, stateid_t *st,
+		     struct nfs4_cpntf_state **cps)
+{
+	struct nfs4_cpntf_state *state = NULL;
+
+	if (st->si_opaque.so_clid.cl_id != nn->s2s_cp_cl_id)
+		return nfserr_bad_stateid;
+	spin_lock(&nn->s2s_cp_lock);
+	state = idr_find(&nn->s2s_cp_stateids, st->si_opaque.so_id);
+	spin_unlock(&nn->s2s_cp_lock);
+	if (!state)
+		return nfserr_bad_stateid;
+	*cps = state;
+	return 0;
+}
+
+static __be32 find_cpntf_state(struct nfsd_net *nn, stateid_t *st,
+			       struct nfs4_stid **stid)
+{
+	__be32 status;
+	struct nfs4_cpntf_state *cps = NULL;
+
+	status = _find_cpntf_state(nn, st, &cps);
+	if (status)
+		return status;
+
+	/* Did the inter server to server copy start in time? */
+	if (cps->cp_active == false && !time_after(cps->cp_timeout, jiffies))
+		return nfserr_partner_no_auth;
+	else
+		cps->cp_active = true;
+
+	*stid = cps->cp_p_stid;
+	refcount_inc(&cps->cp_p_stid->sc_count);
+
+	return nfs_ok;
+}
 
 /*
  * Checks for stateid operations
@@ -5238,6 +5279,8 @@ static __be32 nfsd4_validate_stateid(struct nfs4_client *cl, stateid_t *stateid)
 	status = nfsd4_lookup_stateid(cstate, stateid,
 				NFS4_DELEG_STID|NFS4_OPEN_STID|NFS4_LOCK_STID,
 				&s, nn);
+	if (status == nfserr_bad_stateid)
+		status = find_cpntf_state(nn, stateid, &s);
 	if (status)
 		return status;
 	status = nfsd4_stid_check_stateid_generation(stateid, s,
-- 
1.8.3.1

  parent reply	other threads:[~2018-10-19 23:35 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-19 15:28 [PATCH v1 00/13] server-side support for "inter" SSC copy Olga Kornievskaia
2018-10-19 15:28 ` [PATCH v1 01/13] fs: Don't copy beyond the end of the file Olga Kornievskaia
2018-10-31 16:54   ` J. Bruce Fields
2018-10-31 17:07     ` Olga Kornievskaia
2018-10-31 17:54       ` J. Bruce Fields
2018-10-31 18:01         ` Olga Kornievskaia
2018-10-31 18:29           ` J. Bruce Fields
2018-10-19 15:28 ` [PATCH v1 02/13] VFS permit cross device vfs_copy_file_range Olga Kornievskaia
2018-10-19 15:28 ` [PATCH v1 03/13] NFS NFSD defining nl4_servers structure needed by both Olga Kornievskaia
2018-10-19 15:28 ` [PATCH v1 04/13] NFS inter ssc open Olga Kornievskaia
2018-10-31 18:40   ` J. Bruce Fields
2018-10-31 18:54     ` Olga Kornievskaia
2018-11-01 20:12       ` J. Bruce Fields
2018-11-01 20:30         ` Olga Kornievskaia
2018-10-19 15:28 ` [PATCH v1 05/13] NFS skip recovery of copy open on dest server Olga Kornievskaia
2018-11-01 20:19   ` J. Bruce Fields
2018-11-01 20:38     ` Olga Kornievskaia
2018-11-01 21:24       ` J. Bruce Fields
2018-10-19 15:28 ` [PATCH v1 06/13] NFSD fill-in netloc4 structure Olga Kornievskaia
2018-11-01 20:37   ` J. Bruce Fields
2018-11-01 20:55     ` Olga Kornievskaia
2018-10-19 15:28 ` [PATCH v1 07/13] NFSD add ca_source_server<> to COPY Olga Kornievskaia
2018-11-01 20:48   ` J. Bruce Fields
2018-11-01 21:00     ` Olga Kornievskaia
2018-11-02 13:53       ` J. Bruce Fields
2018-11-02 14:03   ` J. Bruce Fields
2018-11-02 16:36     ` Olga Kornievskaia
2018-11-02 15:46   ` J. Bruce Fields
2018-11-02 16:35     ` Olga Kornievskaia
2018-11-02 16:49       ` J. Bruce Fields
2018-11-02 17:04         ` Olga Kornievskaia
2018-10-19 15:29 ` [PATCH v1 08/13] NFSD return nfs4_stid in nfs4_preprocess_stateid_op Olga Kornievskaia
2018-11-02 19:05   ` J. Bruce Fields
2018-11-02 19:25     ` Olga Kornievskaia
2018-11-02 19:53       ` J. Bruce Fields
2018-10-19 15:29 ` [PATCH v1 09/13] NFSD add COPY_NOTIFY operation Olga Kornievskaia
2018-11-05 17:50   ` J. Bruce Fields
2018-11-08 18:29     ` Olga Kornievskaia
2018-11-08 18:46       ` J. Bruce Fields
2018-10-19 15:29 ` Olga Kornievskaia [this message]
2018-11-05 21:33   ` [PATCH v1 10/13] NFSD check stateids against copy stateids J. Bruce Fields
2018-11-08 18:43     ` Olga Kornievskaia
2018-10-19 15:29 ` [PATCH v1 11/13] NFSD generalize nfsd4_compound_state flag names Olga Kornievskaia
2018-10-19 15:29 ` [PATCH v1 12/13] NFSD: allow inter server COPY to have a STALE source server fh Olga Kornievskaia
2018-11-07 18:57   ` J. Bruce Fields
2018-11-08 18:51     ` Olga Kornievskaia
2018-11-08 19:25       ` J. Bruce Fields
2018-11-08 19:27         ` J. Bruce Fields
2018-11-08 19:31           ` Olga Kornievskaia
2018-11-08 19:32           ` Olga Kornievskaia
2018-10-19 15:29 ` [PATCH v1 13/13] NFSD add nfs4 inter ssc to nfsd4_copy Olga Kornievskaia
2018-11-07 21:48   ` J. Bruce Fields
2018-11-08 19:16     ` Olga Kornievskaia
2018-11-09 16:23       ` J. Bruce Fields
2018-10-25 16:07 ` [PATCH v1 00/13] server-side support for "inter" SSC copy J. Bruce Fields
2018-10-29 17:54   ` Olga Kornievskaia
2018-10-29 20:53     ` 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=20181019152905.32418-11-olga.kornievskaia@gmail.com \
    --to=olga.kornievskaia@gmail.com \
    --cc=bfields@redhat.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.