Blame view

fs/nfs/pnfs.h 13 KB
85e174ba6   Ricardo Labiaga   NFS: set layout d...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  /*
   *  pNFS client data structures.
   *
   *  Copyright (c) 2002
   *  The Regents of the University of Michigan
   *  All Rights Reserved
   *
   *  Dean Hildebrand <dhildebz@umich.edu>
   *
   *  Permission is granted to use, copy, create derivative works, and
   *  redistribute this software and such derivative works for any purpose,
   *  so long as the name of the University of Michigan is not used in
   *  any advertising or publicity pertaining to the use or distribution
   *  of this software without specific, written prior authorization. If
   *  the above copyright notice or any other identification of the
   *  University of Michigan is included in any copy of any portion of
   *  this software, then the disclaimer below must also be included.
   *
   *  This software is provided as is, without representation or warranty
   *  of any kind either express or implied, including without limitation
   *  the implied warranties of merchantability, fitness for a particular
   *  purpose, or noninfringement.  The Regents of the University of
   *  Michigan shall not be liable for any damages, including special,
   *  indirect, incidental, or consequential damages, with respect to any
   *  claim arising out of or in connection with the use of the software,
   *  even if it has been or is hereafter advised of the possibility of
   *  such damages.
   */
  
  #ifndef FS_NFS_PNFS_H
  #define FS_NFS_PNFS_H
45df3c8b0   Benny Halevy   pnfs: resolve hea...
32
  #include <linux/nfs_fs.h>
94ad1c80e   Fred Isaman   NFSv4.1: coelesce...
33
  #include <linux/nfs_page.h>
4541d16c0   Fred Isaman   pnfs: change how ...
34
35
  enum {
  	NFS_LSEG_VALID = 0,	/* cleared when lseg is recalled/returned */
f7e8917a6   Fred Isaman   pnfs: layout roc ...
36
  	NFS_LSEG_ROC,		/* roc bit received from server */
a9bae5666   Peng Tao   pnfs: let layoutc...
37
  	NFS_LSEG_LAYOUTCOMMIT,	/* layoutcommit bit set for layoutcommit */
4541d16c0   Fred Isaman   pnfs: change how ...
38
  };
974cec8ca   Andy Adamson   NFS: client needs...
39
  struct pnfs_layout_segment {
566052c53   Fred Isaman   pnfs: add prefix ...
40
  	struct list_head pls_list;
a9bae5666   Peng Tao   pnfs: let layoutc...
41
  	struct list_head pls_lc_list;
566052c53   Fred Isaman   pnfs: add prefix ...
42
  	struct pnfs_layout_range pls_range;
4541d16c0   Fred Isaman   pnfs: change how ...
43
44
  	atomic_t pls_refcount;
  	unsigned long pls_flags;
566052c53   Fred Isaman   pnfs: add prefix ...
45
  	struct pnfs_layout_hdr *pls_layout;
974cec8ca   Andy Adamson   NFS: client needs...
46
  };
64419a9b2   Andy Adamson   NFSv4.1: generic ...
47
48
49
50
  enum pnfs_try_status {
  	PNFS_ATTEMPTED     = 0,
  	PNFS_NOT_ATTEMPTED = 1,
  };
85e174ba6   Ricardo Labiaga   NFS: set layout d...
51
52
53
  #ifdef CONFIG_NFS_V4_1
  
  #define LAYOUT_NFSV4_1_MODULE_PREFIX "nfs-layouttype4"
e5e940170   Benny Halevy   NFS: create and d...
54
55
56
  enum {
  	NFS_LAYOUT_RO_FAILED = 0,	/* get ro layout failed stop trying */
  	NFS_LAYOUT_RW_FAILED,		/* get rw layout failed stop trying */
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
57
  	NFS_LAYOUT_BULK_RECALL,		/* bulk recall affecting layout */
f7e8917a6   Fred Isaman   pnfs: layout roc ...
58
  	NFS_LAYOUT_ROC,			/* some lseg had roc bit set */
4541d16c0   Fred Isaman   pnfs: change how ...
59
  	NFS_LAYOUT_DESTROYED,		/* no new use of layout allowed */
e5e940170   Benny Halevy   NFS: create and d...
60
  };
8a1636c45   Benny Halevy   pnfs: layoutret_o...
61
62
63
64
  enum layoutdriver_policy_flags {
  	/* Should the pNFS client commit and return the layout upon a setattr */
  	PNFS_LAYOUTRET_ON_SETATTR	= 1 << 0,
  };
1775bc342   Benny Halevy   NFSv4.1: purge de...
65
  struct nfs4_deviceid_node;
85e174ba6   Ricardo Labiaga   NFS: set layout d...
66
67
  /* Per-layout driver specific registration structure */
  struct pnfs_layoutdriver_type {
02c35fca7   Fred Isaman   NFSv4.1: pnfs: fu...
68
69
70
71
  	struct list_head pnfs_tblid;
  	const u32 id;
  	const char *name;
  	struct module *owner;
8a1636c45   Benny Halevy   pnfs: layoutret_o...
72
  	unsigned flags;
636fb9c89   Benny Halevy   pnfs: alloc and f...
73

738fd0f36   Benny Halevy   pnfs: add set-cle...
74
75
  	int (*set_layoutdriver) (struct nfs_server *, const struct nfs_fh *);
  	int (*clear_layoutdriver) (struct nfs_server *);
636fb9c89   Benny Halevy   pnfs: alloc and f...
76
77
  	struct pnfs_layout_hdr * (*alloc_layout_hdr) (struct inode *inode, gfp_t gfp_flags);
  	void (*free_layout_hdr) (struct pnfs_layout_hdr *);
a75b9df9d   Trond Myklebust   NFSv4.1: Ensure t...
78
  	struct pnfs_layout_segment * (*alloc_lseg) (struct pnfs_layout_hdr *layoutid, struct nfs4_layoutget_res *lgr, gfp_t gfp_flags);
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
79
  	void (*free_lseg) (struct pnfs_layout_segment *lseg);
94ad1c80e   Fred Isaman   NFSv4.1: coelesce...
80
81
  
  	/* test for nfs page cache coalescing */
1751c3638   Trond Myklebust   NFS: Cleanup of t...
82
83
  	const struct nfs_pageio_ops *pg_read_ops;
  	const struct nfs_pageio_ops *pg_write_ops;
64419a9b2   Andy Adamson   NFSv4.1: generic ...
84

a861a1e1c   Fred Isaman   NFSv4.1: add gene...
85
86
87
88
89
90
  	/* Returns true if layoutdriver wants to divert this request to
  	 * driver's commit routine.
  	 */
  	bool (*mark_pnfs_commit)(struct pnfs_layout_segment *lseg);
  	struct list_head * (*choose_commit_list) (struct nfs_page *req);
  	int (*commit_pagelist)(struct inode *inode, struct list_head *mds_pages, int how);
64419a9b2   Andy Adamson   NFSv4.1: generic ...
91
92
93
94
95
  	/*
  	 * Return PNFS_ATTEMPTED to indicate the layout code has attempted
  	 * I/O, else return PNFS_NOT_ATTEMPTED to fall back to normal NFS
  	 */
  	enum pnfs_try_status (*read_pagelist) (struct nfs_read_data *nfs_data);
0382b7440   Andy Adamson   NFSv4.1: implemen...
96
  	enum pnfs_try_status (*write_pagelist) (struct nfs_write_data *nfs_data, int how);
1775bc342   Benny Halevy   NFSv4.1: purge de...
97
98
  
  	void (*free_deviceid_node) (struct nfs4_deviceid_node *);
04a555498   Andy Adamson   pnfs: encode_layo...
99
100
101
102
  
  	void (*encode_layoutreturn) (struct pnfs_layout_hdr *layoutid,
  				     struct xdr_stream *xdr,
  				     const struct nfs4_layoutreturn_args *args);
ac7db7264   Benny Halevy   pnfs: encode_layo...
103

db29c0890   Andy Adamson   pnfs: cleanup_lay...
104
  	void (*cleanup_layoutcommit) (struct nfs4_layoutcommit_data *data);
ac7db7264   Benny Halevy   pnfs: encode_layo...
105
106
107
  	void (*encode_layoutcommit) (struct pnfs_layout_hdr *layoutid,
  				     struct xdr_stream *xdr,
  				     const struct nfs4_layoutcommit_args *args);
85e174ba6   Ricardo Labiaga   NFS: set layout d...
108
  };
e5e940170   Benny Halevy   NFS: create and d...
109
  struct pnfs_layout_hdr {
cc6e5340b   Fred Isaman   pnfs: change lo r...
110
  	atomic_t		plh_refcount;
b7edfaa19   Fred Isaman   pnfs: add prefix ...
111
  	struct list_head	plh_layouts;   /* other client layouts */
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
112
  	struct list_head	plh_bulk_recall; /* clnt list of bulk recalls */
b7edfaa19   Fred Isaman   pnfs: add prefix ...
113
  	struct list_head	plh_segs;      /* layout segments list */
b7edfaa19   Fred Isaman   pnfs: add prefix ...
114
  	nfs4_stateid		plh_stateid;
cf7d63f1f   Fred Isaman   pnfs: serialize L...
115
  	atomic_t		plh_outstanding; /* number of RPCs out */
f7e8917a6   Fred Isaman   pnfs: layout roc ...
116
  	unsigned long		plh_block_lgets; /* block LAYOUTGET if >0 */
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
117
  	u32			plh_barrier; /* ignore lower seqids */
566052c53   Fred Isaman   pnfs: add prefix ...
118
  	unsigned long		plh_flags;
acff58805   Peng Tao   pnfs: save layout...
119
  	loff_t			plh_lwb; /* last write byte for layoutcommit */
9fa407587   Peng Tao   pnfs: save layout...
120
  	struct rpc_cred		*plh_lc_cred; /* layoutcommit cred */
b7edfaa19   Fred Isaman   pnfs: add prefix ...
121
  	struct inode		*plh_inode;
e5e940170   Benny Halevy   NFS: create and d...
122
  };
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
123
124
125
126
127
  struct pnfs_device {
  	struct nfs4_deviceid dev_id;
  	unsigned int  layout_type;
  	unsigned int  mincount;
  	struct page **pages;
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
128
129
130
  	unsigned int  pgbase;
  	unsigned int  pglen;
  };
7f11d8d38   Andy Adamson   pnfs: GETDEVICELIST
131
132
133
134
135
136
137
  #define NFS4_PNFS_GETDEVLIST_MAXNUM 16
  
  struct pnfs_devicelist {
  	unsigned int		eof;
  	unsigned int		num_devs;
  	struct nfs4_deviceid	dev_id[NFS4_PNFS_GETDEVLIST_MAXNUM];
  };
02c35fca7   Fred Isaman   NFSv4.1: pnfs: fu...
138
139
  extern int pnfs_register_layoutdriver(struct pnfs_layoutdriver_type *);
  extern void pnfs_unregister_layoutdriver(struct pnfs_layoutdriver_type *);
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
140
  /* nfs4proc.c */
7f11d8d38   Andy Adamson   pnfs: GETDEVICELIST
141
142
143
  extern int nfs4_proc_getdevicelist(struct nfs_server *server,
  				   const struct nfs_fh *fh,
  				   struct pnfs_devicelist *devlist);
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
144
145
146
  extern int nfs4_proc_getdeviceinfo(struct nfs_server *server,
  				   struct pnfs_device *dev);
  extern int nfs4_proc_layoutget(struct nfs4_layoutget *lgp);
cbe826036   Benny Halevy   pnfs: layoutreturn
147
  extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp);
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
148
149
  
  /* pnfs.c */
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
150
  void get_layout_hdr(struct pnfs_layout_hdr *lo);
bae724ef9   Fred Isaman   NFSv4.1: shift pn...
151
  void put_lseg(struct pnfs_layout_segment *lseg);
1751c3638   Trond Myklebust   NFS: Cleanup of t...
152
153
154
  
  bool pnfs_pageio_init_read(struct nfs_pageio_descriptor *, struct inode *);
  bool pnfs_pageio_init_write(struct nfs_pageio_descriptor *, struct inode *, int);
738fd0f36   Benny Halevy   pnfs: add set-cle...
155
  void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, u32);
85e174ba6   Ricardo Labiaga   NFS: set layout d...
156
  void unset_pnfs_layoutdriver(struct nfs_server *);
d8007d4dd   Trond Myklebust   NFSv4.1: Add an i...
157
  void pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *, struct nfs_page *);
493292ddc   Trond Myklebust   NFS: Move the pnf...
158
  int pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc);
d8007d4dd   Trond Myklebust   NFSv4.1: Add an i...
159
  void pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *, struct nfs_page *);
dce81290e   Trond Myklebust   NFS: Move the pnf...
160
  int pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc);
18ad0a9f2   Benny Halevy   NFSv4.1: change p...
161
  bool pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev, struct nfs_page *req);
1b0ae0687   Peng Tao   pnfs: make _set_l...
162
  void pnfs_set_lo_fail(struct pnfs_layout_segment *lseg);
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
163
  int pnfs_layout_process(struct nfs4_layoutget *lgp);
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
164
  void pnfs_free_lseg_list(struct list_head *tmp_list);
e5e940170   Benny Halevy   NFS: create and d...
165
  void pnfs_destroy_layout(struct nfs_inode *);
974cec8ca   Andy Adamson   NFS: client needs...
166
  void pnfs_destroy_all_layouts(struct nfs_client *);
cc6e5340b   Fred Isaman   pnfs: change lo r...
167
  void put_layout_hdr(struct pnfs_layout_hdr *lo);
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
168
169
170
  void pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo,
  			     const nfs4_stateid *new,
  			     bool update_barrier);
fd6002e9b   Fred Isaman   pnfs: change layo...
171
172
173
  int pnfs_choose_layoutget_stateid(nfs4_stateid *dst,
  				  struct pnfs_layout_hdr *lo,
  				  struct nfs4_state *open_state);
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
174
175
  int mark_matching_lsegs_invalid(struct pnfs_layout_hdr *lo,
  				struct list_head *tmp_list,
778b5502f   Benny Halevy   pnfs: Use byte-ra...
176
  				struct pnfs_layout_range *recall_range);
f7e8917a6   Fred Isaman   pnfs: layout roc ...
177
178
179
180
  bool pnfs_roc(struct inode *ino);
  void pnfs_roc_release(struct inode *ino);
  void pnfs_roc_set_barrier(struct inode *ino, u32 barrier);
  bool pnfs_roc_drain(struct inode *ino, u32 *barrier);
863a3c6c6   Andy Adamson   NFSv4.1: layoutco...
181
  void pnfs_set_layoutcommit(struct nfs_write_data *wdata);
db29c0890   Andy Adamson   pnfs: cleanup_lay...
182
  void pnfs_cleanup_layoutcommit(struct nfs4_layoutcommit_data *data);
ef3115378   Andy Adamson   NFSv4.1 convert l...
183
  int pnfs_layoutcommit_inode(struct inode *inode, bool sync);
cbe826036   Benny Halevy   pnfs: layoutreturn
184
  int _pnfs_return_layout(struct inode *);
8ce160c5e   Peng Tao   pnfs: recoalesce ...
185
  void pnfs_ld_write_done(struct nfs_write_data *);
9b7eecdcf   Peng Tao   pnfs: recoalesce ...
186
  void pnfs_ld_read_done(struct nfs_read_data *);
7c24d9489   Andy Adamson   NFSv4.1: File lay...
187
188
189
190
191
192
  struct pnfs_layout_segment *pnfs_update_layout(struct inode *ino,
  					       struct nfs_open_context *ctx,
  					       loff_t pos,
  					       u64 count,
  					       enum pnfs_iomode iomode,
  					       gfp_t gfp_flags);
e5e940170   Benny Halevy   NFS: create and d...
193

c47abcf8f   Andy Adamson   NFSv4.1: do not u...
194
195
196
197
198
199
  void nfs4_deviceid_mark_client_invalid(struct nfs_client *clp);
  
  /* nfs4_deviceid_flags */
  enum {
  	NFS_DEVICEID_INVALID = 0,       /* set when MDS clientid recalled */
  };
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
200
201
202
  /* pnfs_dev.c */
  struct nfs4_deviceid_node {
  	struct hlist_node		node;
9e3bd4e24   Weston Andros Adamson   NFS: fix umount o...
203
  	struct hlist_node		tmpnode;
1775bc342   Benny Halevy   NFSv4.1: purge de...
204
  	const struct pnfs_layoutdriver_type *ld;
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
205
  	const struct nfs_client		*nfs_client;
c47abcf8f   Andy Adamson   NFSv4.1: do not u...
206
  	unsigned long 			flags;
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
207
208
209
210
211
  	struct nfs4_deviceid		deviceid;
  	atomic_t			ref;
  };
  
  void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id);
35c8bb543   Benny Halevy   NFSv4.1: use layo...
212
  struct nfs4_deviceid_node *nfs4_find_get_deviceid(const struct pnfs_layoutdriver_type *, const struct nfs_client *, const struct nfs4_deviceid *);
35c8bb543   Benny Halevy   NFSv4.1: use layo...
213
  void nfs4_delete_deviceid(const struct pnfs_layoutdriver_type *, const struct nfs_client *, const struct nfs4_deviceid *);
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
214
  void nfs4_init_deviceid_node(struct nfs4_deviceid_node *,
1775bc342   Benny Halevy   NFSv4.1: purge de...
215
  			     const struct pnfs_layoutdriver_type *,
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
216
217
218
219
  			     const struct nfs_client *,
  			     const struct nfs4_deviceid *);
  struct nfs4_deviceid_node *nfs4_insert_deviceid_node(struct nfs4_deviceid_node *);
  bool nfs4_put_deviceid_node(struct nfs4_deviceid_node *);
1775bc342   Benny Halevy   NFSv4.1: purge de...
220
  void nfs4_deviceid_purge_client(const struct nfs_client *);
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
221

e5e940170   Benny Halevy   NFS: create and d...
222
223
224
225
226
  static inline int lo_fail_bit(u32 iomode)
  {
  	return iomode == IOMODE_RW ?
  			 NFS_LAYOUT_RW_FAILED : NFS_LAYOUT_RO_FAILED;
  }
d684d2ae1   Fred Isaman   NFSv4.1: lseg ref...
227
228
229
230
231
232
233
234
235
  static inline struct pnfs_layout_segment *
  get_lseg(struct pnfs_layout_segment *lseg)
  {
  	if (lseg) {
  		atomic_inc(&lseg->pls_refcount);
  		smp_mb__after_atomic_inc();
  	}
  	return lseg;
  }
e5e940170   Benny Halevy   NFS: create and d...
236
237
238
239
240
  /* Return true if a layout driver is being used for this mountpoint */
  static inline int pnfs_enabled_sb(struct nfs_server *nfss)
  {
  	return nfss->pnfs_curr_ld != NULL;
  }
85e174ba6   Ricardo Labiaga   NFS: set layout d...
241

a861a1e1c   Fred Isaman   NFSv4.1: add gene...
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
  static inline void
  pnfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg)
  {
  	if (lseg) {
  		struct pnfs_layoutdriver_type *ld;
  
  		ld = NFS_SERVER(req->wb_page->mapping->host)->pnfs_curr_ld;
  		if (ld->mark_pnfs_commit && ld->mark_pnfs_commit(lseg)) {
  			set_bit(PG_PNFS_COMMIT, &req->wb_flags);
  			req->wb_commit_lseg = get_lseg(lseg);
  		}
  	}
  }
  
  static inline int
  pnfs_commit_list(struct inode *inode, struct list_head *mds_pages, int how)
  {
  	if (!test_and_clear_bit(NFS_INO_PNFS_COMMIT, &NFS_I(inode)->flags))
  		return PNFS_NOT_ATTEMPTED;
  	return NFS_SERVER(inode)->pnfs_curr_ld->commit_pagelist(inode, mds_pages, how);
  }
  
  static inline struct list_head *
  pnfs_choose_commit_list(struct nfs_page *req, struct list_head *mds)
  {
  	struct list_head *rv;
  
  	if (test_and_clear_bit(PG_PNFS_COMMIT, &req->wb_flags)) {
  		struct inode *inode = req->wb_commit_lseg->pls_layout->plh_inode;
  
  		set_bit(NFS_INO_PNFS_COMMIT, &NFS_I(inode)->flags);
  		rv = NFS_SERVER(inode)->pnfs_curr_ld->choose_commit_list(req);
  		/* matched by ref taken when PG_PNFS_COMMIT is set */
  		put_lseg(req->wb_commit_lseg);
  	} else
  		rv = mds;
  	return rv;
  }
  
  static inline void pnfs_clear_request_commit(struct nfs_page *req)
  {
  	if (test_and_clear_bit(PG_PNFS_COMMIT, &req->wb_flags))
  		put_lseg(req->wb_commit_lseg);
  }
8a1636c45   Benny Halevy   pnfs: layoutret_o...
286
287
288
289
290
291
292
293
294
  /* Should the pNFS client commit and return the layout upon a setattr */
  static inline bool
  pnfs_ld_layoutret_on_setattr(struct inode *inode)
  {
  	if (!pnfs_enabled_sb(NFS_SERVER(inode)))
  		return false;
  	return NFS_SERVER(inode)->pnfs_curr_ld->flags &
  		PNFS_LAYOUTRET_ON_SETATTR;
  }
cbe826036   Benny Halevy   pnfs: layoutreturn
295
296
297
298
299
300
301
302
303
304
  static inline int pnfs_return_layout(struct inode *ino)
  {
  	struct nfs_inode *nfsi = NFS_I(ino);
  	struct nfs_server *nfss = NFS_SERVER(ino);
  
  	if (pnfs_enabled_sb(nfss) && nfsi->layout)
  		return _pnfs_return_layout(ino);
  
  	return 0;
  }
85e174ba6   Ricardo Labiaga   NFS: set layout d...
305
  #else  /* CONFIG_NFS_V4_1 */
974cec8ca   Andy Adamson   NFS: client needs...
306
307
308
  static inline void pnfs_destroy_all_layouts(struct nfs_client *clp)
  {
  }
e5e940170   Benny Halevy   NFS: create and d...
309
310
311
312
313
  static inline void pnfs_destroy_layout(struct nfs_inode *nfsi)
  {
  }
  
  static inline struct pnfs_layout_segment *
d684d2ae1   Fred Isaman   NFSv4.1: lseg ref...
314
315
316
317
318
319
320
321
  get_lseg(struct pnfs_layout_segment *lseg)
  {
  	return NULL;
  }
  
  static inline void put_lseg(struct pnfs_layout_segment *lseg)
  {
  }
cbe826036   Benny Halevy   pnfs: layoutreturn
322
323
324
325
  static inline int pnfs_return_layout(struct inode *ino)
  {
  	return 0;
  }
f7e8917a6   Fred Isaman   pnfs: layout roc ...
326
  static inline bool
8a1636c45   Benny Halevy   pnfs: layoutret_o...
327
328
329
330
331
332
  pnfs_ld_layoutret_on_setattr(struct inode *inode)
  {
  	return false;
  }
  
  static inline bool
f7e8917a6   Fred Isaman   pnfs: layout roc ...
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
  pnfs_roc(struct inode *ino)
  {
  	return false;
  }
  
  static inline void
  pnfs_roc_release(struct inode *ino)
  {
  }
  
  static inline void
  pnfs_roc_set_barrier(struct inode *ino, u32 barrier)
  {
  }
  
  static inline bool
  pnfs_roc_drain(struct inode *ino, u32 *barrier)
  {
  	return false;
  }
738fd0f36   Benny Halevy   pnfs: add set-cle...
353
  static inline void set_pnfs_layoutdriver(struct nfs_server *s,
a00ed25cc   Trond Myklebust   NFS: Re-enable co...
354
  					 const struct nfs_fh *mntfh, u32 id)
85e174ba6   Ricardo Labiaga   NFS: set layout d...
355
356
357
358
359
360
  {
  }
  
  static inline void unset_pnfs_layoutdriver(struct nfs_server *s)
  {
  }
1751c3638   Trond Myklebust   NFS: Cleanup of t...
361
  static inline bool pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, struct inode *inode)
44b83799a   Fred Isaman   NFSv4.1: trigger ...
362
  {
1751c3638   Trond Myklebust   NFS: Cleanup of t...
363
364
365
366
367
368
  	return false;
  }
  
  static inline bool pnfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode, int ioflags)
  {
  	return false;
44b83799a   Fred Isaman   NFSv4.1: trigger ...
369
  }
a861a1e1c   Fred Isaman   NFSv4.1: add gene...
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
  static inline void
  pnfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg)
  {
  }
  
  static inline int
  pnfs_commit_list(struct inode *inode, struct list_head *mds_pages, int how)
  {
  	return PNFS_NOT_ATTEMPTED;
  }
  
  static inline struct list_head *
  pnfs_choose_commit_list(struct nfs_page *req, struct list_head *mds)
  {
  	return mds;
  }
  
  static inline void pnfs_clear_request_commit(struct nfs_page *req)
  {
  }
ef3115378   Andy Adamson   NFSv4.1 convert l...
390
  static inline int pnfs_layoutcommit_inode(struct inode *inode, bool sync)
863a3c6c6   Andy Adamson   NFSv4.1: layoutco...
391
392
393
  {
  	return 0;
  }
1775bc342   Benny Halevy   NFSv4.1: purge de...
394
395
396
397
  
  static inline void nfs4_deviceid_purge_client(struct nfs_client *ncl)
  {
  }
85e174ba6   Ricardo Labiaga   NFS: set layout d...
398
399
400
  #endif /* CONFIG_NFS_V4_1 */
  
  #endif /* FS_NFS_PNFS_H */