]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - fs/xfs/linux-2.6/xfs_vfs.c
[XFS] move syncing related members from struct bhv_vfs to struct xfs_mount
[linux-2.6-omap-h63xx.git] / fs / xfs / linux-2.6 / xfs_vfs.c
1 /*
2  * Copyright (c) 2000-2005 Silicon Graphics, Inc.
3  * All Rights Reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it would be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write the Free Software Foundation,
16  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18 #include "xfs.h"
19 #include "xfs_fs.h"
20 #include "xfs_inum.h"
21 #include "xfs_log.h"
22 #include "xfs_clnt.h"
23 #include "xfs_trans.h"
24 #include "xfs_sb.h"
25 #include "xfs_ag.h"
26 #include "xfs_dir2.h"
27 #include "xfs_imap.h"
28 #include "xfs_alloc.h"
29 #include "xfs_dmapi.h"
30 #include "xfs_mount.h"
31 #include "xfs_quota.h"
32
33 int
34 vfs_mount(
35         struct bhv_desc         *bdp,
36         struct xfs_mount_args   *args,
37         struct cred             *cr)
38 {
39         struct bhv_desc         *next = bdp;
40
41         ASSERT(next);
42         while (! (bhvtovfsops(next))->vfs_mount)
43                 next = BHV_NEXT(next);
44         return ((*bhvtovfsops(next)->vfs_mount)(next, args, cr));
45 }
46
47 int
48 vfs_parseargs(
49         struct bhv_desc         *bdp,
50         char                    *s,
51         struct xfs_mount_args   *args,
52         int                     f)
53 {
54         struct bhv_desc         *next = bdp;
55
56         ASSERT(next);
57         while (! (bhvtovfsops(next))->vfs_parseargs)
58                 next = BHV_NEXT(next);
59         return ((*bhvtovfsops(next)->vfs_parseargs)(next, s, args, f));
60 }
61
62 int
63 vfs_showargs(
64         struct bhv_desc         *bdp,
65         struct seq_file         *m)
66 {
67         struct bhv_desc         *next = bdp;
68
69         ASSERT(next);
70         while (! (bhvtovfsops(next))->vfs_showargs)
71                 next = BHV_NEXT(next);
72         return ((*bhvtovfsops(next)->vfs_showargs)(next, m));
73 }
74
75 int
76 vfs_unmount(
77         struct bhv_desc         *bdp,
78         int                     fl,
79         struct cred             *cr)
80 {
81         struct bhv_desc         *next = bdp;
82
83         ASSERT(next);
84         while (! (bhvtovfsops(next))->vfs_unmount)
85                 next = BHV_NEXT(next);
86         return ((*bhvtovfsops(next)->vfs_unmount)(next, fl, cr));
87 }
88
89 int
90 vfs_mntupdate(
91         struct bhv_desc         *bdp,
92         int                     *fl,
93         struct xfs_mount_args   *args)
94 {
95         struct bhv_desc         *next = bdp;
96
97         ASSERT(next);
98         while (! (bhvtovfsops(next))->vfs_mntupdate)
99                 next = BHV_NEXT(next);
100         return ((*bhvtovfsops(next)->vfs_mntupdate)(next, fl, args));
101 }
102
103 int
104 vfs_root(
105         struct bhv_desc         *bdp,
106         bhv_vnode_t             **vpp)
107 {
108         struct bhv_desc         *next = bdp;
109
110         ASSERT(next);
111         while (! (bhvtovfsops(next))->vfs_root)
112                 next = BHV_NEXT(next);
113         return ((*bhvtovfsops(next)->vfs_root)(next, vpp));
114 }
115
116 int
117 vfs_statvfs(
118         struct bhv_desc         *bdp,
119         bhv_statvfs_t           *statp,
120         bhv_vnode_t             *vp)
121 {
122         struct bhv_desc         *next = bdp;
123
124         ASSERT(next);
125         while (! (bhvtovfsops(next))->vfs_statvfs)
126                 next = BHV_NEXT(next);
127         return ((*bhvtovfsops(next)->vfs_statvfs)(next, statp, vp));
128 }
129
130 int
131 vfs_sync(
132         struct bhv_desc         *bdp,
133         int                     fl,
134         struct cred             *cr)
135 {
136         struct bhv_desc         *next = bdp;
137
138         ASSERT(next);
139         while (! (bhvtovfsops(next))->vfs_sync)
140                 next = BHV_NEXT(next);
141         return ((*bhvtovfsops(next)->vfs_sync)(next, fl, cr));
142 }
143
144 int
145 vfs_vget(
146         struct bhv_desc         *bdp,
147         bhv_vnode_t             **vpp,
148         struct fid              *fidp)
149 {
150         struct bhv_desc         *next = bdp;
151
152         ASSERT(next);
153         while (! (bhvtovfsops(next))->vfs_vget)
154                 next = BHV_NEXT(next);
155         return ((*bhvtovfsops(next)->vfs_vget)(next, vpp, fidp));
156 }
157
158 void
159 vfs_init_vnode(
160         struct bhv_desc         *bdp,
161         bhv_vnode_t             *vp,
162         struct xfs_inode        *ip,
163         int                     unlock)
164 {
165         struct bhv_desc         *next = bdp;
166
167         ASSERT(next);
168         while (! (bhvtovfsops(next))->vfs_init_vnode)
169                 next = BHV_NEXT(next);
170         ((*bhvtovfsops(next)->vfs_init_vnode)(next, vp, ip, unlock));
171 }
172
173 void
174 vfs_force_shutdown(
175         struct bhv_desc         *bdp,
176         int                     fl,
177         char                    *file,
178         int                     line)
179 {
180         struct bhv_desc         *next = bdp;
181
182         ASSERT(next);
183         while (! (bhvtovfsops(next))->vfs_force_shutdown)
184                 next = BHV_NEXT(next);
185         ((*bhvtovfsops(next)->vfs_force_shutdown)(next, fl, file, line));
186 }
187
188 void
189 vfs_freeze(
190         struct bhv_desc         *bdp)
191 {
192         struct bhv_desc         *next = bdp;
193
194         ASSERT(next);
195         while (! (bhvtovfsops(next))->vfs_freeze)
196                 next = BHV_NEXT(next);
197         ((*bhvtovfsops(next)->vfs_freeze)(next));
198 }
199
200 bhv_vfs_t *
201 vfs_allocate(
202         struct super_block      *sb)
203 {
204         struct bhv_vfs          *vfsp;
205
206         vfsp = kmem_zalloc(sizeof(bhv_vfs_t), KM_SLEEP);
207
208         vfsp->vfs_super = sb;
209         sb->s_fs_info = vfsp;
210
211         return vfsp;
212 }
213
214 bhv_vfs_t *
215 vfs_from_sb(
216         struct super_block      *sb)
217 {
218         return (bhv_vfs_t *)sb->s_fs_info;
219 }
220
221 void
222 vfs_deallocate(
223         struct bhv_vfs          *vfsp)
224 {
225         kmem_free(vfsp, sizeof(bhv_vfs_t));
226 }