diff options
author | Benjamin Coddington <bcodding@redhat.com> | 2016-08-30 09:20:32 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2016-08-30 09:26:32 -0400 |
commit | 52442f9b11b7e5d4a38d99143011831fd171f8d9 (patch) | |
tree | e176efeec7f9baa9e9d30429cab9f85ae838f7a1 | |
parent | 3dc147359e3dcdf0648f1e2c11f62cfae3160df0 (diff) | |
download | linux-52442f9b11b7e5d4a38d99143011831fd171f8d9.tar.gz linux-52442f9b11b7e5d4a38d99143011831fd171f8d9.tar.bz2 linux-52442f9b11b7e5d4a38d99143011831fd171f8d9.zip |
NFS4: Avoid migration loops
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@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
-rw-r--r-- | fs/nfs/nfs4client.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c index 8d7d08d4f95f..cd3b7cfdde16 100644 --- a/fs/nfs/nfs4client.c +++ b/fs/nfs/nfs4client.c @@ -817,6 +817,11 @@ static int nfs4_set_client(struct nfs_server *server, goto error; } + if (server->nfs_client == clp) { + error = -ELOOP; + goto error; + } + /* * Query for the lease time on clientid setup or renewal * |