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