1 /* 2 * linux/fs/super.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 * 6 * super.c contains code to handle: - mount structures 7 * - super-block tables 8 * - filesystem drivers list 9 * - mount system call 10 * - umount system call 11 * - ustat system call 12 * 13 * GK 2/5/95 - Changed to support mounting the root fs via NFS 14 * 15 * Added kerneld support: Jacques Gelinas and Bjorn Ekwall 16 * Added change_root: Werner Almesberger & Hans Lermen, Feb '96 17 * Added options to /proc/mounts: 18 * Torbjörn Lindh (torbjorn.lindh@gopta.se), April 14, 1996. 19 * Added devfs support: Richard Gooch <rgooch@atnf.csiro.au>, 13-JAN-1998 20 * Heavily rewritten for 'one fs - one tree' dcache architecture. AV, Mar 2000 21 */ 22 23 #include <linux/module.h> 24 #include <linux/slab.h> 25 #include <linux/acct.h> 26 #include <linux/blkdev.h> 27 #include <linux/mount.h> 28 #include <linux/security.h> 29 #include <linux/writeback.h> /* for the emergency remount stuff */ 30 #include <linux/idr.h> 31 #include <linux/mutex.h> 32 #include <linux/backing-dev.h> 33 #include <linux/rculist_bl.h> 34 #include "internal.h" 35 36 37 LIST_HEAD(super_blocks); 38 DEFINE_SPINLOCK(sb_lock); 39 40 /** 41 * alloc_super - create new superblock 42 * @type: filesystem type superblock should belong to 43 * 44 * Allocates and initializes a new &struct super_block. alloc_super() 45 * returns a pointer new superblock or %NULL if allocation had failed. 46 */ 47 static struct super_block *alloc_super(struct file_system_type *type) 48 { 49 struct super_block *s = kzalloc(sizeof(struct super_block), GFP_USER); 50 static const struct super_operations default_op; 51 52 if (s) { 53 if (security_sb_alloc(s)) { 54 kfree(s); 55 s = NULL; 56 goto out; 57 } 58 #ifdef CONFIG_SMP 59 s->s_files = alloc_percpu(struct list_head); 60 if (!s->s_files) { 61 security_sb_free(s); 62 kfree(s); 63 s = NULL; 64 goto out; 65 } else { 66 int i; 67 68 for_each_possible_cpu(i) 69 INIT_LIST_HEAD(per_cpu_ptr(s->s_files, i)); 70 } 71 #else 72 INIT_LIST_HEAD(&s->s_files); 73 #endif 74 INIT_LIST_HEAD(&s->s_instances); 75 INIT_HLIST_BL_HEAD(&s->s_anon); 76 INIT_LIST_HEAD(&s->s_inodes); 77 INIT_LIST_HEAD(&s->s_dentry_lru); 78 init_rwsem(&s->s_umount); 79 mutex_init(&s->s_lock); 80 lockdep_set_class(&s->s_umount, &type->s_umount_key); 81 /* 82 * The locking rules for s_lock are up to the 83 * filesystem. For example ext3fs has different 84 * lock ordering than usbfs: 85 */ 86 lockdep_set_class(&s->s_lock, &type->s_lock_key); 87 /* 88 * sget() can have s_umount recursion. 89 * 90 * When it cannot find a suitable sb, it allocates a new 91 * one (this one), and tries again to find a suitable old 92 * one. 93 * 94 * In case that succeeds, it will acquire the s_umount 95 * lock of the old one. Since these are clearly distrinct 96 * locks, and this object isn't exposed yet, there's no 97 * risk of deadlocks. 98 * 99 * Annotate this by putting this lock in a different 100 * subclass. 101 */ 102 down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING); 103 s->s_count = 1; 104 atomic_set(&s->s_active, 1); 105 mutex_init(&s->s_vfs_rename_mutex); 106 lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key); 107 mutex_init(&s->s_dquot.dqio_mutex); 108 mutex_init(&s->s_dquot.dqonoff_mutex); 109 init_rwsem(&s->s_dquot.dqptr_sem); 110 init_waitqueue_head(&s->s_wait_unfrozen); 111 s->s_maxbytes = MAX_NON_LFS; 112 s->s_op = &default_op; 113 s->s_time_gran = 1000000000; 114 } 115 out: 116 return s; 117 } 118 119 /** 120 * destroy_super - frees a superblock 121 * @s: superblock to free 122 * 123 * Frees a superblock. 124 */ 125 static inline void destroy_super(struct super_block *s) 126 { 127 #ifdef CONFIG_SMP 128 free_percpu(s->s_files); 129 #endif 130 security_sb_free(s); 131 kfree(s->s_subtype); 132 kfree(s->s_options); 133 kfree(s); 134 } 135 136 /* Superblock refcounting */ 137 138 /* 139 * Drop a superblock's refcount. The caller must hold sb_lock. 140 */ 141 void __put_super(struct super_block *sb) 142 { 143 if (!--sb->s_count) { 144 list_del_init(&sb->s_list); 145 destroy_super(sb); 146 } 147 } 148 149 /** 150 * put_super - drop a temporary reference to superblock 151 * @sb: superblock in question 152 * 153 * Drops a temporary reference, frees superblock if there's no 154 * references left. 155 */ 156 void put_super(struct super_block *sb) 157 { 158 spin_lock(&sb_lock); 159 __put_super(sb); 160 spin_unlock(&sb_lock); 161 } 162 163 164 /** 165 * deactivate_locked_super - drop an active reference to superblock 166 * @s: superblock to deactivate 167 * 168 * Drops an active reference to superblock, converting it into a temprory 169 * one if there is no other active references left. In that case we 170 * tell fs driver to shut it down and drop the temporary reference we 171 * had just acquired. 172 * 173 * Caller holds exclusive lock on superblock; that lock is released. 174 */ 175 void deactivate_locked_super(struct super_block *s) 176 { 177 struct file_system_type *fs = s->s_type; 178 if (atomic_dec_and_test(&s->s_active)) { 179 fs->kill_sb(s); 180 /* 181 * We need to call rcu_barrier so all the delayed rcu free 182 * inodes are flushed before we release the fs module. 183 */ 184 rcu_barrier(); 185 put_filesystem(fs); 186 put_super(s); 187 } else { 188 up_write(&s->s_umount); 189 } 190 } 191 192 EXPORT_SYMBOL(deactivate_locked_super); 193 194 /** 195 * deactivate_super - drop an active reference to superblock 196 * @s: superblock to deactivate 197 * 198 * Variant of deactivate_locked_super(), except that superblock is *not* 199 * locked by caller. If we are going to drop the final active reference, 200 * lock will be acquired prior to that. 201 */ 202 void deactivate_super(struct super_block *s) 203 { 204 if (!atomic_add_unless(&s->s_active, -1, 1)) { 205 down_write(&s->s_umount); 206 deactivate_locked_super(s); 207 } 208 } 209 210 EXPORT_SYMBOL(deactivate_super); 211 212 /** 213 * grab_super - acquire an active reference 214 * @s: reference we are trying to make active 215 * 216 * Tries to acquire an active reference. grab_super() is used when we 217 * had just found a superblock in super_blocks or fs_type->fs_supers 218 * and want to turn it into a full-blown active reference. grab_super() 219 * is called with sb_lock held and drops it. Returns 1 in case of 220 * success, 0 if we had failed (superblock contents was already dead or 221 * dying when grab_super() had been called). 222 */ 223 static int grab_super(struct super_block *s) __releases(sb_lock) 224 { 225 if (atomic_inc_not_zero(&s->s_active)) { 226 spin_unlock(&sb_lock); 227 return 1; 228 } 229 /* it's going away */ 230 s->s_count++; 231 spin_unlock(&sb_lock); 232 /* wait for it to die */ 233 down_write(&s->s_umount); 234 up_write(&s->s_umount); 235 put_super(s); 236 return 0; 237 } 238 239 /* 240 * Superblock locking. We really ought to get rid of these two. 241 */ 242 void lock_super(struct super_block * sb) 243 { 244 get_fs_excl(); 245 mutex_lock(&sb->s_lock); 246 } 247 248 void unlock_super(struct super_block * sb) 249 { 250 put_fs_excl(); 251 mutex_unlock(&sb->s_lock); 252 } 253 254 EXPORT_SYMBOL(lock_super); 255 EXPORT_SYMBOL(unlock_super); 256 257 /** 258 * generic_shutdown_super - common helper for ->kill_sb() 259 * @sb: superblock to kill 260 * 261 * generic_shutdown_super() does all fs-independent work on superblock 262 * shutdown. Typical ->kill_sb() should pick all fs-specific objects 263 * that need destruction out of superblock, call generic_shutdown_super() 264 * and release aforementioned objects. Note: dentries and inodes _are_ 265 * taken care of and do not need specific handling. 266 * 267 * Upon calling this function, the filesystem may no longer alter or 268 * rearrange the set of dentries belonging to this super_block, nor may it 269 * change the attachments of dentries to inodes. 270 */ 271 void generic_shutdown_super(struct super_block *sb) 272 { 273 const struct super_operations *sop = sb->s_op; 274 275 276 if (sb->s_root) { 277 shrink_dcache_for_umount(sb); 278 sync_filesystem(sb); 279 get_fs_excl(); 280 sb->s_flags &= ~MS_ACTIVE; 281 282 fsnotify_unmount_inodes(&sb->s_inodes); 283 284 evict_inodes(sb); 285 286 if (sop->put_super) 287 sop->put_super(sb); 288 289 if (!list_empty(&sb->s_inodes)) { 290 printk("VFS: Busy inodes after unmount of %s. " 291 "Self-destruct in 5 seconds. Have a nice day...\n", 292 sb->s_id); 293 } 294 put_fs_excl(); 295 } 296 spin_lock(&sb_lock); 297 /* should be initialized for __put_super_and_need_restart() */ 298 list_del_init(&sb->s_instances); 299 spin_unlock(&sb_lock); 300 up_write(&sb->s_umount); 301 } 302 303 EXPORT_SYMBOL(generic_shutdown_super); 304 305 /** 306 * sget - find or create a superblock 307 * @type: filesystem type superblock should belong to 308 * @test: comparison callback 309 * @set: setup callback 310 * @data: argument to each of them 311 */ 312 struct super_block *sget(struct file_system_type *type, 313 int (*test)(struct super_block *,void *), 314 int (*set)(struct super_block *,void *), 315 void *data) 316 { 317 struct super_block *s = NULL; 318 struct super_block *old; 319 int err; 320 321 retry: 322 spin_lock(&sb_lock); 323 if (test) { 324 list_for_each_entry(old, &type->fs_supers, s_instances) { 325 if (!test(old, data)) 326 continue; 327 if (!grab_super(old)) 328 goto retry; 329 if (s) { 330 up_write(&s->s_umount); 331 destroy_super(s); 332 s = NULL; 333 } 334 down_write(&old->s_umount); 335 if (unlikely(!(old->s_flags & MS_BORN))) { 336 deactivate_locked_super(old); 337 goto retry; 338 } 339 return old; 340 } 341 } 342 if (!s) { 343 spin_unlock(&sb_lock); 344 s = alloc_super(type); 345 if (!s) 346 return ERR_PTR(-ENOMEM); 347 goto retry; 348 } 349 350 err = set(s, data); 351 if (err) { 352 spin_unlock(&sb_lock); 353 up_write(&s->s_umount); 354 destroy_super(s); 355 return ERR_PTR(err); 356 } 357 s->s_type = type; 358 strlcpy(s->s_id, type->name, sizeof(s->s_id)); 359 list_add_tail(&s->s_list, &super_blocks); 360 list_add(&s->s_instances, &type->fs_supers); 361 spin_unlock(&sb_lock); 362 get_filesystem(type); 363 return s; 364 } 365 366 EXPORT_SYMBOL(sget); 367 368 void drop_super(struct super_block *sb) 369 { 370 up_read(&sb->s_umount); 371 put_super(sb); 372 } 373 374 EXPORT_SYMBOL(drop_super); 375 376 /** 377 * sync_supers - helper for periodic superblock writeback 378 * 379 * Call the write_super method if present on all dirty superblocks in 380 * the system. This is for the periodic writeback used by most older 381 * filesystems. For data integrity superblock writeback use 382 * sync_filesystems() instead. 383 * 384 * Note: check the dirty flag before waiting, so we don't 385 * hold up the sync while mounting a device. (The newly 386 * mounted device won't need syncing.) 387 */ 388 void sync_supers(void) 389 { 390 struct super_block *sb, *p = NULL; 391 392 spin_lock(&sb_lock); 393 list_for_each_entry(sb, &super_blocks, s_list) { 394 if (list_empty(&sb->s_instances)) 395 continue; 396 if (sb->s_op->write_super && sb->s_dirt) { 397 sb->s_count++; 398 spin_unlock(&sb_lock); 399 400 down_read(&sb->s_umount); 401 if (sb->s_root && sb->s_dirt) 402 sb->s_op->write_super(sb); 403 up_read(&sb->s_umount); 404 405 spin_lock(&sb_lock); 406 if (p) 407 __put_super(p); 408 p = sb; 409 } 410 } 411 if (p) 412 __put_super(p); 413 spin_unlock(&sb_lock); 414 } 415 416 /** 417 * iterate_supers - call function for all active superblocks 418 * @f: function to call 419 * @arg: argument to pass to it 420 * 421 * Scans the superblock list and calls given function, passing it 422 * locked superblock and given argument. 423 */ 424 void iterate_supers(void (*f)(struct super_block *, void *), void *arg) 425 { 426 struct super_block *sb, *p = NULL; 427 428 spin_lock(&sb_lock); 429 list_for_each_entry(sb, &super_blocks, s_list) { 430 if (list_empty(&sb->s_instances)) 431 continue; 432 sb->s_count++; 433 spin_unlock(&sb_lock); 434 435 down_read(&sb->s_umount); 436 if (sb->s_root) 437 f(sb, arg); 438 up_read(&sb->s_umount); 439 440 spin_lock(&sb_lock); 441 if (p) 442 __put_super(p); 443 p = sb; 444 } 445 if (p) 446 __put_super(p); 447 spin_unlock(&sb_lock); 448 } 449 450 /** 451 * get_super - get the superblock of a device 452 * @bdev: device to get the superblock for 453 * 454 * Scans the superblock list and finds the superblock of the file system 455 * mounted on the device given. %NULL is returned if no match is found. 456 */ 457 458 struct super_block *get_super(struct block_device *bdev) 459 { 460 struct super_block *sb; 461 462 if (!bdev) 463 return NULL; 464 465 spin_lock(&sb_lock); 466 rescan: 467 list_for_each_entry(sb, &super_blocks, s_list) { 468 if (list_empty(&sb->s_instances)) 469 continue; 470 if (sb->s_bdev == bdev) { 471 sb->s_count++; 472 spin_unlock(&sb_lock); 473 down_read(&sb->s_umount); 474 /* still alive? */ 475 if (sb->s_root) 476 return sb; 477 up_read(&sb->s_umount); 478 /* nope, got unmounted */ 479 spin_lock(&sb_lock); 480 __put_super(sb); 481 goto rescan; 482 } 483 } 484 spin_unlock(&sb_lock); 485 return NULL; 486 } 487 488 EXPORT_SYMBOL(get_super); 489 490 /** 491 * get_active_super - get an active reference to the superblock of a device 492 * @bdev: device to get the superblock for 493 * 494 * Scans the superblock list and finds the superblock of the file system 495 * mounted on the device given. Returns the superblock with an active 496 * reference or %NULL if none was found. 497 */ 498 struct super_block *get_active_super(struct block_device *bdev) 499 { 500 struct super_block *sb; 501 502 if (!bdev) 503 return NULL; 504 505 restart: 506 spin_lock(&sb_lock); 507 list_for_each_entry(sb, &super_blocks, s_list) { 508 if (list_empty(&sb->s_instances)) 509 continue; 510 if (sb->s_bdev == bdev) { 511 if (grab_super(sb)) /* drops sb_lock */ 512 return sb; 513 else 514 goto restart; 515 } 516 } 517 spin_unlock(&sb_lock); 518 return NULL; 519 } 520 521 struct super_block *user_get_super(dev_t dev) 522 { 523 struct super_block *sb; 524 525 spin_lock(&sb_lock); 526 rescan: 527 list_for_each_entry(sb, &super_blocks, s_list) { 528 if (list_empty(&sb->s_instances)) 529 continue; 530 if (sb->s_dev == dev) { 531 sb->s_count++; 532 spin_unlock(&sb_lock); 533 down_read(&sb->s_umount); 534 /* still alive? */ 535 if (sb->s_root) 536 return sb; 537 up_read(&sb->s_umount); 538 /* nope, got unmounted */ 539 spin_lock(&sb_lock); 540 __put_super(sb); 541 goto rescan; 542 } 543 } 544 spin_unlock(&sb_lock); 545 return NULL; 546 } 547 548 /** 549 * do_remount_sb - asks filesystem to change mount options. 550 * @sb: superblock in question 551 * @flags: numeric part of options 552 * @data: the rest of options 553 * @force: whether or not to force the change 554 * 555 * Alters the mount options of a mounted file system. 556 */ 557 int do_remount_sb(struct super_block *sb, int flags, void *data, int force) 558 { 559 int retval; 560 int remount_ro; 561 562 if (sb->s_frozen != SB_UNFROZEN) 563 return -EBUSY; 564 565 #ifdef CONFIG_BLOCK 566 if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev)) 567 return -EACCES; 568 #endif 569 570 if (flags & MS_RDONLY) 571 acct_auto_close(sb); 572 shrink_dcache_sb(sb); 573 sync_filesystem(sb); 574 575 remount_ro = (flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY); 576 577 /* If we are remounting RDONLY and current sb is read/write, 578 make sure there are no rw files opened */ 579 if (remount_ro) { 580 if (force) 581 mark_files_ro(sb); 582 else if (!fs_may_remount_ro(sb)) 583 return -EBUSY; 584 } 585 586 if (sb->s_op->remount_fs) { 587 retval = sb->s_op->remount_fs(sb, &flags, data); 588 if (retval) 589 return retval; 590 } 591 sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK); 592 593 /* 594 * Some filesystems modify their metadata via some other path than the 595 * bdev buffer cache (eg. use a private mapping, or directories in 596 * pagecache, etc). Also file data modifications go via their own 597 * mappings. So If we try to mount readonly then copy the filesystem 598 * from bdev, we could get stale data, so invalidate it to give a best 599 * effort at coherency. 600 */ 601 if (remount_ro && sb->s_bdev) 602 invalidate_bdev(sb->s_bdev); 603 return 0; 604 } 605 606 static void do_emergency_remount(struct work_struct *work) 607 { 608 struct super_block *sb, *p = NULL; 609 610 spin_lock(&sb_lock); 611 list_for_each_entry(sb, &super_blocks, s_list) { 612 if (list_empty(&sb->s_instances)) 613 continue; 614 sb->s_count++; 615 spin_unlock(&sb_lock); 616 down_write(&sb->s_umount); 617 if (sb->s_root && sb->s_bdev && !(sb->s_flags & MS_RDONLY)) { 618 /* 619 * What lock protects sb->s_flags?? 620 */ 621 do_remount_sb(sb, MS_RDONLY, NULL, 1); 622 } 623 up_write(&sb->s_umount); 624 spin_lock(&sb_lock); 625 if (p) 626 __put_super(p); 627 p = sb; 628 } 629 if (p) 630 __put_super(p); 631 spin_unlock(&sb_lock); 632 kfree(work); 633 printk("Emergency Remount complete\n"); 634 } 635 636 void emergency_remount(void) 637 { 638 struct work_struct *work; 639 640 work = kmalloc(sizeof(*work), GFP_ATOMIC); 641 if (work) { 642 INIT_WORK(work, do_emergency_remount); 643 schedule_work(work); 644 } 645 } 646 647 /* 648 * Unnamed block devices are dummy devices used by virtual 649 * filesystems which don't use real block-devices. -- jrs 650 */ 651 652 static DEFINE_IDA(unnamed_dev_ida); 653 static DEFINE_SPINLOCK(unnamed_dev_lock);/* protects the above */ 654 static int unnamed_dev_start = 0; /* don't bother trying below it */ 655 656 int set_anon_super(struct super_block *s, void *data) 657 { 658 int dev; 659 int error; 660 661 retry: 662 if (ida_pre_get(&unnamed_dev_ida, GFP_ATOMIC) == 0) 663 return -ENOMEM; 664 spin_lock(&unnamed_dev_lock); 665 error = ida_get_new_above(&unnamed_dev_ida, unnamed_dev_start, &dev); 666 if (!error) 667 unnamed_dev_start = dev + 1; 668 spin_unlock(&unnamed_dev_lock); 669 if (error == -EAGAIN) 670 /* We raced and lost with another CPU. */ 671 goto retry; 672 else if (error) 673 return -EAGAIN; 674 675 if ((dev & MAX_ID_MASK) == (1 << MINORBITS)) { 676 spin_lock(&unnamed_dev_lock); 677 ida_remove(&unnamed_dev_ida, dev); 678 if (unnamed_dev_start > dev) 679 unnamed_dev_start = dev; 680 spin_unlock(&unnamed_dev_lock); 681 return -EMFILE; 682 } 683 s->s_dev = MKDEV(0, dev & MINORMASK); 684 s->s_bdi = &noop_backing_dev_info; 685 return 0; 686 } 687 688 EXPORT_SYMBOL(set_anon_super); 689 690 void kill_anon_super(struct super_block *sb) 691 { 692 int slot = MINOR(sb->s_dev); 693 694 generic_shutdown_super(sb); 695 spin_lock(&unnamed_dev_lock); 696 ida_remove(&unnamed_dev_ida, slot); 697 if (slot < unnamed_dev_start) 698 unnamed_dev_start = slot; 699 spin_unlock(&unnamed_dev_lock); 700 } 701 702 EXPORT_SYMBOL(kill_anon_super); 703 704 void kill_litter_super(struct super_block *sb) 705 { 706 if (sb->s_root) 707 d_genocide(sb->s_root); 708 kill_anon_super(sb); 709 } 710 711 EXPORT_SYMBOL(kill_litter_super); 712 713 static int ns_test_super(struct super_block *sb, void *data) 714 { 715 return sb->s_fs_info == data; 716 } 717 718 static int ns_set_super(struct super_block *sb, void *data) 719 { 720 sb->s_fs_info = data; 721 return set_anon_super(sb, NULL); 722 } 723 724 struct dentry *mount_ns(struct file_system_type *fs_type, int flags, 725 void *data, int (*fill_super)(struct super_block *, void *, int)) 726 { 727 struct super_block *sb; 728 729 sb = sget(fs_type, ns_test_super, ns_set_super, data); 730 if (IS_ERR(sb)) 731 return ERR_CAST(sb); 732 733 if (!sb->s_root) { 734 int err; 735 sb->s_flags = flags; 736 err = fill_super(sb, data, flags & MS_SILENT ? 1 : 0); 737 if (err) { 738 deactivate_locked_super(sb); 739 return ERR_PTR(err); 740 } 741 742 sb->s_flags |= MS_ACTIVE; 743 } 744 745 return dget(sb->s_root); 746 } 747 748 EXPORT_SYMBOL(mount_ns); 749 750 #ifdef CONFIG_BLOCK 751 static int set_bdev_super(struct super_block *s, void *data) 752 { 753 s->s_bdev = data; 754 s->s_dev = s->s_bdev->bd_dev; 755 756 /* 757 * We set the bdi here to the queue backing, file systems can 758 * overwrite this in ->fill_super() 759 */ 760 s->s_bdi = &bdev_get_queue(s->s_bdev)->backing_dev_info; 761 return 0; 762 } 763 764 static int test_bdev_super(struct super_block *s, void *data) 765 { 766 return (void *)s->s_bdev == data; 767 } 768 769 struct dentry *mount_bdev(struct file_system_type *fs_type, 770 int flags, const char *dev_name, void *data, 771 int (*fill_super)(struct super_block *, void *, int)) 772 { 773 struct block_device *bdev; 774 struct super_block *s; 775 fmode_t mode = FMODE_READ | FMODE_EXCL; 776 int error = 0; 777 778 if (!(flags & MS_RDONLY)) 779 mode |= FMODE_WRITE; 780 781 bdev = blkdev_get_by_path(dev_name, mode, fs_type); 782 if (IS_ERR(bdev)) 783 return ERR_CAST(bdev); 784 785 /* 786 * once the super is inserted into the list by sget, s_umount 787 * will protect the lockfs code from trying to start a snapshot 788 * while we are mounting 789 */ 790 mutex_lock(&bdev->bd_fsfreeze_mutex); 791 if (bdev->bd_fsfreeze_count > 0) { 792 mutex_unlock(&bdev->bd_fsfreeze_mutex); 793 error = -EBUSY; 794 goto error_bdev; 795 } 796 s = sget(fs_type, test_bdev_super, set_bdev_super, bdev); 797 mutex_unlock(&bdev->bd_fsfreeze_mutex); 798 if (IS_ERR(s)) 799 goto error_s; 800 801 if (s->s_root) { 802 if ((flags ^ s->s_flags) & MS_RDONLY) { 803 deactivate_locked_super(s); 804 error = -EBUSY; 805 goto error_bdev; 806 } 807 808 /* 809 * s_umount nests inside bd_mutex during 810 * __invalidate_device(). blkdev_put() acquires 811 * bd_mutex and can't be called under s_umount. Drop 812 * s_umount temporarily. This is safe as we're 813 * holding an active reference. 814 */ 815 up_write(&s->s_umount); 816 blkdev_put(bdev, mode); 817 down_write(&s->s_umount); 818 } else { 819 char b[BDEVNAME_SIZE]; 820 821 s->s_flags = flags; 822 s->s_mode = mode; 823 strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id)); 824 sb_set_blocksize(s, block_size(bdev)); 825 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); 826 if (error) { 827 deactivate_locked_super(s); 828 goto error; 829 } 830 831 s->s_flags |= MS_ACTIVE; 832 bdev->bd_super = s; 833 } 834 835 return dget(s->s_root); 836 837 error_s: 838 error = PTR_ERR(s); 839 error_bdev: 840 blkdev_put(bdev, mode); 841 error: 842 return ERR_PTR(error); 843 } 844 EXPORT_SYMBOL(mount_bdev); 845 846 int get_sb_bdev(struct file_system_type *fs_type, 847 int flags, const char *dev_name, void *data, 848 int (*fill_super)(struct super_block *, void *, int), 849 struct vfsmount *mnt) 850 { 851 struct dentry *root; 852 853 root = mount_bdev(fs_type, flags, dev_name, data, fill_super); 854 if (IS_ERR(root)) 855 return PTR_ERR(root); 856 mnt->mnt_root = root; 857 mnt->mnt_sb = root->d_sb; 858 return 0; 859 } 860 861 EXPORT_SYMBOL(get_sb_bdev); 862 863 void kill_block_super(struct super_block *sb) 864 { 865 struct block_device *bdev = sb->s_bdev; 866 fmode_t mode = sb->s_mode; 867 868 bdev->bd_super = NULL; 869 generic_shutdown_super(sb); 870 sync_blockdev(bdev); 871 WARN_ON_ONCE(!(mode & FMODE_EXCL)); 872 blkdev_put(bdev, mode | FMODE_EXCL); 873 } 874 875 EXPORT_SYMBOL(kill_block_super); 876 #endif 877 878 struct dentry *mount_nodev(struct file_system_type *fs_type, 879 int flags, void *data, 880 int (*fill_super)(struct super_block *, void *, int)) 881 { 882 int error; 883 struct super_block *s = sget(fs_type, NULL, set_anon_super, NULL); 884 885 if (IS_ERR(s)) 886 return ERR_CAST(s); 887 888 s->s_flags = flags; 889 890 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); 891 if (error) { 892 deactivate_locked_super(s); 893 return ERR_PTR(error); 894 } 895 s->s_flags |= MS_ACTIVE; 896 return dget(s->s_root); 897 } 898 EXPORT_SYMBOL(mount_nodev); 899 900 int get_sb_nodev(struct file_system_type *fs_type, 901 int flags, void *data, 902 int (*fill_super)(struct super_block *, void *, int), 903 struct vfsmount *mnt) 904 { 905 struct dentry *root; 906 907 root = mount_nodev(fs_type, flags, data, fill_super); 908 if (IS_ERR(root)) 909 return PTR_ERR(root); 910 mnt->mnt_root = root; 911 mnt->mnt_sb = root->d_sb; 912 return 0; 913 } 914 EXPORT_SYMBOL(get_sb_nodev); 915 916 static int compare_single(struct super_block *s, void *p) 917 { 918 return 1; 919 } 920 921 struct dentry *mount_single(struct file_system_type *fs_type, 922 int flags, void *data, 923 int (*fill_super)(struct super_block *, void *, int)) 924 { 925 struct super_block *s; 926 int error; 927 928 s = sget(fs_type, compare_single, set_anon_super, NULL); 929 if (IS_ERR(s)) 930 return ERR_CAST(s); 931 if (!s->s_root) { 932 s->s_flags = flags; 933 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); 934 if (error) { 935 deactivate_locked_super(s); 936 return ERR_PTR(error); 937 } 938 s->s_flags |= MS_ACTIVE; 939 } else { 940 do_remount_sb(s, flags, data, 0); 941 } 942 return dget(s->s_root); 943 } 944 EXPORT_SYMBOL(mount_single); 945 946 int get_sb_single(struct file_system_type *fs_type, 947 int flags, void *data, 948 int (*fill_super)(struct super_block *, void *, int), 949 struct vfsmount *mnt) 950 { 951 struct dentry *root; 952 root = mount_single(fs_type, flags, data, fill_super); 953 if (IS_ERR(root)) 954 return PTR_ERR(root); 955 mnt->mnt_root = root; 956 mnt->mnt_sb = root->d_sb; 957 return 0; 958 } 959 960 EXPORT_SYMBOL(get_sb_single); 961 962 struct vfsmount * 963 vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void *data) 964 { 965 struct vfsmount *mnt; 966 struct dentry *root; 967 char *secdata = NULL; 968 int error; 969 970 if (!type) 971 return ERR_PTR(-ENODEV); 972 973 error = -ENOMEM; 974 mnt = alloc_vfsmnt(name); 975 if (!mnt) 976 goto out; 977 978 if (flags & MS_KERNMOUNT) 979 mnt->mnt_flags = MNT_INTERNAL; 980 981 if (data && !(type->fs_flags & FS_BINARY_MOUNTDATA)) { 982 secdata = alloc_secdata(); 983 if (!secdata) 984 goto out_mnt; 985 986 error = security_sb_copy_data(data, secdata); 987 if (error) 988 goto out_free_secdata; 989 } 990 991 if (type->mount) { 992 root = type->mount(type, flags, name, data); 993 if (IS_ERR(root)) { 994 error = PTR_ERR(root); 995 goto out_free_secdata; 996 } 997 mnt->mnt_root = root; 998 mnt->mnt_sb = root->d_sb; 999 } else { 1000 error = type->get_sb(type, flags, name, data, mnt); 1001 if (error < 0) 1002 goto out_free_secdata; 1003 } 1004 BUG_ON(!mnt->mnt_sb); 1005 WARN_ON(!mnt->mnt_sb->s_bdi); 1006 mnt->mnt_sb->s_flags |= MS_BORN; 1007 1008 error = security_sb_kern_mount(mnt->mnt_sb, flags, secdata); 1009 if (error) 1010 goto out_sb; 1011 1012 /* 1013 * filesystems should never set s_maxbytes larger than MAX_LFS_FILESIZE 1014 * but s_maxbytes was an unsigned long long for many releases. Throw 1015 * this warning for a little while to try and catch filesystems that 1016 * violate this rule. This warning should be either removed or 1017 * converted to a BUG() in 2.6.34. 1018 */ 1019 WARN((mnt->mnt_sb->s_maxbytes < 0), "%s set sb->s_maxbytes to " 1020 "negative value (%lld)\n", type->name, mnt->mnt_sb->s_maxbytes); 1021 1022 mnt->mnt_mountpoint = mnt->mnt_root; 1023 mnt->mnt_parent = mnt; 1024 up_write(&mnt->mnt_sb->s_umount); 1025 free_secdata(secdata); 1026 return mnt; 1027 out_sb: 1028 dput(mnt->mnt_root); 1029 deactivate_locked_super(mnt->mnt_sb); 1030 out_free_secdata: 1031 free_secdata(secdata); 1032 out_mnt: 1033 free_vfsmnt(mnt); 1034 out: 1035 return ERR_PTR(error); 1036 } 1037 1038 EXPORT_SYMBOL_GPL(vfs_kern_mount); 1039 1040 /** 1041 * freeze_super - lock the filesystem and force it into a consistent state 1042 * @sb: the super to lock 1043 * 1044 * Syncs the super to make sure the filesystem is consistent and calls the fs's 1045 * freeze_fs. Subsequent calls to this without first thawing the fs will return 1046 * -EBUSY. 1047 */ 1048 int freeze_super(struct super_block *sb) 1049 { 1050 int ret; 1051 1052 atomic_inc(&sb->s_active); 1053 down_write(&sb->s_umount); 1054 if (sb->s_frozen) { 1055 deactivate_locked_super(sb); 1056 return -EBUSY; 1057 } 1058 1059 if (sb->s_flags & MS_RDONLY) { 1060 sb->s_frozen = SB_FREEZE_TRANS; 1061 smp_wmb(); 1062 up_write(&sb->s_umount); 1063 return 0; 1064 } 1065 1066 sb->s_frozen = SB_FREEZE_WRITE; 1067 smp_wmb(); 1068 1069 sync_filesystem(sb); 1070 1071 sb->s_frozen = SB_FREEZE_TRANS; 1072 smp_wmb(); 1073 1074 sync_blockdev(sb->s_bdev); 1075 if (sb->s_op->freeze_fs) { 1076 ret = sb->s_op->freeze_fs(sb); 1077 if (ret) { 1078 printk(KERN_ERR 1079 "VFS:Filesystem freeze failed\n"); 1080 sb->s_frozen = SB_UNFROZEN; 1081 deactivate_locked_super(sb); 1082 return ret; 1083 } 1084 } 1085 up_write(&sb->s_umount); 1086 return 0; 1087 } 1088 EXPORT_SYMBOL(freeze_super); 1089 1090 /** 1091 * thaw_super -- unlock filesystem 1092 * @sb: the super to thaw 1093 * 1094 * Unlocks the filesystem and marks it writeable again after freeze_super(). 1095 */ 1096 int thaw_super(struct super_block *sb) 1097 { 1098 int error; 1099 1100 down_write(&sb->s_umount); 1101 if (sb->s_frozen == SB_UNFROZEN) { 1102 up_write(&sb->s_umount); 1103 return -EINVAL; 1104 } 1105 1106 if (sb->s_flags & MS_RDONLY) 1107 goto out; 1108 1109 if (sb->s_op->unfreeze_fs) { 1110 error = sb->s_op->unfreeze_fs(sb); 1111 if (error) { 1112 printk(KERN_ERR 1113 "VFS:Filesystem thaw failed\n"); 1114 sb->s_frozen = SB_FREEZE_TRANS; 1115 up_write(&sb->s_umount); 1116 return error; 1117 } 1118 } 1119 1120 out: 1121 sb->s_frozen = SB_UNFROZEN; 1122 smp_wmb(); 1123 wake_up(&sb->s_wait_unfrozen); 1124 deactivate_locked_super(sb); 1125 1126 return 0; 1127 } 1128 EXPORT_SYMBOL(thaw_super); 1129 1130 static struct vfsmount *fs_set_subtype(struct vfsmount *mnt, const char *fstype) 1131 { 1132 int err; 1133 const char *subtype = strchr(fstype, '.'); 1134 if (subtype) { 1135 subtype++; 1136 err = -EINVAL; 1137 if (!subtype[0]) 1138 goto err; 1139 } else 1140 subtype = ""; 1141 1142 mnt->mnt_sb->s_subtype = kstrdup(subtype, GFP_KERNEL); 1143 err = -ENOMEM; 1144 if (!mnt->mnt_sb->s_subtype) 1145 goto err; 1146 return mnt; 1147 1148 err: 1149 mntput(mnt); 1150 return ERR_PTR(err); 1151 } 1152 1153 struct vfsmount * 1154 do_kern_mount(const char *fstype, int flags, const char *name, void *data) 1155 { 1156 struct file_system_type *type = get_fs_type(fstype); 1157 struct vfsmount *mnt; 1158 if (!type) 1159 return ERR_PTR(-ENODEV); 1160 mnt = vfs_kern_mount(type, flags, name, data); 1161 if (!IS_ERR(mnt) && (type->fs_flags & FS_HAS_SUBTYPE) && 1162 !mnt->mnt_sb->s_subtype) 1163 mnt = fs_set_subtype(mnt, fstype); 1164 put_filesystem(type); 1165 return mnt; 1166 } 1167 EXPORT_SYMBOL_GPL(do_kern_mount); 1168 1169 struct vfsmount *kern_mount_data(struct file_system_type *type, void *data) 1170 { 1171 return vfs_kern_mount(type, MS_KERNMOUNT, type->name, data); 1172 } 1173 1174 EXPORT_SYMBOL_GPL(kern_mount_data); 1175