]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - fs/nfs/nfs4proc.c
NFSv4: Recover locks too when returning a delegation
[net-next-2.6.git] / fs / nfs / nfs4proc.c
index 54ff465cf7cf3ceaadd39e7fc672c5e0cd7f407d..e6a9322a321f4eb4801b7172c92bf4ec8c140292 100644 (file)
@@ -3124,6 +3124,24 @@ nfs4_proc_lock(struct file *filp, int cmd, struct file_lock *request)
        return status;
 }
 
+int nfs4_lock_delegation_recall(struct nfs4_state *state, struct file_lock *fl)
+{
+       struct nfs_server *server = NFS_SERVER(state->inode);
+       struct nfs4_exception exception = { };
+       int err;
+
+       err = nfs4_set_lock_state(state, fl);
+       if (err != 0)
+               goto out;
+       do {
+               err = _nfs4_do_setlk(state, F_SETLK, fl, 0);
+               if (err != -NFS4ERR_DELAY)
+                       break;
+               err = nfs4_handle_exception(server, err, &exception);
+       } while (exception.retry);
+out:
+       return err;
+}
 
 #define XATTR_NAME_NFSV4_ACL "system.nfs4_acl"