diff options
-rw-r--r-- | fs/nfs/nfs4proc.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index a8be9af610a..ff378126ccd 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -785,6 +785,16 @@ static struct nfs4_state *nfs4_do_open(struct inode *dir, struct dentry *dentry, | |||
785 | exception.retry = 1; | 785 | exception.retry = 1; |
786 | continue; | 786 | continue; |
787 | } | 787 | } |
788 | /* | ||
789 | * BAD_STATEID on OPEN means that the server cancelled our | ||
790 | * state before it received the OPEN_CONFIRM. | ||
791 | * Recover by retrying the request as per the discussion | ||
792 | * on Page 181 of RFC3530. | ||
793 | */ | ||
794 | if (status == -NFS4ERR_BAD_STATEID) { | ||
795 | exception.retry = 1; | ||
796 | continue; | ||
797 | } | ||
788 | res = ERR_PTR(nfs4_handle_exception(NFS_SERVER(dir), | 798 | res = ERR_PTR(nfs4_handle_exception(NFS_SERVER(dir), |
789 | status, &exception)); | 799 | status, &exception)); |
790 | } while (exception.retry); | 800 | } while (exception.retry); |