diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-03-05 19:56:44 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-04-02 09:27:13 -0700 |
commit | 5353a89765846be06f238a00ce9b38de14f69281 (patch) | |
tree | 2591c934d54f21896d69caffef2e644cf5dcd762 /fs/nfs/nfs4_fs.h | |
parent | 35447aeacbe88ebbb30913b41f8e81f3135c79d9 (diff) | |
download | kernel_samsung_smdk4412-5353a89765846be06f238a00ce9b38de14f69281.zip kernel_samsung_smdk4412-5353a89765846be06f238a00ce9b38de14f69281.tar.gz kernel_samsung_smdk4412-5353a89765846be06f238a00ce9b38de14f69281.tar.bz2 |
NFS: Properly handle the case where the delegation is revoked
commit a1d0b5eebc4fd6e0edb02688b35f17f67f42aea5 upstream.
If we know that the delegation stateid is bad or revoked, we need to
remove that delegation as soon as possible, and then mark all the
stateids that relied on that delegation for recovery. We cannot use
the delegation as part of the recovery process.
Also note that NFSv4.1 uses a different error code (NFS4ERR_DELEG_REVOKED)
to indicate that the delegation was revoked.
Finally, ensure that setlk() and setattr() can both recover safely from
a revoked delegation.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/nfs/nfs4_fs.h')
-rw-r--r-- | fs/nfs/nfs4_fs.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index c4a6983..414ed1d 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h @@ -344,6 +344,8 @@ extern void nfs4_put_open_state(struct nfs4_state *); extern void nfs4_close_state(struct path *, struct nfs4_state *, fmode_t); extern void nfs4_close_sync(struct path *, struct nfs4_state *, fmode_t); extern void nfs4_state_set_mode_locked(struct nfs4_state *, fmode_t); +extern void nfs_inode_find_state_and_recover(struct inode *inode, + const nfs4_stateid *stateid); extern void nfs4_schedule_lease_recovery(struct nfs_client *); extern void nfs4_schedule_state_manager(struct nfs_client *); extern void nfs4_schedule_stateid_recovery(const struct nfs_server *, struct nfs4_state *); |