Merge branch 'work.mount-syscalls' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / fs / afs / super.c
1 /* AFS superblock handling
2  *
3  * Copyright (c) 2002, 2007, 2018 Red Hat, Inc. All rights reserved.
4  *
5  * This software may be freely redistributed under the terms of the
6  * GNU General Public License.
7  *
8  * You should have received a copy of the GNU General Public License
9  * along with this program; if not, write to the Free Software
10  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
11  *
12  * Authors: David Howells <dhowells@redhat.com>
13  *          David Woodhouse <dwmw2@infradead.org>
14  *
15  */
16
17 #include <linux/kernel.h>
18 #include <linux/module.h>
19 #include <linux/mount.h>
20 #include <linux/init.h>
21 #include <linux/slab.h>
22 #include <linux/fs.h>
23 #include <linux/pagemap.h>
24 #include <linux/fs_parser.h>
25 #include <linux/statfs.h>
26 #include <linux/sched.h>
27 #include <linux/nsproxy.h>
28 #include <linux/magic.h>
29 #include <net/net_namespace.h>
30 #include "internal.h"
31
32 static void afs_i_init_once(void *foo);
33 static void afs_kill_super(struct super_block *sb);
34 static struct inode *afs_alloc_inode(struct super_block *sb);
35 static void afs_destroy_inode(struct inode *inode);
36 static void afs_free_inode(struct inode *inode);
37 static int afs_statfs(struct dentry *dentry, struct kstatfs *buf);
38 static int afs_show_devname(struct seq_file *m, struct dentry *root);
39 static int afs_show_options(struct seq_file *m, struct dentry *root);
40 static int afs_init_fs_context(struct fs_context *fc);
41 static const struct fs_parameter_description afs_fs_parameters;
42
43 struct file_system_type afs_fs_type = {
44         .owner                  = THIS_MODULE,
45         .name                   = "afs",
46         .init_fs_context        = afs_init_fs_context,
47         .parameters             = &afs_fs_parameters,
48         .kill_sb                = afs_kill_super,
49         .fs_flags               = 0,
50 };
51 MODULE_ALIAS_FS("afs");
52
53 int afs_net_id;
54
55 static const struct super_operations afs_super_ops = {
56         .statfs         = afs_statfs,
57         .alloc_inode    = afs_alloc_inode,
58         .drop_inode     = afs_drop_inode,
59         .destroy_inode  = afs_destroy_inode,
60         .free_inode     = afs_free_inode,
61         .evict_inode    = afs_evict_inode,
62         .show_devname   = afs_show_devname,
63         .show_options   = afs_show_options,
64 };
65
66 static struct kmem_cache *afs_inode_cachep;
67 static atomic_t afs_count_active_inodes;
68
69 enum afs_param {
70         Opt_autocell,
71         Opt_dyn,
72         Opt_source,
73 };
74
75 static const struct fs_parameter_spec afs_param_specs[] = {
76         fsparam_flag  ("autocell",      Opt_autocell),
77         fsparam_flag  ("dyn",           Opt_dyn),
78         fsparam_string("source",        Opt_source),
79         {}
80 };
81
82 static const struct fs_parameter_description afs_fs_parameters = {
83         .name           = "kAFS",
84         .specs          = afs_param_specs,
85 };
86
87 /*
88  * initialise the filesystem
89  */
90 int __init afs_fs_init(void)
91 {
92         int ret;
93
94         _enter("");
95
96         /* create ourselves an inode cache */
97         atomic_set(&afs_count_active_inodes, 0);
98
99         ret = -ENOMEM;
100         afs_inode_cachep = kmem_cache_create("afs_inode_cache",
101                                              sizeof(struct afs_vnode),
102                                              0,
103                                              SLAB_HWCACHE_ALIGN|SLAB_ACCOUNT,
104                                              afs_i_init_once);
105         if (!afs_inode_cachep) {
106                 printk(KERN_NOTICE "kAFS: Failed to allocate inode cache\n");
107                 return ret;
108         }
109
110         /* now export our filesystem to lesser mortals */
111         ret = register_filesystem(&afs_fs_type);
112         if (ret < 0) {
113                 kmem_cache_destroy(afs_inode_cachep);
114                 _leave(" = %d", ret);
115                 return ret;
116         }
117
118         _leave(" = 0");
119         return 0;
120 }
121
122 /*
123  * clean up the filesystem
124  */
125 void afs_fs_exit(void)
126 {
127         _enter("");
128
129         afs_mntpt_kill_timer();
130         unregister_filesystem(&afs_fs_type);
131
132         if (atomic_read(&afs_count_active_inodes) != 0) {
133                 printk("kAFS: %d active inode objects still present\n",
134                        atomic_read(&afs_count_active_inodes));
135                 BUG();
136         }
137
138         /*
139          * Make sure all delayed rcu free inodes are flushed before we
140          * destroy cache.
141          */
142         rcu_barrier();
143         kmem_cache_destroy(afs_inode_cachep);
144         _leave("");
145 }
146
147 /*
148  * Display the mount device name in /proc/mounts.
149  */
150 static int afs_show_devname(struct seq_file *m, struct dentry *root)
151 {
152         struct afs_super_info *as = AFS_FS_S(root->d_sb);
153         struct afs_volume *volume = as->volume;
154         struct afs_cell *cell = as->cell;
155         const char *suf = "";
156         char pref = '%';
157
158         if (as->dyn_root) {
159                 seq_puts(m, "none");
160                 return 0;
161         }
162
163         switch (volume->type) {
164         case AFSVL_RWVOL:
165                 break;
166         case AFSVL_ROVOL:
167                 pref = '#';
168                 if (volume->type_force)
169                         suf = ".readonly";
170                 break;
171         case AFSVL_BACKVOL:
172                 pref = '#';
173                 suf = ".backup";
174                 break;
175         }
176
177         seq_printf(m, "%c%s:%s%s", pref, cell->name, volume->name, suf);
178         return 0;
179 }
180
181 /*
182  * Display the mount options in /proc/mounts.
183  */
184 static int afs_show_options(struct seq_file *m, struct dentry *root)
185 {
186         struct afs_super_info *as = AFS_FS_S(root->d_sb);
187
188         if (as->dyn_root)
189                 seq_puts(m, ",dyn");
190         if (test_bit(AFS_VNODE_AUTOCELL, &AFS_FS_I(d_inode(root))->flags))
191                 seq_puts(m, ",autocell");
192         return 0;
193 }
194
195 /*
196  * Parse the source name to get cell name, volume name, volume type and R/W
197  * selector.
198  *
199  * This can be one of the following:
200  *      "%[cell:]volume[.]"             R/W volume
201  *      "#[cell:]volume[.]"             R/O or R/W volume (R/O parent),
202  *                                       or R/W (R/W parent) volume
203  *      "%[cell:]volume.readonly"       R/O volume
204  *      "#[cell:]volume.readonly"       R/O volume
205  *      "%[cell:]volume.backup"         Backup volume
206  *      "#[cell:]volume.backup"         Backup volume
207  */
208 static int afs_parse_source(struct fs_context *fc, struct fs_parameter *param)
209 {
210         struct afs_fs_context *ctx = fc->fs_private;
211         struct afs_cell *cell;
212         const char *cellname, *suffix, *name = param->string;
213         int cellnamesz;
214
215         _enter(",%s", name);
216
217         if (!name) {
218                 printk(KERN_ERR "kAFS: no volume name specified\n");
219                 return -EINVAL;
220         }
221
222         if ((name[0] != '%' && name[0] != '#') || !name[1]) {
223                 /* To use dynroot, we don't want to have to provide a source */
224                 if (strcmp(name, "none") == 0) {
225                         ctx->no_cell = true;
226                         return 0;
227                 }
228                 printk(KERN_ERR "kAFS: unparsable volume name\n");
229                 return -EINVAL;
230         }
231
232         /* determine the type of volume we're looking for */
233         if (name[0] == '%') {
234                 ctx->type = AFSVL_RWVOL;
235                 ctx->force = true;
236         }
237         name++;
238
239         /* split the cell name out if there is one */
240         ctx->volname = strchr(name, ':');
241         if (ctx->volname) {
242                 cellname = name;
243                 cellnamesz = ctx->volname - name;
244                 ctx->volname++;
245         } else {
246                 ctx->volname = name;
247                 cellname = NULL;
248                 cellnamesz = 0;
249         }
250
251         /* the volume type is further affected by a possible suffix */
252         suffix = strrchr(ctx->volname, '.');
253         if (suffix) {
254                 if (strcmp(suffix, ".readonly") == 0) {
255                         ctx->type = AFSVL_ROVOL;
256                         ctx->force = true;
257                 } else if (strcmp(suffix, ".backup") == 0) {
258                         ctx->type = AFSVL_BACKVOL;
259                         ctx->force = true;
260                 } else if (suffix[1] == 0) {
261                 } else {
262                         suffix = NULL;
263                 }
264         }
265
266         ctx->volnamesz = suffix ?
267                 suffix - ctx->volname : strlen(ctx->volname);
268
269         _debug("cell %*.*s [%p]",
270                cellnamesz, cellnamesz, cellname ?: "", ctx->cell);
271
272         /* lookup the cell record */
273         if (cellname) {
274                 cell = afs_lookup_cell(ctx->net, cellname, cellnamesz,
275                                        NULL, false);
276                 if (IS_ERR(cell)) {
277                         pr_err("kAFS: unable to lookup cell '%*.*s'\n",
278                                cellnamesz, cellnamesz, cellname ?: "");
279                         return PTR_ERR(cell);
280                 }
281                 afs_put_cell(ctx->net, ctx->cell);
282                 ctx->cell = cell;
283         }
284
285         _debug("CELL:%s [%p] VOLUME:%*.*s SUFFIX:%s TYPE:%d%s",
286                ctx->cell->name, ctx->cell,
287                ctx->volnamesz, ctx->volnamesz, ctx->volname,
288                suffix ?: "-", ctx->type, ctx->force ? " FORCE" : "");
289
290         fc->source = param->string;
291         param->string = NULL;
292         return 0;
293 }
294
295 /*
296  * Parse a single mount parameter.
297  */
298 static int afs_parse_param(struct fs_context *fc, struct fs_parameter *param)
299 {
300         struct fs_parse_result result;
301         struct afs_fs_context *ctx = fc->fs_private;
302         int opt;
303
304         opt = fs_parse(fc, &afs_fs_parameters, param, &result);
305         if (opt < 0)
306                 return opt;
307
308         switch (opt) {
309         case Opt_source:
310                 return afs_parse_source(fc, param);
311
312         case Opt_autocell:
313                 ctx->autocell = true;
314                 break;
315
316         case Opt_dyn:
317                 ctx->dyn_root = true;
318                 break;
319
320         default:
321                 return -EINVAL;
322         }
323
324         _leave(" = 0");
325         return 0;
326 }
327
328 /*
329  * Validate the options, get the cell key and look up the volume.
330  */
331 static int afs_validate_fc(struct fs_context *fc)
332 {
333         struct afs_fs_context *ctx = fc->fs_private;
334         struct afs_volume *volume;
335         struct key *key;
336
337         if (!ctx->dyn_root) {
338                 if (ctx->no_cell) {
339                         pr_warn("kAFS: Can only specify source 'none' with -o dyn\n");
340                         return -EINVAL;
341                 }
342
343                 if (!ctx->cell) {
344                         pr_warn("kAFS: No cell specified\n");
345                         return -EDESTADDRREQ;
346                 }
347
348                 /* We try to do the mount securely. */
349                 key = afs_request_key(ctx->cell);
350                 if (IS_ERR(key))
351                         return PTR_ERR(key);
352
353                 ctx->key = key;
354
355                 if (ctx->volume) {
356                         afs_put_volume(ctx->cell, ctx->volume);
357                         ctx->volume = NULL;
358                 }
359
360                 volume = afs_create_volume(ctx);
361                 if (IS_ERR(volume))
362                         return PTR_ERR(volume);
363
364                 ctx->volume = volume;
365         }
366
367         return 0;
368 }
369
370 /*
371  * check a superblock to see if it's the one we're looking for
372  */
373 static int afs_test_super(struct super_block *sb, struct fs_context *fc)
374 {
375         struct afs_fs_context *ctx = fc->fs_private;
376         struct afs_super_info *as = AFS_FS_S(sb);
377
378         return (as->net_ns == fc->net_ns &&
379                 as->volume &&
380                 as->volume->vid == ctx->volume->vid &&
381                 !as->dyn_root);
382 }
383
384 static int afs_dynroot_test_super(struct super_block *sb, struct fs_context *fc)
385 {
386         struct afs_super_info *as = AFS_FS_S(sb);
387
388         return (as->net_ns == fc->net_ns &&
389                 as->dyn_root);
390 }
391
392 static int afs_set_super(struct super_block *sb, struct fs_context *fc)
393 {
394         return set_anon_super(sb, NULL);
395 }
396
397 /*
398  * fill in the superblock
399  */
400 static int afs_fill_super(struct super_block *sb, struct afs_fs_context *ctx)
401 {
402         struct afs_super_info *as = AFS_FS_S(sb);
403         struct afs_fid fid;
404         struct inode *inode = NULL;
405         int ret;
406
407         _enter("");
408
409         /* fill in the superblock */
410         sb->s_blocksize         = PAGE_SIZE;
411         sb->s_blocksize_bits    = PAGE_SHIFT;
412         sb->s_magic             = AFS_FS_MAGIC;
413         sb->s_op                = &afs_super_ops;
414         if (!as->dyn_root)
415                 sb->s_xattr     = afs_xattr_handlers;
416         ret = super_setup_bdi(sb);
417         if (ret)
418                 return ret;
419         sb->s_bdi->ra_pages     = VM_READAHEAD_PAGES;
420
421         /* allocate the root inode and dentry */
422         if (as->dyn_root) {
423                 inode = afs_iget_pseudo_dir(sb, true);
424                 sb->s_flags     |= SB_RDONLY;
425         } else {
426                 sprintf(sb->s_id, "%llu", as->volume->vid);
427                 afs_activate_volume(as->volume);
428                 fid.vid         = as->volume->vid;
429                 fid.vnode       = 1;
430                 fid.vnode_hi    = 0;
431                 fid.unique      = 1;
432                 inode = afs_iget(sb, ctx->key, &fid, NULL, NULL, NULL);
433         }
434
435         if (IS_ERR(inode))
436                 return PTR_ERR(inode);
437
438         if (ctx->autocell || as->dyn_root)
439                 set_bit(AFS_VNODE_AUTOCELL, &AFS_FS_I(inode)->flags);
440
441         ret = -ENOMEM;
442         sb->s_root = d_make_root(inode);
443         if (!sb->s_root)
444                 goto error;
445
446         if (as->dyn_root) {
447                 sb->s_d_op = &afs_dynroot_dentry_operations;
448                 ret = afs_dynroot_populate(sb);
449                 if (ret < 0)
450                         goto error;
451         } else {
452                 sb->s_d_op = &afs_fs_dentry_operations;
453         }
454
455         _leave(" = 0");
456         return 0;
457
458 error:
459         _leave(" = %d", ret);
460         return ret;
461 }
462
463 static struct afs_super_info *afs_alloc_sbi(struct fs_context *fc)
464 {
465         struct afs_fs_context *ctx = fc->fs_private;
466         struct afs_super_info *as;
467
468         as = kzalloc(sizeof(struct afs_super_info), GFP_KERNEL);
469         if (as) {
470                 as->net_ns = get_net(fc->net_ns);
471                 if (ctx->dyn_root) {
472                         as->dyn_root = true;
473                 } else {
474                         as->cell = afs_get_cell(ctx->cell);
475                         as->volume = __afs_get_volume(ctx->volume);
476                 }
477         }
478         return as;
479 }
480
481 static void afs_destroy_sbi(struct afs_super_info *as)
482 {
483         if (as) {
484                 afs_put_volume(as->cell, as->volume);
485                 afs_put_cell(afs_net(as->net_ns), as->cell);
486                 put_net(as->net_ns);
487                 kfree(as);
488         }
489 }
490
491 static void afs_kill_super(struct super_block *sb)
492 {
493         struct afs_super_info *as = AFS_FS_S(sb);
494         struct afs_net *net = afs_net(as->net_ns);
495
496         if (as->dyn_root)
497                 afs_dynroot_depopulate(sb);
498
499         /* Clear the callback interests (which will do ilookup5) before
500          * deactivating the superblock.
501          */
502         if (as->volume)
503                 afs_clear_callback_interests(net, as->volume->servers);
504         kill_anon_super(sb);
505         if (as->volume)
506                 afs_deactivate_volume(as->volume);
507         afs_destroy_sbi(as);
508 }
509
510 /*
511  * Get an AFS superblock and root directory.
512  */
513 static int afs_get_tree(struct fs_context *fc)
514 {
515         struct afs_fs_context *ctx = fc->fs_private;
516         struct super_block *sb;
517         struct afs_super_info *as;
518         int ret;
519
520         ret = afs_validate_fc(fc);
521         if (ret)
522                 goto error;
523
524         _enter("");
525
526         /* allocate a superblock info record */
527         ret = -ENOMEM;
528         as = afs_alloc_sbi(fc);
529         if (!as)
530                 goto error;
531         fc->s_fs_info = as;
532
533         /* allocate a deviceless superblock */
534         sb = sget_fc(fc,
535                      as->dyn_root ? afs_dynroot_test_super : afs_test_super,
536                      afs_set_super);
537         if (IS_ERR(sb)) {
538                 ret = PTR_ERR(sb);
539                 goto error;
540         }
541
542         if (!sb->s_root) {
543                 /* initial superblock/root creation */
544                 _debug("create");
545                 ret = afs_fill_super(sb, ctx);
546                 if (ret < 0)
547                         goto error_sb;
548                 sb->s_flags |= SB_ACTIVE;
549         } else {
550                 _debug("reuse");
551                 ASSERTCMP(sb->s_flags, &, SB_ACTIVE);
552         }
553
554         fc->root = dget(sb->s_root);
555         _leave(" = 0 [%p]", sb);
556         return 0;
557
558 error_sb:
559         deactivate_locked_super(sb);
560 error:
561         _leave(" = %d", ret);
562         return ret;
563 }
564
565 static void afs_free_fc(struct fs_context *fc)
566 {
567         struct afs_fs_context *ctx = fc->fs_private;
568
569         afs_destroy_sbi(fc->s_fs_info);
570         afs_put_volume(ctx->cell, ctx->volume);
571         afs_put_cell(ctx->net, ctx->cell);
572         key_put(ctx->key);
573         kfree(ctx);
574 }
575
576 static const struct fs_context_operations afs_context_ops = {
577         .free           = afs_free_fc,
578         .parse_param    = afs_parse_param,
579         .get_tree       = afs_get_tree,
580 };
581
582 /*
583  * Set up the filesystem mount context.
584  */
585 static int afs_init_fs_context(struct fs_context *fc)
586 {
587         struct afs_fs_context *ctx;
588         struct afs_cell *cell;
589
590         ctx = kzalloc(sizeof(struct afs_fs_context), GFP_KERNEL);
591         if (!ctx)
592                 return -ENOMEM;
593
594         ctx->type = AFSVL_ROVOL;
595         ctx->net = afs_net(fc->net_ns);
596
597         /* Default to the workstation cell. */
598         rcu_read_lock();
599         cell = afs_lookup_cell_rcu(ctx->net, NULL, 0);
600         rcu_read_unlock();
601         if (IS_ERR(cell))
602                 cell = NULL;
603         ctx->cell = cell;
604
605         fc->fs_private = ctx;
606         fc->ops = &afs_context_ops;
607         return 0;
608 }
609
610 /*
611  * Initialise an inode cache slab element prior to any use.  Note that
612  * afs_alloc_inode() *must* reset anything that could incorrectly leak from one
613  * inode to another.
614  */
615 static void afs_i_init_once(void *_vnode)
616 {
617         struct afs_vnode *vnode = _vnode;
618
619         memset(vnode, 0, sizeof(*vnode));
620         inode_init_once(&vnode->vfs_inode);
621         mutex_init(&vnode->io_lock);
622         init_rwsem(&vnode->validate_lock);
623         spin_lock_init(&vnode->wb_lock);
624         spin_lock_init(&vnode->lock);
625         INIT_LIST_HEAD(&vnode->wb_keys);
626         INIT_LIST_HEAD(&vnode->pending_locks);
627         INIT_LIST_HEAD(&vnode->granted_locks);
628         INIT_DELAYED_WORK(&vnode->lock_work, afs_lock_work);
629         seqlock_init(&vnode->cb_lock);
630 }
631
632 /*
633  * allocate an AFS inode struct from our slab cache
634  */
635 static struct inode *afs_alloc_inode(struct super_block *sb)
636 {
637         struct afs_vnode *vnode;
638
639         vnode = kmem_cache_alloc(afs_inode_cachep, GFP_KERNEL);
640         if (!vnode)
641                 return NULL;
642
643         atomic_inc(&afs_count_active_inodes);
644
645         /* Reset anything that shouldn't leak from one inode to the next. */
646         memset(&vnode->fid, 0, sizeof(vnode->fid));
647         memset(&vnode->status, 0, sizeof(vnode->status));
648
649         vnode->volume           = NULL;
650         vnode->lock_key         = NULL;
651         vnode->permit_cache     = NULL;
652         vnode->cb_interest      = NULL;
653 #ifdef CONFIG_AFS_FSCACHE
654         vnode->cache            = NULL;
655 #endif
656
657         vnode->flags            = 1 << AFS_VNODE_UNSET;
658         vnode->cb_type          = 0;
659         vnode->lock_state       = AFS_VNODE_LOCK_NONE;
660
661         _leave(" = %p", &vnode->vfs_inode);
662         return &vnode->vfs_inode;
663 }
664
665 static void afs_free_inode(struct inode *inode)
666 {
667         kmem_cache_free(afs_inode_cachep, AFS_FS_I(inode));
668 }
669
670 /*
671  * destroy an AFS inode struct
672  */
673 static void afs_destroy_inode(struct inode *inode)
674 {
675         struct afs_vnode *vnode = AFS_FS_I(inode);
676
677         _enter("%p{%llx:%llu}", inode, vnode->fid.vid, vnode->fid.vnode);
678
679         _debug("DESTROY INODE %p", inode);
680
681         ASSERTCMP(vnode->cb_interest, ==, NULL);
682
683         atomic_dec(&afs_count_active_inodes);
684 }
685
686 /*
687  * return information about an AFS volume
688  */
689 static int afs_statfs(struct dentry *dentry, struct kstatfs *buf)
690 {
691         struct afs_super_info *as = AFS_FS_S(dentry->d_sb);
692         struct afs_fs_cursor fc;
693         struct afs_volume_status vs;
694         struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry));
695         struct key *key;
696         int ret;
697
698         buf->f_type     = dentry->d_sb->s_magic;
699         buf->f_bsize    = AFS_BLOCK_SIZE;
700         buf->f_namelen  = AFSNAMEMAX - 1;
701
702         if (as->dyn_root) {
703                 buf->f_blocks   = 1;
704                 buf->f_bavail   = 0;
705                 buf->f_bfree    = 0;
706                 return 0;
707         }
708
709         key = afs_request_key(vnode->volume->cell);
710         if (IS_ERR(key))
711                 return PTR_ERR(key);
712
713         ret = -ERESTARTSYS;
714         if (afs_begin_vnode_operation(&fc, vnode, key)) {
715                 fc.flags |= AFS_FS_CURSOR_NO_VSLEEP;
716                 while (afs_select_fileserver(&fc)) {
717                         fc.cb_break = afs_calc_vnode_cb_break(vnode);
718                         afs_fs_get_volume_status(&fc, &vs);
719                 }
720
721                 afs_check_for_remote_deletion(&fc, fc.vnode);
722                 afs_vnode_commit_status(&fc, vnode, fc.cb_break);
723                 ret = afs_end_vnode_operation(&fc);
724         }
725
726         key_put(key);
727
728         if (ret == 0) {
729                 if (vs.max_quota == 0)
730                         buf->f_blocks = vs.part_max_blocks;
731                 else
732                         buf->f_blocks = vs.max_quota;
733                 buf->f_bavail = buf->f_bfree = buf->f_blocks - vs.blocks_in_use;
734         }
735
736         return ret;
737 }