1 /* AFS superblock handling 2 * 3 * Copyright (c) 2002, 2007 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/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 struct dentry *afs_mount(struct file_system_type *fs_type, 34 int flags, const char *dev_name, void *data); 35 static void afs_kill_super(struct super_block *sb); 36 static struct inode *afs_alloc_inode(struct super_block *sb); 37 static void afs_destroy_inode(struct inode *inode); 38 static int afs_statfs(struct dentry *dentry, struct kstatfs *buf); 39 static int afs_show_devname(struct seq_file *m, struct dentry *root); 40 static int afs_show_options(struct seq_file *m, struct dentry *root); 41 42 struct file_system_type afs_fs_type = { 43 .owner = THIS_MODULE, 44 .name = "afs", 45 .mount = afs_mount, 46 .kill_sb = afs_kill_super, 47 .fs_flags = 0, 48 }; 49 MODULE_ALIAS_FS("afs"); 50 51 static const struct super_operations afs_super_ops = { 52 .statfs = afs_statfs, 53 .alloc_inode = afs_alloc_inode, 54 .drop_inode = afs_drop_inode, 55 .destroy_inode = afs_destroy_inode, 56 .evict_inode = afs_evict_inode, 57 .show_devname = afs_show_devname, 58 .show_options = afs_show_options, 59 }; 60 61 static struct kmem_cache *afs_inode_cachep; 62 static atomic_t afs_count_active_inodes; 63 64 enum { 65 afs_no_opt, 66 afs_opt_cell, 67 afs_opt_rwpath, 68 afs_opt_vol, 69 afs_opt_autocell, 70 }; 71 72 static const match_table_t afs_options_list = { 73 { afs_opt_cell, "cell=%s" }, 74 { afs_opt_rwpath, "rwpath" }, 75 { afs_opt_vol, "vol=%s" }, 76 { afs_opt_autocell, "autocell" }, 77 { afs_no_opt, NULL }, 78 }; 79 80 /* 81 * initialise the filesystem 82 */ 83 int __init afs_fs_init(void) 84 { 85 int ret; 86 87 _enter(""); 88 89 /* create ourselves an inode cache */ 90 atomic_set(&afs_count_active_inodes, 0); 91 92 ret = -ENOMEM; 93 afs_inode_cachep = kmem_cache_create("afs_inode_cache", 94 sizeof(struct afs_vnode), 95 0, 96 SLAB_HWCACHE_ALIGN|SLAB_ACCOUNT, 97 afs_i_init_once); 98 if (!afs_inode_cachep) { 99 printk(KERN_NOTICE "kAFS: Failed to allocate inode cache\n"); 100 return ret; 101 } 102 103 /* now export our filesystem to lesser mortals */ 104 ret = register_filesystem(&afs_fs_type); 105 if (ret < 0) { 106 kmem_cache_destroy(afs_inode_cachep); 107 _leave(" = %d", ret); 108 return ret; 109 } 110 111 _leave(" = 0"); 112 return 0; 113 } 114 115 /* 116 * clean up the filesystem 117 */ 118 void __exit afs_fs_exit(void) 119 { 120 _enter(""); 121 122 afs_mntpt_kill_timer(); 123 unregister_filesystem(&afs_fs_type); 124 125 if (atomic_read(&afs_count_active_inodes) != 0) { 126 printk("kAFS: %d active inode objects still present\n", 127 atomic_read(&afs_count_active_inodes)); 128 BUG(); 129 } 130 131 /* 132 * Make sure all delayed rcu free inodes are flushed before we 133 * destroy cache. 134 */ 135 rcu_barrier(); 136 kmem_cache_destroy(afs_inode_cachep); 137 _leave(""); 138 } 139 140 /* 141 * Display the mount device name in /proc/mounts. 142 */ 143 static int afs_show_devname(struct seq_file *m, struct dentry *root) 144 { 145 struct afs_super_info *as = AFS_FS_S(root->d_sb); 146 struct afs_volume *volume = as->volume; 147 struct afs_cell *cell = as->cell; 148 const char *suf = ""; 149 char pref = '%'; 150 151 switch (volume->type) { 152 case AFSVL_RWVOL: 153 break; 154 case AFSVL_ROVOL: 155 pref = '#'; 156 if (volume->type_force) 157 suf = ".readonly"; 158 break; 159 case AFSVL_BACKVOL: 160 pref = '#'; 161 suf = ".backup"; 162 break; 163 } 164 165 seq_printf(m, "%c%s:%s%s", pref, cell->name, volume->name, suf); 166 return 0; 167 } 168 169 /* 170 * Display the mount options in /proc/mounts. 171 */ 172 static int afs_show_options(struct seq_file *m, struct dentry *root) 173 { 174 if (test_bit(AFS_VNODE_AUTOCELL, &AFS_FS_I(d_inode(root))->flags)) 175 seq_puts(m, "autocell"); 176 return 0; 177 } 178 179 /* 180 * parse the mount options 181 * - this function has been shamelessly adapted from the ext3 fs which 182 * shamelessly adapted it from the msdos fs 183 */ 184 static int afs_parse_options(struct afs_mount_params *params, 185 char *options, const char **devname) 186 { 187 struct afs_cell *cell; 188 substring_t args[MAX_OPT_ARGS]; 189 char *p; 190 int token; 191 192 _enter("%s", options); 193 194 options[PAGE_SIZE - 1] = 0; 195 196 while ((p = strsep(&options, ","))) { 197 if (!*p) 198 continue; 199 200 token = match_token(p, afs_options_list, args); 201 switch (token) { 202 case afs_opt_cell: 203 rcu_read_lock(); 204 cell = afs_lookup_cell_rcu(params->net, 205 args[0].from, 206 args[0].to - args[0].from); 207 rcu_read_unlock(); 208 if (IS_ERR(cell)) 209 return PTR_ERR(cell); 210 afs_put_cell(params->net, params->cell); 211 params->cell = cell; 212 break; 213 214 case afs_opt_rwpath: 215 params->rwpath = 1; 216 break; 217 218 case afs_opt_vol: 219 *devname = args[0].from; 220 break; 221 222 case afs_opt_autocell: 223 params->autocell = 1; 224 break; 225 226 default: 227 printk(KERN_ERR "kAFS:" 228 " Unknown or invalid mount option: '%s'\n", p); 229 return -EINVAL; 230 } 231 } 232 233 _leave(" = 0"); 234 return 0; 235 } 236 237 /* 238 * parse a device name to get cell name, volume name, volume type and R/W 239 * selector 240 * - this can be one of the following: 241 * "%[cell:]volume[.]" R/W volume 242 * "#[cell:]volume[.]" R/O or R/W volume (rwpath=0), 243 * or R/W (rwpath=1) volume 244 * "%[cell:]volume.readonly" R/O volume 245 * "#[cell:]volume.readonly" R/O volume 246 * "%[cell:]volume.backup" Backup volume 247 * "#[cell:]volume.backup" Backup volume 248 */ 249 static int afs_parse_device_name(struct afs_mount_params *params, 250 const char *name) 251 { 252 struct afs_cell *cell; 253 const char *cellname, *suffix; 254 int cellnamesz; 255 256 _enter(",%s", name); 257 258 if (!name) { 259 printk(KERN_ERR "kAFS: no volume name specified\n"); 260 return -EINVAL; 261 } 262 263 if ((name[0] != '%' && name[0] != '#') || !name[1]) { 264 printk(KERN_ERR "kAFS: unparsable volume name\n"); 265 return -EINVAL; 266 } 267 268 /* determine the type of volume we're looking for */ 269 params->type = AFSVL_ROVOL; 270 params->force = false; 271 if (params->rwpath || name[0] == '%') { 272 params->type = AFSVL_RWVOL; 273 params->force = true; 274 } 275 name++; 276 277 /* split the cell name out if there is one */ 278 params->volname = strchr(name, ':'); 279 if (params->volname) { 280 cellname = name; 281 cellnamesz = params->volname - name; 282 params->volname++; 283 } else { 284 params->volname = name; 285 cellname = NULL; 286 cellnamesz = 0; 287 } 288 289 /* the volume type is further affected by a possible suffix */ 290 suffix = strrchr(params->volname, '.'); 291 if (suffix) { 292 if (strcmp(suffix, ".readonly") == 0) { 293 params->type = AFSVL_ROVOL; 294 params->force = true; 295 } else if (strcmp(suffix, ".backup") == 0) { 296 params->type = AFSVL_BACKVOL; 297 params->force = true; 298 } else if (suffix[1] == 0) { 299 } else { 300 suffix = NULL; 301 } 302 } 303 304 params->volnamesz = suffix ? 305 suffix - params->volname : strlen(params->volname); 306 307 _debug("cell %*.*s [%p]", 308 cellnamesz, cellnamesz, cellname ?: "", params->cell); 309 310 /* lookup the cell record */ 311 if (cellname || !params->cell) { 312 cell = afs_lookup_cell(params->net, cellname, cellnamesz, 313 NULL, false); 314 if (IS_ERR(cell)) { 315 printk(KERN_ERR "kAFS: unable to lookup cell '%*.*s'\n", 316 cellnamesz, cellnamesz, cellname ?: ""); 317 return PTR_ERR(cell); 318 } 319 afs_put_cell(params->net, params->cell); 320 params->cell = cell; 321 } 322 323 _debug("CELL:%s [%p] VOLUME:%*.*s SUFFIX:%s TYPE:%d%s", 324 params->cell->name, params->cell, 325 params->volnamesz, params->volnamesz, params->volname, 326 suffix ?: "-", params->type, params->force ? " FORCE" : ""); 327 328 return 0; 329 } 330 331 /* 332 * check a superblock to see if it's the one we're looking for 333 */ 334 static int afs_test_super(struct super_block *sb, void *data) 335 { 336 struct afs_super_info *as1 = data; 337 struct afs_super_info *as = AFS_FS_S(sb); 338 339 return as->net == as1->net && as->volume->vid == as1->volume->vid; 340 } 341 342 static int afs_set_super(struct super_block *sb, void *data) 343 { 344 struct afs_super_info *as = data; 345 346 sb->s_fs_info = as; 347 return set_anon_super(sb, NULL); 348 } 349 350 /* 351 * fill in the superblock 352 */ 353 static int afs_fill_super(struct super_block *sb, 354 struct afs_mount_params *params) 355 { 356 struct afs_super_info *as = AFS_FS_S(sb); 357 struct afs_fid fid; 358 struct inode *inode = NULL; 359 int ret; 360 361 _enter(""); 362 363 /* fill in the superblock */ 364 sb->s_blocksize = PAGE_SIZE; 365 sb->s_blocksize_bits = PAGE_SHIFT; 366 sb->s_magic = AFS_FS_MAGIC; 367 sb->s_op = &afs_super_ops; 368 sb->s_xattr = afs_xattr_handlers; 369 ret = super_setup_bdi(sb); 370 if (ret) 371 return ret; 372 sb->s_bdi->ra_pages = VM_MAX_READAHEAD * 1024 / PAGE_SIZE; 373 sprintf(sb->s_id, "%u", as->volume->vid); 374 375 afs_activate_volume(as->volume); 376 377 /* allocate the root inode and dentry */ 378 fid.vid = as->volume->vid; 379 fid.vnode = 1; 380 fid.unique = 1; 381 inode = afs_iget(sb, params->key, &fid, NULL, NULL, NULL); 382 if (IS_ERR(inode)) 383 return PTR_ERR(inode); 384 385 if (params->autocell) 386 set_bit(AFS_VNODE_AUTOCELL, &AFS_FS_I(inode)->flags); 387 388 ret = -ENOMEM; 389 sb->s_root = d_make_root(inode); 390 if (!sb->s_root) 391 goto error; 392 393 sb->s_d_op = &afs_fs_dentry_operations; 394 395 _leave(" = 0"); 396 return 0; 397 398 error: 399 _leave(" = %d", ret); 400 return ret; 401 } 402 403 static struct afs_super_info *afs_alloc_sbi(struct afs_mount_params *params) 404 { 405 struct afs_super_info *as; 406 407 as = kzalloc(sizeof(struct afs_super_info), GFP_KERNEL); 408 if (as) { 409 as->net = afs_get_net(params->net); 410 as->cell = afs_get_cell(params->cell); 411 } 412 return as; 413 } 414 415 static void afs_destroy_sbi(struct afs_super_info *as) 416 { 417 if (as) { 418 afs_put_volume(as->cell, as->volume); 419 afs_put_cell(as->net, as->cell); 420 afs_put_net(as->net); 421 kfree(as); 422 } 423 } 424 425 /* 426 * get an AFS superblock 427 */ 428 static struct dentry *afs_mount(struct file_system_type *fs_type, 429 int flags, const char *dev_name, void *options) 430 { 431 struct afs_mount_params params; 432 struct super_block *sb; 433 struct afs_volume *candidate; 434 struct key *key; 435 struct afs_super_info *as; 436 int ret; 437 438 _enter(",,%s,%p", dev_name, options); 439 440 memset(¶ms, 0, sizeof(params)); 441 params.net = &__afs_net; 442 443 ret = -EINVAL; 444 if (current->nsproxy->net_ns != &init_net) 445 goto error; 446 447 /* parse the options and device name */ 448 if (options) { 449 ret = afs_parse_options(¶ms, options, &dev_name); 450 if (ret < 0) 451 goto error; 452 } 453 454 ret = afs_parse_device_name(¶ms, dev_name); 455 if (ret < 0) 456 goto error; 457 458 /* try and do the mount securely */ 459 key = afs_request_key(params.cell); 460 if (IS_ERR(key)) { 461 _leave(" = %ld [key]", PTR_ERR(key)); 462 ret = PTR_ERR(key); 463 goto error; 464 } 465 params.key = key; 466 467 /* allocate a superblock info record */ 468 ret = -ENOMEM; 469 as = afs_alloc_sbi(¶ms); 470 if (!as) 471 goto error_key; 472 473 /* Assume we're going to need a volume record; at the very least we can 474 * use it to update the volume record if we have one already. This 475 * checks that the volume exists within the cell. 476 */ 477 candidate = afs_create_volume(¶ms); 478 if (IS_ERR(candidate)) { 479 ret = PTR_ERR(candidate); 480 goto error_as; 481 } 482 483 as->volume = candidate; 484 485 /* allocate a deviceless superblock */ 486 sb = sget(fs_type, afs_test_super, afs_set_super, flags, as); 487 if (IS_ERR(sb)) { 488 ret = PTR_ERR(sb); 489 goto error_as; 490 } 491 492 if (!sb->s_root) { 493 /* initial superblock/root creation */ 494 _debug("create"); 495 ret = afs_fill_super(sb, ¶ms); 496 if (ret < 0) 497 goto error_sb; 498 as = NULL; 499 sb->s_flags |= SB_ACTIVE; 500 } else { 501 _debug("reuse"); 502 ASSERTCMP(sb->s_flags, &, SB_ACTIVE); 503 afs_destroy_sbi(as); 504 as = NULL; 505 } 506 507 afs_put_cell(params.net, params.cell); 508 key_put(params.key); 509 _leave(" = 0 [%p]", sb); 510 return dget(sb->s_root); 511 512 error_sb: 513 deactivate_locked_super(sb); 514 goto error_key; 515 error_as: 516 afs_destroy_sbi(as); 517 error_key: 518 key_put(params.key); 519 error: 520 afs_put_cell(params.net, params.cell); 521 _leave(" = %d", ret); 522 return ERR_PTR(ret); 523 } 524 525 static void afs_kill_super(struct super_block *sb) 526 { 527 struct afs_super_info *as = AFS_FS_S(sb); 528 529 /* Clear the callback interests (which will do ilookup5) before 530 * deactivating the superblock. 531 */ 532 afs_clear_callback_interests(as->net, as->volume->servers); 533 kill_anon_super(sb); 534 afs_deactivate_volume(as->volume); 535 afs_destroy_sbi(as); 536 } 537 538 /* 539 * Initialise an inode cache slab element prior to any use. Note that 540 * afs_alloc_inode() *must* reset anything that could incorrectly leak from one 541 * inode to another. 542 */ 543 static void afs_i_init_once(void *_vnode) 544 { 545 struct afs_vnode *vnode = _vnode; 546 547 memset(vnode, 0, sizeof(*vnode)); 548 inode_init_once(&vnode->vfs_inode); 549 mutex_init(&vnode->io_lock); 550 mutex_init(&vnode->validate_lock); 551 spin_lock_init(&vnode->wb_lock); 552 spin_lock_init(&vnode->lock); 553 INIT_LIST_HEAD(&vnode->wb_keys); 554 INIT_LIST_HEAD(&vnode->pending_locks); 555 INIT_LIST_HEAD(&vnode->granted_locks); 556 INIT_DELAYED_WORK(&vnode->lock_work, afs_lock_work); 557 seqlock_init(&vnode->cb_lock); 558 } 559 560 /* 561 * allocate an AFS inode struct from our slab cache 562 */ 563 static struct inode *afs_alloc_inode(struct super_block *sb) 564 { 565 struct afs_vnode *vnode; 566 567 vnode = kmem_cache_alloc(afs_inode_cachep, GFP_KERNEL); 568 if (!vnode) 569 return NULL; 570 571 atomic_inc(&afs_count_active_inodes); 572 573 /* Reset anything that shouldn't leak from one inode to the next. */ 574 memset(&vnode->fid, 0, sizeof(vnode->fid)); 575 memset(&vnode->status, 0, sizeof(vnode->status)); 576 577 vnode->volume = NULL; 578 vnode->lock_key = NULL; 579 vnode->permit_cache = NULL; 580 vnode->cb_interest = NULL; 581 #ifdef CONFIG_AFS_FSCACHE 582 vnode->cache = NULL; 583 #endif 584 585 vnode->flags = 1 << AFS_VNODE_UNSET; 586 vnode->cb_type = 0; 587 vnode->lock_state = AFS_VNODE_LOCK_NONE; 588 589 _leave(" = %p", &vnode->vfs_inode); 590 return &vnode->vfs_inode; 591 } 592 593 static void afs_i_callback(struct rcu_head *head) 594 { 595 struct inode *inode = container_of(head, struct inode, i_rcu); 596 struct afs_vnode *vnode = AFS_FS_I(inode); 597 kmem_cache_free(afs_inode_cachep, vnode); 598 } 599 600 /* 601 * destroy an AFS inode struct 602 */ 603 static void afs_destroy_inode(struct inode *inode) 604 { 605 struct afs_vnode *vnode = AFS_FS_I(inode); 606 607 _enter("%p{%x:%u}", inode, vnode->fid.vid, vnode->fid.vnode); 608 609 _debug("DESTROY INODE %p", inode); 610 611 ASSERTCMP(vnode->cb_interest, ==, NULL); 612 613 call_rcu(&inode->i_rcu, afs_i_callback); 614 atomic_dec(&afs_count_active_inodes); 615 } 616 617 /* 618 * return information about an AFS volume 619 */ 620 static int afs_statfs(struct dentry *dentry, struct kstatfs *buf) 621 { 622 struct afs_fs_cursor fc; 623 struct afs_volume_status vs; 624 struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry)); 625 struct key *key; 626 int ret; 627 628 key = afs_request_key(vnode->volume->cell); 629 if (IS_ERR(key)) 630 return PTR_ERR(key); 631 632 ret = -ERESTARTSYS; 633 if (afs_begin_vnode_operation(&fc, vnode, key)) { 634 fc.flags |= AFS_FS_CURSOR_NO_VSLEEP; 635 while (afs_select_fileserver(&fc)) { 636 fc.cb_break = vnode->cb_break + vnode->cb_s_break; 637 afs_fs_get_volume_status(&fc, &vs); 638 } 639 640 afs_check_for_remote_deletion(&fc, fc.vnode); 641 afs_vnode_commit_status(&fc, vnode, fc.cb_break); 642 ret = afs_end_vnode_operation(&fc); 643 } 644 645 key_put(key); 646 647 if (ret == 0) { 648 buf->f_type = dentry->d_sb->s_magic; 649 buf->f_bsize = AFS_BLOCK_SIZE; 650 buf->f_namelen = AFSNAMEMAX - 1; 651 652 if (vs.max_quota == 0) 653 buf->f_blocks = vs.part_max_blocks; 654 else 655 buf->f_blocks = vs.max_quota; 656 buf->f_bavail = buf->f_bfree = buf->f_blocks - vs.blocks_in_use; 657 } 658 659 return ret; 660 } 661