Blame view

fs/nfs/pnfs.h 13.1 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
  enum layoutdriver_policy_flags {
  	/* Should the pNFS client commit and return the layout upon a setattr */
  	PNFS_LAYOUTRET_ON_SETATTR	= 1 << 0,
fe0fe8358   Boaz Harrosh   pnfs-obj: Must re...
64
  	PNFS_LAYOUTRET_ON_ERROR		= 1 << 1,
8a1636c45   Benny Halevy   pnfs: layoutret_o...
65
  };
1775bc342   Benny Halevy   NFSv4.1: purge de...
66
  struct nfs4_deviceid_node;
85e174ba6   Ricardo Labiaga   NFS: set layout d...
67
68
  /* Per-layout driver specific registration structure */
  struct pnfs_layoutdriver_type {
02c35fca7   Fred Isaman   NFSv4.1: pnfs: fu...
69
70
71
72
  	struct list_head pnfs_tblid;
  	const u32 id;
  	const char *name;
  	struct module *owner;
8a1636c45   Benny Halevy   pnfs: layoutret_o...
73
  	unsigned flags;
636fb9c89   Benny Halevy   pnfs: alloc and f...
74

738fd0f36   Benny Halevy   pnfs: add set-cle...
75
76
  	int (*set_layoutdriver) (struct nfs_server *, const struct nfs_fh *);
  	int (*clear_layoutdriver) (struct nfs_server *);
636fb9c89   Benny Halevy   pnfs: alloc and f...
77
78
  	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...
79
  	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...
80
  	void (*free_lseg) (struct pnfs_layout_segment *lseg);
94ad1c80e   Fred Isaman   NFSv4.1: coelesce...
81
82
  
  	/* test for nfs page cache coalescing */
1751c3638   Trond Myklebust   NFS: Cleanup of t...
83
84
  	const struct nfs_pageio_ops *pg_read_ops;
  	const struct nfs_pageio_ops *pg_write_ops;
64419a9b2   Andy Adamson   NFSv4.1: generic ...
85

a861a1e1c   Fred Isaman   NFSv4.1: add gene...
86
87
88
89
90
91
  	/* 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 ...
92
93
94
95
96
  	/*
  	 * 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...
97
  	enum pnfs_try_status (*write_pagelist) (struct nfs_write_data *nfs_data, int how);
1775bc342   Benny Halevy   NFSv4.1: purge de...
98
99
  
  	void (*free_deviceid_node) (struct nfs4_deviceid_node *);
04a555498   Andy Adamson   pnfs: encode_layo...
100
101
102
103
  
  	void (*encode_layoutreturn) (struct pnfs_layout_hdr *layoutid,
  				     struct xdr_stream *xdr,
  				     const struct nfs4_layoutreturn_args *args);
ac7db7264   Benny Halevy   pnfs: encode_layo...
104

db29c0890   Andy Adamson   pnfs: cleanup_lay...
105
  	void (*cleanup_layoutcommit) (struct nfs4_layoutcommit_data *data);
ac7db7264   Benny Halevy   pnfs: encode_layo...
106
107
108
  	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...
109
  };
e5e940170   Benny Halevy   NFS: create and d...
110
  struct pnfs_layout_hdr {
cc6e5340b   Fred Isaman   pnfs: change lo r...
111
  	atomic_t		plh_refcount;
b7edfaa19   Fred Isaman   pnfs: add prefix ...
112
  	struct list_head	plh_layouts;   /* other client layouts */
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
113
  	struct list_head	plh_bulk_recall; /* clnt list of bulk recalls */
b7edfaa19   Fred Isaman   pnfs: add prefix ...
114
  	struct list_head	plh_segs;      /* layout segments list */
b7edfaa19   Fred Isaman   pnfs: add prefix ...
115
  	nfs4_stateid		plh_stateid;
cf7d63f1f   Fred Isaman   pnfs: serialize L...
116
  	atomic_t		plh_outstanding; /* number of RPCs out */
f7e8917a6   Fred Isaman   pnfs: layout roc ...
117
  	unsigned long		plh_block_lgets; /* block LAYOUTGET if >0 */
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
118
  	u32			plh_barrier; /* ignore lower seqids */
566052c53   Fred Isaman   pnfs: add prefix ...
119
  	unsigned long		plh_flags;
acff58805   Peng Tao   pnfs: save layout...
120
  	loff_t			plh_lwb; /* last write byte for layoutcommit */
9fa407587   Peng Tao   pnfs: save layout...
121
  	struct rpc_cred		*plh_lc_cred; /* layoutcommit cred */
b7edfaa19   Fred Isaman   pnfs: add prefix ...
122
  	struct inode		*plh_inode;
e5e940170   Benny Halevy   NFS: create and d...
123
  };
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
124
125
126
127
128
  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...
129
130
131
  	unsigned int  pgbase;
  	unsigned int  pglen;
  };
7f11d8d38   Andy Adamson   pnfs: GETDEVICELIST
132
133
134
135
136
137
138
  #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...
139
140
  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...
141
  /* nfs4proc.c */
7f11d8d38   Andy Adamson   pnfs: GETDEVICELIST
142
143
144
  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...
145
146
147
  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
148
  extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp);
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
149
150
  
  /* pnfs.c */
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
151
  void get_layout_hdr(struct pnfs_layout_hdr *lo);
bae724ef9   Fred Isaman   NFSv4.1: shift pn...
152
  void put_lseg(struct pnfs_layout_segment *lseg);
1751c3638   Trond Myklebust   NFS: Cleanup of t...
153
154
155
  
  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...
156
  void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, u32);
85e174ba6   Ricardo Labiaga   NFS: set layout d...
157
  void unset_pnfs_layoutdriver(struct nfs_server *);
d8007d4dd   Trond Myklebust   NFSv4.1: Add an i...
158
  void pnfs_generic_pg_init_read(struct nfs_pageio_descriptor *, struct nfs_page *);
493292ddc   Trond Myklebust   NFS: Move the pnf...
159
  int pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc);
d8007d4dd   Trond Myklebust   NFSv4.1: Add an i...
160
  void pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *, struct nfs_page *);
dce81290e   Trond Myklebust   NFS: Move the pnf...
161
  int pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc);
18ad0a9f2   Benny Halevy   NFSv4.1: change p...
162
  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...
163
  void pnfs_set_lo_fail(struct pnfs_layout_segment *lseg);
b1f69b754   Andy Adamson   NFSv4.1: pnfs: ad...
164
  int pnfs_layout_process(struct nfs4_layoutget *lgp);
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
165
  void pnfs_free_lseg_list(struct list_head *tmp_list);
e5e940170   Benny Halevy   NFS: create and d...
166
  void pnfs_destroy_layout(struct nfs_inode *);
974cec8ca   Andy Adamson   NFS: client needs...
167
  void pnfs_destroy_all_layouts(struct nfs_client *);
cc6e5340b   Fred Isaman   pnfs: change lo r...
168
  void put_layout_hdr(struct pnfs_layout_hdr *lo);
43f1b3da8   Fred Isaman   pnfs: add CB_LAYO...
169
170
171
  void pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo,
  			     const nfs4_stateid *new,
  			     bool update_barrier);
fd6002e9b   Fred Isaman   pnfs: change layo...
172
173
174
  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...
175
176
  int mark_matching_lsegs_invalid(struct pnfs_layout_hdr *lo,
  				struct list_head *tmp_list,
778b5502f   Benny Halevy   pnfs: Use byte-ra...
177
  				struct pnfs_layout_range *recall_range);
f7e8917a6   Fred Isaman   pnfs: layout roc ...
178
179
180
181
  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...
182
  void pnfs_set_layoutcommit(struct nfs_write_data *wdata);
db29c0890   Andy Adamson   pnfs: cleanup_lay...
183
  void pnfs_cleanup_layoutcommit(struct nfs4_layoutcommit_data *data);
ef3115378   Andy Adamson   NFSv4.1 convert l...
184
  int pnfs_layoutcommit_inode(struct inode *inode, bool sync);
cbe826036   Benny Halevy   pnfs: layoutreturn
185
  int _pnfs_return_layout(struct inode *);
8ce160c5e   Peng Tao   pnfs: recoalesce ...
186
  void pnfs_ld_write_done(struct nfs_write_data *);
9b7eecdcf   Peng Tao   pnfs: recoalesce ...
187
  void pnfs_ld_read_done(struct nfs_read_data *);
7c24d9489   Andy Adamson   NFSv4.1: File lay...
188
189
190
191
192
193
  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...
194

c47abcf8f   Andy Adamson   NFSv4.1: do not u...
195
196
197
198
199
200
  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...
201
202
203
  /* pnfs_dev.c */
  struct nfs4_deviceid_node {
  	struct hlist_node		node;
9e3bd4e24   Weston Andros Adamson   NFS: fix umount o...
204
  	struct hlist_node		tmpnode;
1775bc342   Benny Halevy   NFSv4.1: purge de...
205
  	const struct pnfs_layoutdriver_type *ld;
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
206
  	const struct nfs_client		*nfs_client;
c47abcf8f   Andy Adamson   NFSv4.1: do not u...
207
  	unsigned long 			flags;
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
208
209
210
211
212
  	struct nfs4_deviceid		deviceid;
  	atomic_t			ref;
  };
  
  void nfs4_print_deviceid(const struct nfs4_deviceid *dev_id);
35c8bb543   Benny Halevy   NFSv4.1: use layo...
213
  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...
214
  void nfs4_delete_deviceid(const struct pnfs_layoutdriver_type *, const struct nfs_client *, const struct nfs4_deviceid *);
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
215
  void nfs4_init_deviceid_node(struct nfs4_deviceid_node *,
1775bc342   Benny Halevy   NFSv4.1: purge de...
216
  			     const struct pnfs_layoutdriver_type *,
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
217
218
219
220
  			     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...
221
  void nfs4_deviceid_purge_client(const struct nfs_client *);
a1eaecbc4   Benny Halevy   NFSv4.1: make dev...
222

e5e940170   Benny Halevy   NFS: create and d...
223
224
225
226
227
  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...
228
229
230
231
232
233
234
235
236
  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...
237
238
239
240
241
  /* 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...
242

a861a1e1c   Fred Isaman   NFSv4.1: add gene...
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
286
  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...
287
288
289
290
291
292
293
294
295
  /* 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
296
297
298
299
300
301
302
303
304
305
  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...
306
  #else  /* CONFIG_NFS_V4_1 */
974cec8ca   Andy Adamson   NFS: client needs...
307
308
309
  static inline void pnfs_destroy_all_layouts(struct nfs_client *clp)
  {
  }
e5e940170   Benny Halevy   NFS: create and d...
310
311
312
313
314
  static inline void pnfs_destroy_layout(struct nfs_inode *nfsi)
  {
  }
  
  static inline struct pnfs_layout_segment *
d684d2ae1   Fred Isaman   NFSv4.1: lseg ref...
315
316
317
318
319
320
321
322
  get_lseg(struct pnfs_layout_segment *lseg)
  {
  	return NULL;
  }
  
  static inline void put_lseg(struct pnfs_layout_segment *lseg)
  {
  }
cbe826036   Benny Halevy   pnfs: layoutreturn
323
324
325
326
  static inline int pnfs_return_layout(struct inode *ino)
  {
  	return 0;
  }
f7e8917a6   Fred Isaman   pnfs: layout roc ...
327
  static inline bool
8a1636c45   Benny Halevy   pnfs: layoutret_o...
328
329
330
331
332
333
  pnfs_ld_layoutret_on_setattr(struct inode *inode)
  {
  	return false;
  }
  
  static inline bool
f7e8917a6   Fred Isaman   pnfs: layout roc ...
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
  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...
354
  static inline void set_pnfs_layoutdriver(struct nfs_server *s,
a00ed25cc   Trond Myklebust   NFS: Re-enable co...
355
  					 const struct nfs_fh *mntfh, u32 id)
85e174ba6   Ricardo Labiaga   NFS: set layout d...
356
357
358
359
360
361
  {
  }
  
  static inline void unset_pnfs_layoutdriver(struct nfs_server *s)
  {
  }
1751c3638   Trond Myklebust   NFS: Cleanup of t...
362
  static inline bool pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, struct inode *inode)
44b83799a   Fred Isaman   NFSv4.1: trigger ...
363
  {
1751c3638   Trond Myklebust   NFS: Cleanup of t...
364
365
366
367
368
369
  	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 ...
370
  }
a861a1e1c   Fred Isaman   NFSv4.1: add gene...
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
  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...
391
  static inline int pnfs_layoutcommit_inode(struct inode *inode, bool sync)
863a3c6c6   Andy Adamson   NFSv4.1: layoutco...
392
393
394
  {
  	return 0;
  }
1775bc342   Benny Halevy   NFSv4.1: purge de...
395
396
397
398
  
  static inline void nfs4_deviceid_purge_client(struct nfs_client *ncl)
  {
  }
85e174ba6   Ricardo Labiaga   NFS: set layout d...
399
400
401
  #endif /* CONFIG_NFS_V4_1 */
  
  #endif /* FS_NFS_PNFS_H */