diff options
Diffstat (limited to 'fs/nfs/pnfs.h')
-rw-r--r-- | fs/nfs/pnfs.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h index 8aaab56b794f..f91d0d45551c 100644 --- a/fs/nfs/pnfs.h +++ b/fs/nfs/pnfs.h | |||
@@ -49,6 +49,7 @@ struct pnfs_layout_segment { | |||
49 | enum { | 49 | enum { |
50 | NFS_LAYOUT_RO_FAILED = 0, /* get ro layout failed stop trying */ | 50 | NFS_LAYOUT_RO_FAILED = 0, /* get ro layout failed stop trying */ |
51 | NFS_LAYOUT_RW_FAILED, /* get rw layout failed stop trying */ | 51 | NFS_LAYOUT_RW_FAILED, /* get rw layout failed stop trying */ |
52 | NFS_LAYOUT_BULK_RECALL, /* bulk recall affecting layout */ | ||
52 | NFS_LAYOUT_DESTROYED, /* no new use of layout allowed */ | 53 | NFS_LAYOUT_DESTROYED, /* no new use of layout allowed */ |
53 | }; | 54 | }; |
54 | 55 | ||
@@ -67,9 +68,11 @@ struct pnfs_layoutdriver_type { | |||
67 | struct pnfs_layout_hdr { | 68 | struct pnfs_layout_hdr { |
68 | atomic_t plh_refcount; | 69 | atomic_t plh_refcount; |
69 | struct list_head plh_layouts; /* other client layouts */ | 70 | struct list_head plh_layouts; /* other client layouts */ |
71 | struct list_head plh_bulk_recall; /* clnt list of bulk recalls */ | ||
70 | struct list_head plh_segs; /* layout segments list */ | 72 | struct list_head plh_segs; /* layout segments list */ |
71 | nfs4_stateid plh_stateid; | 73 | nfs4_stateid plh_stateid; |
72 | atomic_t plh_outstanding; /* number of RPCs out */ | 74 | atomic_t plh_outstanding; /* number of RPCs out */ |
75 | u32 plh_barrier; /* ignore lower seqids */ | ||
73 | unsigned long plh_flags; | 76 | unsigned long plh_flags; |
74 | struct inode *plh_inode; | 77 | struct inode *plh_inode; |
75 | }; | 78 | }; |
@@ -139,18 +142,26 @@ extern int nfs4_proc_getdeviceinfo(struct nfs_server *server, | |||
139 | extern int nfs4_proc_layoutget(struct nfs4_layoutget *lgp); | 142 | extern int nfs4_proc_layoutget(struct nfs4_layoutget *lgp); |
140 | 143 | ||
141 | /* pnfs.c */ | 144 | /* pnfs.c */ |
145 | void get_layout_hdr(struct pnfs_layout_hdr *lo); | ||
142 | struct pnfs_layout_segment * | 146 | struct pnfs_layout_segment * |
143 | pnfs_update_layout(struct inode *ino, struct nfs_open_context *ctx, | 147 | pnfs_update_layout(struct inode *ino, struct nfs_open_context *ctx, |
144 | enum pnfs_iomode access_type); | 148 | enum pnfs_iomode access_type); |
145 | void set_pnfs_layoutdriver(struct nfs_server *, u32 id); | 149 | void set_pnfs_layoutdriver(struct nfs_server *, u32 id); |
146 | void unset_pnfs_layoutdriver(struct nfs_server *); | 150 | void unset_pnfs_layoutdriver(struct nfs_server *); |
147 | int pnfs_layout_process(struct nfs4_layoutget *lgp); | 151 | int pnfs_layout_process(struct nfs4_layoutget *lgp); |
152 | void pnfs_free_lseg_list(struct list_head *tmp_list); | ||
148 | void pnfs_destroy_layout(struct nfs_inode *); | 153 | void pnfs_destroy_layout(struct nfs_inode *); |
149 | void pnfs_destroy_all_layouts(struct nfs_client *); | 154 | void pnfs_destroy_all_layouts(struct nfs_client *); |
150 | void put_layout_hdr(struct pnfs_layout_hdr *lo); | 155 | void put_layout_hdr(struct pnfs_layout_hdr *lo); |
156 | void pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo, | ||
157 | const nfs4_stateid *new, | ||
158 | bool update_barrier); | ||
151 | int pnfs_choose_layoutget_stateid(nfs4_stateid *dst, | 159 | int pnfs_choose_layoutget_stateid(nfs4_stateid *dst, |
152 | struct pnfs_layout_hdr *lo, | 160 | struct pnfs_layout_hdr *lo, |
153 | struct nfs4_state *open_state); | 161 | struct nfs4_state *open_state); |
162 | int mark_matching_lsegs_invalid(struct pnfs_layout_hdr *lo, | ||
163 | struct list_head *tmp_list, | ||
164 | u32 iomode); | ||
154 | 165 | ||
155 | 166 | ||
156 | static inline int lo_fail_bit(u32 iomode) | 167 | static inline int lo_fail_bit(u32 iomode) |