]>
Commit | Line | Data |
---|---|---|
85e174ba RL |
1 | /* |
2 | * pNFS client data structures. | |
3 | * | |
4 | * Copyright (c) 2002 | |
5 | * The Regents of the University of Michigan | |
6 | * All Rights Reserved | |
7 | * | |
8 | * Dean Hildebrand <dhildebz@umich.edu> | |
9 | * | |
10 | * Permission is granted to use, copy, create derivative works, and | |
11 | * redistribute this software and such derivative works for any purpose, | |
12 | * so long as the name of the University of Michigan is not used in | |
13 | * any advertising or publicity pertaining to the use or distribution | |
14 | * of this software without specific, written prior authorization. If | |
15 | * the above copyright notice or any other identification of the | |
16 | * University of Michigan is included in any copy of any portion of | |
17 | * this software, then the disclaimer below must also be included. | |
18 | * | |
19 | * This software is provided as is, without representation or warranty | |
20 | * of any kind either express or implied, including without limitation | |
21 | * the implied warranties of merchantability, fitness for a particular | |
22 | * purpose, or noninfringement. The Regents of the University of | |
23 | * Michigan shall not be liable for any damages, including special, | |
24 | * indirect, incidental, or consequential damages, with respect to any | |
25 | * claim arising out of or in connection with the use of the software, | |
26 | * even if it has been or is hereafter advised of the possibility of | |
27 | * such damages. | |
28 | */ | |
29 | ||
30 | #ifndef FS_NFS_PNFS_H | |
31 | #define FS_NFS_PNFS_H | |
32 | ||
33 | #ifdef CONFIG_NFS_V4_1 | |
34 | ||
35 | #define LAYOUT_NFSV4_1_MODULE_PREFIX "nfs-layouttype4" | |
36 | ||
e5e94017 BH |
37 | enum { |
38 | NFS_LAYOUT_RO_FAILED = 0, /* get ro layout failed stop trying */ | |
39 | NFS_LAYOUT_RW_FAILED, /* get rw layout failed stop trying */ | |
40 | }; | |
41 | ||
85e174ba RL |
42 | /* Per-layout driver specific registration structure */ |
43 | struct pnfs_layoutdriver_type { | |
02c35fca FI |
44 | struct list_head pnfs_tblid; |
45 | const u32 id; | |
46 | const char *name; | |
47 | struct module *owner; | |
48 | int (*initialize_mountpoint) (struct nfs_server *); | |
49 | int (*uninitialize_mountpoint) (struct nfs_server *); | |
85e174ba RL |
50 | }; |
51 | ||
e5e94017 BH |
52 | struct pnfs_layout_hdr { |
53 | unsigned long refcount; | |
54 | unsigned long state; | |
55 | struct inode *inode; | |
56 | }; | |
57 | ||
02c35fca FI |
58 | extern int pnfs_register_layoutdriver(struct pnfs_layoutdriver_type *); |
59 | extern void pnfs_unregister_layoutdriver(struct pnfs_layoutdriver_type *); | |
60 | ||
e5e94017 BH |
61 | struct pnfs_layout_segment * |
62 | pnfs_update_layout(struct inode *ino, struct nfs_open_context *ctx, | |
63 | enum pnfs_iomode access_type); | |
85e174ba RL |
64 | void set_pnfs_layoutdriver(struct nfs_server *, u32 id); |
65 | void unset_pnfs_layoutdriver(struct nfs_server *); | |
e5e94017 BH |
66 | void pnfs_destroy_layout(struct nfs_inode *); |
67 | ||
68 | ||
69 | static inline int lo_fail_bit(u32 iomode) | |
70 | { | |
71 | return iomode == IOMODE_RW ? | |
72 | NFS_LAYOUT_RW_FAILED : NFS_LAYOUT_RO_FAILED; | |
73 | } | |
74 | ||
75 | /* Return true if a layout driver is being used for this mountpoint */ | |
76 | static inline int pnfs_enabled_sb(struct nfs_server *nfss) | |
77 | { | |
78 | return nfss->pnfs_curr_ld != NULL; | |
79 | } | |
85e174ba RL |
80 | |
81 | #else /* CONFIG_NFS_V4_1 */ | |
82 | ||
e5e94017 BH |
83 | static inline void pnfs_destroy_layout(struct nfs_inode *nfsi) |
84 | { | |
85 | } | |
86 | ||
87 | static inline struct pnfs_layout_segment * | |
88 | pnfs_update_layout(struct inode *ino, struct nfs_open_context *ctx, | |
89 | enum pnfs_iomode access_type) | |
90 | { | |
91 | return NULL; | |
92 | } | |
93 | ||
85e174ba RL |
94 | static inline void set_pnfs_layoutdriver(struct nfs_server *s, u32 id) |
95 | { | |
96 | } | |
97 | ||
98 | static inline void unset_pnfs_layoutdriver(struct nfs_server *s) | |
99 | { | |
100 | } | |
101 | ||
102 | #endif /* CONFIG_NFS_V4_1 */ | |
103 | ||
104 | #endif /* FS_NFS_PNFS_H */ |