Re: [PATCH] NFS4: Avoid migration loops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 30 Aug 2016, at 8:53, Trond Myklebust wrote:

On Aug 30, 2016, at 07:13, Benjamin Coddington <bcodding@xxxxxxxxxx> wrote:

If a server returns itself as a location while migrating the client may end up getting stuck attempting to migrate twice to the same server. Catch
this by checking if the nfs_client found is the same as the existing
client. For the other two callers to nfs4_set_client, the nfs_client will
always be ERR_PTR(-EINVAL);

Signed-off-by: Benjamin Coddington <bcodding@xxxxxxxxxx>
---
fs/nfs/nfs4client.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
index 8d7d08d4f95f..ec8afc43d849 100644
--- a/fs/nfs/nfs4client.c
+++ b/fs/nfs/nfs4client.c
@@ -817,6 +817,12 @@ static int nfs4_set_client(struct nfs_server *server,
		goto error;
	}

+	/* This client is already set, is there a migration loop? */
+	if (server->nfs_client == clp) {
+		error = -EEXIST;
+		goto error;
+	}
+

Good catch, but why the choice of EEXIST? It sounds as if there is a good
argument for ELOOP, since this situation would literally mirror the
self-referencing symlink case.

I thought EEXIST more indicative of what nfs4_set_client() was noticing in
the local context, but I'll send you a v2 with ELOOP.  That will also be
more informative when the state manager logs the migration failure.

Ben
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux