diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-12-23 15:21:41 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-12-23 15:21:41 -0500 |
commit | b79a4a1b45b2543e38026303a1956bdc0aababa0 (patch) | |
tree | 73c7dba187dbe05f5527f47ccb42523f4655f77b /fs/nfs/nfs4_fs.h | |
parent | 6dc9d57af9917f5c7faa13c17b770dce17c3972b (diff) |
NFSv4: Fix state recovery when the client runs over the grace period
If the client for some reason is not able to recover all its state within
the time allotted for the grace period, and the server reboots again, the
client is not allowed to recover the state that was 'lost' using reboot
recovery.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4_fs.h')
-rw-r--r-- | fs/nfs/nfs4_fs.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 0ac6bbb8eaa4..1c6fbd1cda97 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h | |||
@@ -40,6 +40,9 @@ struct idmap; | |||
40 | enum nfs4_client_state { | 40 | enum nfs4_client_state { |
41 | NFS4CLNT_STATE_RECOVER = 0, | 41 | NFS4CLNT_STATE_RECOVER = 0, |
42 | NFS4CLNT_LEASE_EXPIRED, | 42 | NFS4CLNT_LEASE_EXPIRED, |
43 | NFS4CLNT_RECLAIM_REBOOT, | ||
44 | NFS4CLNT_RECLAIM_NOGRACE, | ||
45 | NFS4CLNT_CB_PATH_DOWN, | ||
43 | }; | 46 | }; |
44 | 47 | ||
45 | /* | 48 | /* |
@@ -128,6 +131,8 @@ enum { | |||
128 | NFS_O_RDONLY_STATE, /* OPEN stateid has read-only state */ | 131 | NFS_O_RDONLY_STATE, /* OPEN stateid has read-only state */ |
129 | NFS_O_WRONLY_STATE, /* OPEN stateid has write-only state */ | 132 | NFS_O_WRONLY_STATE, /* OPEN stateid has write-only state */ |
130 | NFS_O_RDWR_STATE, /* OPEN stateid has read/write state */ | 133 | NFS_O_RDWR_STATE, /* OPEN stateid has read/write state */ |
134 | NFS_STATE_RECLAIM_REBOOT, /* OPEN stateid server rebooted */ | ||
135 | NFS_STATE_RECLAIM_NOGRACE, /* OPEN stateid needs to recover state */ | ||
131 | }; | 136 | }; |
132 | 137 | ||
133 | struct nfs4_state { | 138 | struct nfs4_state { |
@@ -160,6 +165,7 @@ struct nfs4_exception { | |||
160 | }; | 165 | }; |
161 | 166 | ||
162 | struct nfs4_state_recovery_ops { | 167 | struct nfs4_state_recovery_ops { |
168 | int state_flag_bit; | ||
163 | int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *); | 169 | int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *); |
164 | int (*recover_lock)(struct nfs4_state *, struct file_lock *); | 170 | int (*recover_lock)(struct nfs4_state *, struct file_lock *); |
165 | }; | 171 | }; |
@@ -187,7 +193,7 @@ extern int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name, | |||
187 | struct nfs4_fs_locations *fs_locations, struct page *page); | 193 | struct nfs4_fs_locations *fs_locations, struct page *page); |
188 | 194 | ||
189 | extern struct nfs4_state_recovery_ops nfs4_reboot_recovery_ops; | 195 | extern struct nfs4_state_recovery_ops nfs4_reboot_recovery_ops; |
190 | extern struct nfs4_state_recovery_ops nfs4_network_partition_recovery_ops; | 196 | extern struct nfs4_state_recovery_ops nfs4_nograce_recovery_ops; |
191 | 197 | ||
192 | extern const u32 nfs4_fattr_bitmap[2]; | 198 | extern const u32 nfs4_fattr_bitmap[2]; |
193 | extern const u32 nfs4_statfs_bitmap[2]; | 199 | extern const u32 nfs4_statfs_bitmap[2]; |