diff options
author | Peng Tao <tao.peng@primarydata.com> | 2014-09-05 12:53:23 -0400 |
---|---|---|
committer | Tom Haynes <loghyr@primarydata.com> | 2015-02-03 14:06:41 -0500 |
commit | 016256df3a7e9eeb3f4dea5ccd0e21a0b63841eb (patch) | |
tree | 98a9c9596f3febafdbaeff99e6912f8b295dd897 /fs/nfs/pnfs.h | |
parent | f40eb5d044e2eea3f866eeeeb45ca30753773cda (diff) |
nfs41: add a helper to mark layout for return
It marks all matching layout segments as NFS_LSEG_LAYOUTRETURN,
which is an indicator for pnfs_put_lseg() to send layoutreturn,
and also prevents pnfs_update_layout() from using the returning
segments. Once it is set, it never gets cleared.
It also sets proper io failure bit so that pnfs path can be retried
after PNFS_LAYOUTGET_RETRY_TIMEOUT second.
Signed-off-by: Peng Tao <tao.peng@primarydata.com>
Signed-off-by: Tom Haynes <Thomas.Haynes@primarydata.com>
Diffstat (limited to 'fs/nfs/pnfs.h')
-rw-r--r-- | fs/nfs/pnfs.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h index 4cf0d54e14c3..bea2030eec74 100644 --- a/fs/nfs/pnfs.h +++ b/fs/nfs/pnfs.h | |||
@@ -38,6 +38,7 @@ enum { | |||
38 | NFS_LSEG_VALID = 0, /* cleared when lseg is recalled/returned */ | 38 | NFS_LSEG_VALID = 0, /* cleared when lseg is recalled/returned */ |
39 | NFS_LSEG_ROC, /* roc bit received from server */ | 39 | NFS_LSEG_ROC, /* roc bit received from server */ |
40 | NFS_LSEG_LAYOUTCOMMIT, /* layoutcommit bit set for layoutcommit */ | 40 | NFS_LSEG_LAYOUTCOMMIT, /* layoutcommit bit set for layoutcommit */ |
41 | NFS_LSEG_LAYOUTRETURN, /* layoutreturn bit set for layoutreturn */ | ||
41 | }; | 42 | }; |
42 | 43 | ||
43 | /* Individual ip address */ | 44 | /* Individual ip address */ |
@@ -184,6 +185,7 @@ struct pnfs_layout_hdr { | |||
184 | u32 plh_barrier; /* ignore lower seqids */ | 185 | u32 plh_barrier; /* ignore lower seqids */ |
185 | unsigned long plh_retry_timestamp; | 186 | unsigned long plh_retry_timestamp; |
186 | unsigned long plh_flags; | 187 | unsigned long plh_flags; |
188 | enum pnfs_iomode plh_return_iomode; | ||
187 | loff_t plh_lwb; /* last write byte for layoutcommit */ | 189 | loff_t plh_lwb; /* last write byte for layoutcommit */ |
188 | struct rpc_cred *plh_lc_cred; /* layoutcommit cred */ | 190 | struct rpc_cred *plh_lc_cred; /* layoutcommit cred */ |
189 | struct inode *plh_inode; | 191 | struct inode *plh_inode; |
@@ -274,6 +276,8 @@ void nfs4_deviceid_mark_client_invalid(struct nfs_client *clp); | |||
274 | int pnfs_read_done_resend_to_mds(struct nfs_pgio_header *); | 276 | int pnfs_read_done_resend_to_mds(struct nfs_pgio_header *); |
275 | int pnfs_write_done_resend_to_mds(struct nfs_pgio_header *); | 277 | int pnfs_write_done_resend_to_mds(struct nfs_pgio_header *); |
276 | struct nfs4_threshold *pnfs_mdsthreshold_alloc(void); | 278 | struct nfs4_threshold *pnfs_mdsthreshold_alloc(void); |
279 | void pnfs_error_mark_layout_for_return(struct inode *inode, | ||
280 | struct pnfs_layout_segment *lseg); | ||
277 | 281 | ||
278 | /* nfs4_deviceid_flags */ | 282 | /* nfs4_deviceid_flags */ |
279 | enum { | 283 | enum { |