diff options
Diffstat (limited to 'fs/afs/super.c')
-rw-r--r-- | fs/afs/super.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/fs/afs/super.c b/fs/afs/super.c index 9cf80f02da16..77e1e5a61154 100644 --- a/fs/afs/super.c +++ b/fs/afs/super.c | |||
@@ -16,6 +16,7 @@ | |||
16 | 16 | ||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
19 | #include <linux/mount.h> | ||
19 | #include <linux/init.h> | 20 | #include <linux/init.h> |
20 | #include <linux/slab.h> | 21 | #include <linux/slab.h> |
21 | #include <linux/smp_lock.h> | 22 | #include <linux/smp_lock.h> |
@@ -48,6 +49,7 @@ struct file_system_type afs_fs_type = { | |||
48 | static const struct super_operations afs_super_ops = { | 49 | static const struct super_operations afs_super_ops = { |
49 | .statfs = afs_statfs, | 50 | .statfs = afs_statfs, |
50 | .alloc_inode = afs_alloc_inode, | 51 | .alloc_inode = afs_alloc_inode, |
52 | .drop_inode = afs_drop_inode, | ||
51 | .destroy_inode = afs_destroy_inode, | 53 | .destroy_inode = afs_destroy_inode, |
52 | .evict_inode = afs_evict_inode, | 54 | .evict_inode = afs_evict_inode, |
53 | .put_super = afs_put_super, | 55 | .put_super = afs_put_super, |
@@ -62,12 +64,14 @@ enum { | |||
62 | afs_opt_cell, | 64 | afs_opt_cell, |
63 | afs_opt_rwpath, | 65 | afs_opt_rwpath, |
64 | afs_opt_vol, | 66 | afs_opt_vol, |
67 | afs_opt_autocell, | ||
65 | }; | 68 | }; |
66 | 69 | ||
67 | static const match_table_t afs_options_list = { | 70 | static const match_table_t afs_options_list = { |
68 | { afs_opt_cell, "cell=%s" }, | 71 | { afs_opt_cell, "cell=%s" }, |
69 | { afs_opt_rwpath, "rwpath" }, | 72 | { afs_opt_rwpath, "rwpath" }, |
70 | { afs_opt_vol, "vol=%s" }, | 73 | { afs_opt_vol, "vol=%s" }, |
74 | { afs_opt_autocell, "autocell" }, | ||
71 | { afs_no_opt, NULL }, | 75 | { afs_no_opt, NULL }, |
72 | }; | 76 | }; |
73 | 77 | ||
@@ -151,7 +155,8 @@ static int afs_parse_options(struct afs_mount_params *params, | |||
151 | switch (token) { | 155 | switch (token) { |
152 | case afs_opt_cell: | 156 | case afs_opt_cell: |
153 | cell = afs_cell_lookup(args[0].from, | 157 | cell = afs_cell_lookup(args[0].from, |
154 | args[0].to - args[0].from); | 158 | args[0].to - args[0].from, |
159 | false); | ||
155 | if (IS_ERR(cell)) | 160 | if (IS_ERR(cell)) |
156 | return PTR_ERR(cell); | 161 | return PTR_ERR(cell); |
157 | afs_put_cell(params->cell); | 162 | afs_put_cell(params->cell); |
@@ -166,6 +171,10 @@ static int afs_parse_options(struct afs_mount_params *params, | |||
166 | *devname = args[0].from; | 171 | *devname = args[0].from; |
167 | break; | 172 | break; |
168 | 173 | ||
174 | case afs_opt_autocell: | ||
175 | params->autocell = 1; | ||
176 | break; | ||
177 | |||
169 | default: | 178 | default: |
170 | printk(KERN_ERR "kAFS:" | 179 | printk(KERN_ERR "kAFS:" |
171 | " Unknown or invalid mount option: '%s'\n", p); | 180 | " Unknown or invalid mount option: '%s'\n", p); |
@@ -252,10 +261,10 @@ static int afs_parse_device_name(struct afs_mount_params *params, | |||
252 | 261 | ||
253 | /* lookup the cell record */ | 262 | /* lookup the cell record */ |
254 | if (cellname || !params->cell) { | 263 | if (cellname || !params->cell) { |
255 | cell = afs_cell_lookup(cellname, cellnamesz); | 264 | cell = afs_cell_lookup(cellname, cellnamesz, true); |
256 | if (IS_ERR(cell)) { | 265 | if (IS_ERR(cell)) { |
257 | printk(KERN_ERR "kAFS: unable to lookup cell '%s'\n", | 266 | printk(KERN_ERR "kAFS: unable to lookup cell '%*.*s'\n", |
258 | cellname ?: ""); | 267 | cellnamesz, cellnamesz, cellname ?: ""); |
259 | return PTR_ERR(cell); | 268 | return PTR_ERR(cell); |
260 | } | 269 | } |
261 | afs_put_cell(params->cell); | 270 | afs_put_cell(params->cell); |
@@ -321,6 +330,9 @@ static int afs_fill_super(struct super_block *sb, void *data) | |||
321 | if (IS_ERR(inode)) | 330 | if (IS_ERR(inode)) |
322 | goto error_inode; | 331 | goto error_inode; |
323 | 332 | ||
333 | if (params->autocell) | ||
334 | set_bit(AFS_VNODE_AUTOCELL, &AFS_FS_I(inode)->flags); | ||
335 | |||
324 | ret = -ENOMEM; | 336 | ret = -ENOMEM; |
325 | root = d_alloc_root(inode); | 337 | root = d_alloc_root(inode); |
326 | if (!root) | 338 | if (!root) |