NFS: Implement support for NFS4ERR_LEASE_MOVED
authorChuck Lever <chuck.lever@oracle.com>
Thu, 17 Oct 2013 18:13:41 +0000 (14:13 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 28 Oct 2013 19:30:27 +0000 (15:30 -0400)
Trigger lease-moved recovery when a request returns
NFS4ERR_LEASE_MOVED.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4proc.c

index 01b90bd341bb9567b38287b23e46f4e68c553867..2564e1c89f567e31db339aafdd0a30083cfe584f 100644 (file)
@@ -389,6 +389,9 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc
                        if (ret < 0)
                                break;
                        goto wait_on_recovery;
+               case -NFS4ERR_LEASE_MOVED:
+                       nfs4_schedule_lease_moved_recovery(clp);
+                       goto wait_on_recovery;
 #if defined(CONFIG_NFS_V4_1)
                case -NFS4ERR_BADSESSION:
                case -NFS4ERR_BADSLOT:
@@ -1578,6 +1581,9 @@ static int nfs4_handle_delegation_recall_error(struct nfs_server *server, struct
                case -NFS4ERR_MOVED:
                        nfs4_schedule_migration_recovery(server);
                        return -EAGAIN;
+               case -NFS4ERR_LEASE_MOVED:
+                       nfs4_schedule_lease_moved_recovery(server->nfs_client);
+                       return -EAGAIN;
                case -NFS4ERR_DELEG_REVOKED:
                case -NFS4ERR_ADMIN_REVOKED:
                case -NFS4ERR_BAD_STATEID:
@@ -4758,6 +4764,9 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server,
                        if (nfs4_schedule_migration_recovery(server) < 0)
                                goto recovery_failed;
                        goto wait_on_recovery;
+               case -NFS4ERR_LEASE_MOVED:
+                       nfs4_schedule_lease_moved_recovery(clp);
+                       goto wait_on_recovery;
 #if defined(CONFIG_NFS_V4_1)
                case -NFS4ERR_BADSESSION:
                case -NFS4ERR_BADSLOT: