0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include <linux/export.h>
0025 #include <linux/slab.h>
0026 #include <linux/blkdev.h>
0027 #include <linux/mount.h>
0028 #include <linux/security.h>
0029 #include <linux/writeback.h> /* for the emergency remount stuff */
0030 #include <linux/idr.h>
0031 #include <linux/mutex.h>
0032 #include <linux/backing-dev.h>
0033 #include <linux/rculist_bl.h>
0034 #include <linux/fscrypt.h>
0035 #include <linux/fsnotify.h>
0036 #include <linux/lockdep.h>
0037 #include <linux/user_namespace.h>
0038 #include <linux/fs_context.h>
0039 #include <uapi/linux/mount.h>
0040 #include "internal.h"
0041
0042 static int thaw_super_locked(struct super_block *sb);
0043
0044 static LIST_HEAD(super_blocks);
0045 static DEFINE_SPINLOCK(sb_lock);
0046
0047 static char *sb_writers_name[SB_FREEZE_LEVELS] = {
0048 "sb_writers",
0049 "sb_pagefaults",
0050 "sb_internal",
0051 };
0052
0053
0054
0055
0056
0057
0058
0059
0060 static unsigned long super_cache_scan(struct shrinker *shrink,
0061 struct shrink_control *sc)
0062 {
0063 struct super_block *sb;
0064 long fs_objects = 0;
0065 long total_objects;
0066 long freed = 0;
0067 long dentries;
0068 long inodes;
0069
0070 sb = container_of(shrink, struct super_block, s_shrink);
0071
0072
0073
0074
0075
0076 if (!(sc->gfp_mask & __GFP_FS))
0077 return SHRINK_STOP;
0078
0079 if (!trylock_super(sb))
0080 return SHRINK_STOP;
0081
0082 if (sb->s_op->nr_cached_objects)
0083 fs_objects = sb->s_op->nr_cached_objects(sb, sc);
0084
0085 inodes = list_lru_shrink_count(&sb->s_inode_lru, sc);
0086 dentries = list_lru_shrink_count(&sb->s_dentry_lru, sc);
0087 total_objects = dentries + inodes + fs_objects + 1;
0088 if (!total_objects)
0089 total_objects = 1;
0090
0091
0092 dentries = mult_frac(sc->nr_to_scan, dentries, total_objects);
0093 inodes = mult_frac(sc->nr_to_scan, inodes, total_objects);
0094 fs_objects = mult_frac(sc->nr_to_scan, fs_objects, total_objects);
0095
0096
0097
0098
0099
0100
0101
0102
0103 sc->nr_to_scan = dentries + 1;
0104 freed = prune_dcache_sb(sb, sc);
0105 sc->nr_to_scan = inodes + 1;
0106 freed += prune_icache_sb(sb, sc);
0107
0108 if (fs_objects) {
0109 sc->nr_to_scan = fs_objects + 1;
0110 freed += sb->s_op->free_cached_objects(sb, sc);
0111 }
0112
0113 up_read(&sb->s_umount);
0114 return freed;
0115 }
0116
0117 static unsigned long super_cache_count(struct shrinker *shrink,
0118 struct shrink_control *sc)
0119 {
0120 struct super_block *sb;
0121 long total_objects = 0;
0122
0123 sb = container_of(shrink, struct super_block, s_shrink);
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139 if (!(sb->s_flags & SB_BORN))
0140 return 0;
0141 smp_rmb();
0142
0143 if (sb->s_op && sb->s_op->nr_cached_objects)
0144 total_objects = sb->s_op->nr_cached_objects(sb, sc);
0145
0146 total_objects += list_lru_shrink_count(&sb->s_dentry_lru, sc);
0147 total_objects += list_lru_shrink_count(&sb->s_inode_lru, sc);
0148
0149 if (!total_objects)
0150 return SHRINK_EMPTY;
0151
0152 total_objects = vfs_pressure_ratio(total_objects);
0153 return total_objects;
0154 }
0155
0156 static void destroy_super_work(struct work_struct *work)
0157 {
0158 struct super_block *s = container_of(work, struct super_block,
0159 destroy_work);
0160 int i;
0161
0162 for (i = 0; i < SB_FREEZE_LEVELS; i++)
0163 percpu_free_rwsem(&s->s_writers.rw_sem[i]);
0164 kfree(s);
0165 }
0166
0167 static void destroy_super_rcu(struct rcu_head *head)
0168 {
0169 struct super_block *s = container_of(head, struct super_block, rcu);
0170 INIT_WORK(&s->destroy_work, destroy_super_work);
0171 schedule_work(&s->destroy_work);
0172 }
0173
0174
0175 static void destroy_unused_super(struct super_block *s)
0176 {
0177 if (!s)
0178 return;
0179 up_write(&s->s_umount);
0180 list_lru_destroy(&s->s_dentry_lru);
0181 list_lru_destroy(&s->s_inode_lru);
0182 security_sb_free(s);
0183 put_user_ns(s->s_user_ns);
0184 kfree(s->s_subtype);
0185 free_prealloced_shrinker(&s->s_shrink);
0186
0187 destroy_super_work(&s->destroy_work);
0188 }
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199 static struct super_block *alloc_super(struct file_system_type *type, int flags,
0200 struct user_namespace *user_ns)
0201 {
0202 struct super_block *s = kzalloc(sizeof(struct super_block), GFP_USER);
0203 static const struct super_operations default_op;
0204 int i;
0205
0206 if (!s)
0207 return NULL;
0208
0209 INIT_LIST_HEAD(&s->s_mounts);
0210 s->s_user_ns = get_user_ns(user_ns);
0211 init_rwsem(&s->s_umount);
0212 lockdep_set_class(&s->s_umount, &type->s_umount_key);
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228 down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING);
0229
0230 if (security_sb_alloc(s))
0231 goto fail;
0232
0233 for (i = 0; i < SB_FREEZE_LEVELS; i++) {
0234 if (__percpu_init_rwsem(&s->s_writers.rw_sem[i],
0235 sb_writers_name[i],
0236 &type->s_writers_key[i]))
0237 goto fail;
0238 }
0239 init_waitqueue_head(&s->s_writers.wait_unfrozen);
0240 s->s_bdi = &noop_backing_dev_info;
0241 s->s_flags = flags;
0242 if (s->s_user_ns != &init_user_ns)
0243 s->s_iflags |= SB_I_NODEV;
0244 INIT_HLIST_NODE(&s->s_instances);
0245 INIT_HLIST_BL_HEAD(&s->s_roots);
0246 mutex_init(&s->s_sync_lock);
0247 INIT_LIST_HEAD(&s->s_inodes);
0248 spin_lock_init(&s->s_inode_list_lock);
0249 INIT_LIST_HEAD(&s->s_inodes_wb);
0250 spin_lock_init(&s->s_inode_wblist_lock);
0251
0252 s->s_count = 1;
0253 atomic_set(&s->s_active, 1);
0254 mutex_init(&s->s_vfs_rename_mutex);
0255 lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key);
0256 init_rwsem(&s->s_dquot.dqio_sem);
0257 s->s_maxbytes = MAX_NON_LFS;
0258 s->s_op = &default_op;
0259 s->s_time_gran = 1000000000;
0260 s->s_time_min = TIME64_MIN;
0261 s->s_time_max = TIME64_MAX;
0262
0263 s->s_shrink.seeks = DEFAULT_SEEKS;
0264 s->s_shrink.scan_objects = super_cache_scan;
0265 s->s_shrink.count_objects = super_cache_count;
0266 s->s_shrink.batch = 1024;
0267 s->s_shrink.flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE;
0268 if (prealloc_shrinker(&s->s_shrink, "sb-%s", type->name))
0269 goto fail;
0270 if (list_lru_init_memcg(&s->s_dentry_lru, &s->s_shrink))
0271 goto fail;
0272 if (list_lru_init_memcg(&s->s_inode_lru, &s->s_shrink))
0273 goto fail;
0274 return s;
0275
0276 fail:
0277 destroy_unused_super(s);
0278 return NULL;
0279 }
0280
0281
0282
0283
0284
0285
0286 static void __put_super(struct super_block *s)
0287 {
0288 if (!--s->s_count) {
0289 list_del_init(&s->s_list);
0290 WARN_ON(s->s_dentry_lru.node);
0291 WARN_ON(s->s_inode_lru.node);
0292 WARN_ON(!list_empty(&s->s_mounts));
0293 security_sb_free(s);
0294 fscrypt_sb_free(s);
0295 put_user_ns(s->s_user_ns);
0296 kfree(s->s_subtype);
0297 call_rcu(&s->rcu, destroy_super_rcu);
0298 }
0299 }
0300
0301
0302
0303
0304
0305
0306
0307
0308 void put_super(struct super_block *sb)
0309 {
0310 spin_lock(&sb_lock);
0311 __put_super(sb);
0312 spin_unlock(&sb_lock);
0313 }
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327 void deactivate_locked_super(struct super_block *s)
0328 {
0329 struct file_system_type *fs = s->s_type;
0330 if (atomic_dec_and_test(&s->s_active)) {
0331 unregister_shrinker(&s->s_shrink);
0332 fs->kill_sb(s);
0333
0334
0335
0336
0337
0338
0339 list_lru_destroy(&s->s_dentry_lru);
0340 list_lru_destroy(&s->s_inode_lru);
0341
0342 put_filesystem(fs);
0343 put_super(s);
0344 } else {
0345 up_write(&s->s_umount);
0346 }
0347 }
0348
0349 EXPORT_SYMBOL(deactivate_locked_super);
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359 void deactivate_super(struct super_block *s)
0360 {
0361 if (!atomic_add_unless(&s->s_active, -1, 1)) {
0362 down_write(&s->s_umount);
0363 deactivate_locked_super(s);
0364 }
0365 }
0366
0367 EXPORT_SYMBOL(deactivate_super);
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382 static int grab_super(struct super_block *s) __releases(sb_lock)
0383 {
0384 s->s_count++;
0385 spin_unlock(&sb_lock);
0386 down_write(&s->s_umount);
0387 if ((s->s_flags & SB_BORN) && atomic_inc_not_zero(&s->s_active)) {
0388 put_super(s);
0389 return 1;
0390 }
0391 up_write(&s->s_umount);
0392 put_super(s);
0393 return 0;
0394 }
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413 bool trylock_super(struct super_block *sb)
0414 {
0415 if (down_read_trylock(&sb->s_umount)) {
0416 if (!hlist_unhashed(&sb->s_instances) &&
0417 sb->s_root && (sb->s_flags & SB_BORN))
0418 return true;
0419 up_read(&sb->s_umount);
0420 }
0421
0422 return false;
0423 }
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441 void retire_super(struct super_block *sb)
0442 {
0443 WARN_ON(!sb->s_bdev);
0444 down_write(&sb->s_umount);
0445 if (sb->s_iflags & SB_I_PERSB_BDI) {
0446 bdi_unregister(sb->s_bdi);
0447 sb->s_iflags &= ~SB_I_PERSB_BDI;
0448 }
0449 sb->s_iflags |= SB_I_RETIRED;
0450 up_write(&sb->s_umount);
0451 }
0452 EXPORT_SYMBOL(retire_super);
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468 void generic_shutdown_super(struct super_block *sb)
0469 {
0470 const struct super_operations *sop = sb->s_op;
0471
0472 if (sb->s_root) {
0473 shrink_dcache_for_umount(sb);
0474 sync_filesystem(sb);
0475 sb->s_flags &= ~SB_ACTIVE;
0476
0477 cgroup_writeback_umount();
0478
0479
0480 evict_inodes(sb);
0481
0482 fsnotify_sb_delete(sb);
0483 security_sb_delete(sb);
0484
0485 if (sb->s_dio_done_wq) {
0486 destroy_workqueue(sb->s_dio_done_wq);
0487 sb->s_dio_done_wq = NULL;
0488 }
0489
0490 if (sop->put_super)
0491 sop->put_super(sb);
0492
0493 if (!list_empty(&sb->s_inodes)) {
0494 printk("VFS: Busy inodes after unmount of %s. "
0495 "Self-destruct in 5 seconds. Have a nice day...\n",
0496 sb->s_id);
0497 }
0498 }
0499 spin_lock(&sb_lock);
0500
0501 hlist_del_init(&sb->s_instances);
0502 spin_unlock(&sb_lock);
0503 up_write(&sb->s_umount);
0504 if (sb->s_bdi != &noop_backing_dev_info) {
0505 if (sb->s_iflags & SB_I_PERSB_BDI)
0506 bdi_unregister(sb->s_bdi);
0507 bdi_put(sb->s_bdi);
0508 sb->s_bdi = &noop_backing_dev_info;
0509 }
0510 }
0511
0512 EXPORT_SYMBOL(generic_shutdown_super);
0513
0514 bool mount_capable(struct fs_context *fc)
0515 {
0516 if (!(fc->fs_type->fs_flags & FS_USERNS_MOUNT))
0517 return capable(CAP_SYS_ADMIN);
0518 else
0519 return ns_capable(fc->user_ns, CAP_SYS_ADMIN);
0520 }
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538
0539
0540 struct super_block *sget_fc(struct fs_context *fc,
0541 int (*test)(struct super_block *, struct fs_context *),
0542 int (*set)(struct super_block *, struct fs_context *))
0543 {
0544 struct super_block *s = NULL;
0545 struct super_block *old;
0546 struct user_namespace *user_ns = fc->global ? &init_user_ns : fc->user_ns;
0547 int err;
0548
0549 retry:
0550 spin_lock(&sb_lock);
0551 if (test) {
0552 hlist_for_each_entry(old, &fc->fs_type->fs_supers, s_instances) {
0553 if (test(old, fc))
0554 goto share_extant_sb;
0555 }
0556 }
0557 if (!s) {
0558 spin_unlock(&sb_lock);
0559 s = alloc_super(fc->fs_type, fc->sb_flags, user_ns);
0560 if (!s)
0561 return ERR_PTR(-ENOMEM);
0562 goto retry;
0563 }
0564
0565 s->s_fs_info = fc->s_fs_info;
0566 err = set(s, fc);
0567 if (err) {
0568 s->s_fs_info = NULL;
0569 spin_unlock(&sb_lock);
0570 destroy_unused_super(s);
0571 return ERR_PTR(err);
0572 }
0573 fc->s_fs_info = NULL;
0574 s->s_type = fc->fs_type;
0575 s->s_iflags |= fc->s_iflags;
0576 strlcpy(s->s_id, s->s_type->name, sizeof(s->s_id));
0577 list_add_tail(&s->s_list, &super_blocks);
0578 hlist_add_head(&s->s_instances, &s->s_type->fs_supers);
0579 spin_unlock(&sb_lock);
0580 get_filesystem(s->s_type);
0581 register_shrinker_prepared(&s->s_shrink);
0582 return s;
0583
0584 share_extant_sb:
0585 if (user_ns != old->s_user_ns) {
0586 spin_unlock(&sb_lock);
0587 destroy_unused_super(s);
0588 return ERR_PTR(-EBUSY);
0589 }
0590 if (!grab_super(old))
0591 goto retry;
0592 destroy_unused_super(s);
0593 return old;
0594 }
0595 EXPORT_SYMBOL(sget_fc);
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605 struct super_block *sget(struct file_system_type *type,
0606 int (*test)(struct super_block *,void *),
0607 int (*set)(struct super_block *,void *),
0608 int flags,
0609 void *data)
0610 {
0611 struct user_namespace *user_ns = current_user_ns();
0612 struct super_block *s = NULL;
0613 struct super_block *old;
0614 int err;
0615
0616
0617
0618
0619
0620 if (flags & SB_SUBMOUNT)
0621 user_ns = &init_user_ns;
0622
0623 retry:
0624 spin_lock(&sb_lock);
0625 if (test) {
0626 hlist_for_each_entry(old, &type->fs_supers, s_instances) {
0627 if (!test(old, data))
0628 continue;
0629 if (user_ns != old->s_user_ns) {
0630 spin_unlock(&sb_lock);
0631 destroy_unused_super(s);
0632 return ERR_PTR(-EBUSY);
0633 }
0634 if (!grab_super(old))
0635 goto retry;
0636 destroy_unused_super(s);
0637 return old;
0638 }
0639 }
0640 if (!s) {
0641 spin_unlock(&sb_lock);
0642 s = alloc_super(type, (flags & ~SB_SUBMOUNT), user_ns);
0643 if (!s)
0644 return ERR_PTR(-ENOMEM);
0645 goto retry;
0646 }
0647
0648 err = set(s, data);
0649 if (err) {
0650 spin_unlock(&sb_lock);
0651 destroy_unused_super(s);
0652 return ERR_PTR(err);
0653 }
0654 s->s_type = type;
0655 strlcpy(s->s_id, type->name, sizeof(s->s_id));
0656 list_add_tail(&s->s_list, &super_blocks);
0657 hlist_add_head(&s->s_instances, &type->fs_supers);
0658 spin_unlock(&sb_lock);
0659 get_filesystem(type);
0660 register_shrinker_prepared(&s->s_shrink);
0661 return s;
0662 }
0663 EXPORT_SYMBOL(sget);
0664
0665 void drop_super(struct super_block *sb)
0666 {
0667 up_read(&sb->s_umount);
0668 put_super(sb);
0669 }
0670
0671 EXPORT_SYMBOL(drop_super);
0672
0673 void drop_super_exclusive(struct super_block *sb)
0674 {
0675 up_write(&sb->s_umount);
0676 put_super(sb);
0677 }
0678 EXPORT_SYMBOL(drop_super_exclusive);
0679
0680 static void __iterate_supers(void (*f)(struct super_block *))
0681 {
0682 struct super_block *sb, *p = NULL;
0683
0684 spin_lock(&sb_lock);
0685 list_for_each_entry(sb, &super_blocks, s_list) {
0686 if (hlist_unhashed(&sb->s_instances))
0687 continue;
0688 sb->s_count++;
0689 spin_unlock(&sb_lock);
0690
0691 f(sb);
0692
0693 spin_lock(&sb_lock);
0694 if (p)
0695 __put_super(p);
0696 p = sb;
0697 }
0698 if (p)
0699 __put_super(p);
0700 spin_unlock(&sb_lock);
0701 }
0702
0703
0704
0705
0706
0707
0708
0709
0710 void iterate_supers(void (*f)(struct super_block *, void *), void *arg)
0711 {
0712 struct super_block *sb, *p = NULL;
0713
0714 spin_lock(&sb_lock);
0715 list_for_each_entry(sb, &super_blocks, s_list) {
0716 if (hlist_unhashed(&sb->s_instances))
0717 continue;
0718 sb->s_count++;
0719 spin_unlock(&sb_lock);
0720
0721 down_read(&sb->s_umount);
0722 if (sb->s_root && (sb->s_flags & SB_BORN))
0723 f(sb, arg);
0724 up_read(&sb->s_umount);
0725
0726 spin_lock(&sb_lock);
0727 if (p)
0728 __put_super(p);
0729 p = sb;
0730 }
0731 if (p)
0732 __put_super(p);
0733 spin_unlock(&sb_lock);
0734 }
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
0745 void iterate_supers_type(struct file_system_type *type,
0746 void (*f)(struct super_block *, void *), void *arg)
0747 {
0748 struct super_block *sb, *p = NULL;
0749
0750 spin_lock(&sb_lock);
0751 hlist_for_each_entry(sb, &type->fs_supers, s_instances) {
0752 sb->s_count++;
0753 spin_unlock(&sb_lock);
0754
0755 down_read(&sb->s_umount);
0756 if (sb->s_root && (sb->s_flags & SB_BORN))
0757 f(sb, arg);
0758 up_read(&sb->s_umount);
0759
0760 spin_lock(&sb_lock);
0761 if (p)
0762 __put_super(p);
0763 p = sb;
0764 }
0765 if (p)
0766 __put_super(p);
0767 spin_unlock(&sb_lock);
0768 }
0769
0770 EXPORT_SYMBOL(iterate_supers_type);
0771
0772
0773
0774
0775
0776
0777
0778
0779 struct super_block *get_super(struct block_device *bdev)
0780 {
0781 struct super_block *sb;
0782
0783 if (!bdev)
0784 return NULL;
0785
0786 spin_lock(&sb_lock);
0787 rescan:
0788 list_for_each_entry(sb, &super_blocks, s_list) {
0789 if (hlist_unhashed(&sb->s_instances))
0790 continue;
0791 if (sb->s_bdev == bdev) {
0792 sb->s_count++;
0793 spin_unlock(&sb_lock);
0794 down_read(&sb->s_umount);
0795
0796 if (sb->s_root && (sb->s_flags & SB_BORN))
0797 return sb;
0798 up_read(&sb->s_umount);
0799
0800 spin_lock(&sb_lock);
0801 __put_super(sb);
0802 goto rescan;
0803 }
0804 }
0805 spin_unlock(&sb_lock);
0806 return NULL;
0807 }
0808
0809
0810
0811
0812
0813
0814
0815
0816
0817 struct super_block *get_active_super(struct block_device *bdev)
0818 {
0819 struct super_block *sb;
0820
0821 if (!bdev)
0822 return NULL;
0823
0824 restart:
0825 spin_lock(&sb_lock);
0826 list_for_each_entry(sb, &super_blocks, s_list) {
0827 if (hlist_unhashed(&sb->s_instances))
0828 continue;
0829 if (sb->s_bdev == bdev) {
0830 if (!grab_super(sb))
0831 goto restart;
0832 up_write(&sb->s_umount);
0833 return sb;
0834 }
0835 }
0836 spin_unlock(&sb_lock);
0837 return NULL;
0838 }
0839
0840 struct super_block *user_get_super(dev_t dev, bool excl)
0841 {
0842 struct super_block *sb;
0843
0844 spin_lock(&sb_lock);
0845 rescan:
0846 list_for_each_entry(sb, &super_blocks, s_list) {
0847 if (hlist_unhashed(&sb->s_instances))
0848 continue;
0849 if (sb->s_dev == dev) {
0850 sb->s_count++;
0851 spin_unlock(&sb_lock);
0852 if (excl)
0853 down_write(&sb->s_umount);
0854 else
0855 down_read(&sb->s_umount);
0856
0857 if (sb->s_root && (sb->s_flags & SB_BORN))
0858 return sb;
0859 if (excl)
0860 up_write(&sb->s_umount);
0861 else
0862 up_read(&sb->s_umount);
0863
0864 spin_lock(&sb_lock);
0865 __put_super(sb);
0866 goto rescan;
0867 }
0868 }
0869 spin_unlock(&sb_lock);
0870 return NULL;
0871 }
0872
0873
0874
0875
0876
0877
0878
0879 int reconfigure_super(struct fs_context *fc)
0880 {
0881 struct super_block *sb = fc->root->d_sb;
0882 int retval;
0883 bool remount_ro = false;
0884 bool force = fc->sb_flags & SB_FORCE;
0885
0886 if (fc->sb_flags_mask & ~MS_RMT_MASK)
0887 return -EINVAL;
0888 if (sb->s_writers.frozen != SB_UNFROZEN)
0889 return -EBUSY;
0890
0891 retval = security_sb_remount(sb, fc->security);
0892 if (retval)
0893 return retval;
0894
0895 if (fc->sb_flags_mask & SB_RDONLY) {
0896 #ifdef CONFIG_BLOCK
0897 if (!(fc->sb_flags & SB_RDONLY) && sb->s_bdev &&
0898 bdev_read_only(sb->s_bdev))
0899 return -EACCES;
0900 #endif
0901
0902 remount_ro = (fc->sb_flags & SB_RDONLY) && !sb_rdonly(sb);
0903 }
0904
0905 if (remount_ro) {
0906 if (!hlist_empty(&sb->s_pins)) {
0907 up_write(&sb->s_umount);
0908 group_pin_kill(&sb->s_pins);
0909 down_write(&sb->s_umount);
0910 if (!sb->s_root)
0911 return 0;
0912 if (sb->s_writers.frozen != SB_UNFROZEN)
0913 return -EBUSY;
0914 remount_ro = !sb_rdonly(sb);
0915 }
0916 }
0917 shrink_dcache_sb(sb);
0918
0919
0920
0921
0922 if (remount_ro) {
0923 if (force) {
0924 sb->s_readonly_remount = 1;
0925 smp_wmb();
0926 } else {
0927 retval = sb_prepare_remount_readonly(sb);
0928 if (retval)
0929 return retval;
0930 }
0931 }
0932
0933 if (fc->ops->reconfigure) {
0934 retval = fc->ops->reconfigure(fc);
0935 if (retval) {
0936 if (!force)
0937 goto cancel_readonly;
0938
0939 WARN(1, "forced remount of a %s fs returned %i\n",
0940 sb->s_type->name, retval);
0941 }
0942 }
0943
0944 WRITE_ONCE(sb->s_flags, ((sb->s_flags & ~fc->sb_flags_mask) |
0945 (fc->sb_flags & fc->sb_flags_mask)));
0946
0947 smp_wmb();
0948 sb->s_readonly_remount = 0;
0949
0950
0951
0952
0953
0954
0955
0956
0957
0958 if (remount_ro && sb->s_bdev)
0959 invalidate_bdev(sb->s_bdev);
0960 return 0;
0961
0962 cancel_readonly:
0963 sb->s_readonly_remount = 0;
0964 return retval;
0965 }
0966
0967 static void do_emergency_remount_callback(struct super_block *sb)
0968 {
0969 down_write(&sb->s_umount);
0970 if (sb->s_root && sb->s_bdev && (sb->s_flags & SB_BORN) &&
0971 !sb_rdonly(sb)) {
0972 struct fs_context *fc;
0973
0974 fc = fs_context_for_reconfigure(sb->s_root,
0975 SB_RDONLY | SB_FORCE, SB_RDONLY);
0976 if (!IS_ERR(fc)) {
0977 if (parse_monolithic_mount_data(fc, NULL) == 0)
0978 (void)reconfigure_super(fc);
0979 put_fs_context(fc);
0980 }
0981 }
0982 up_write(&sb->s_umount);
0983 }
0984
0985 static void do_emergency_remount(struct work_struct *work)
0986 {
0987 __iterate_supers(do_emergency_remount_callback);
0988 kfree(work);
0989 printk("Emergency Remount complete\n");
0990 }
0991
0992 void emergency_remount(void)
0993 {
0994 struct work_struct *work;
0995
0996 work = kmalloc(sizeof(*work), GFP_ATOMIC);
0997 if (work) {
0998 INIT_WORK(work, do_emergency_remount);
0999 schedule_work(work);
1000 }
1001 }
1002
1003 static void do_thaw_all_callback(struct super_block *sb)
1004 {
1005 down_write(&sb->s_umount);
1006 if (sb->s_root && sb->s_flags & SB_BORN) {
1007 emergency_thaw_bdev(sb);
1008 thaw_super_locked(sb);
1009 } else {
1010 up_write(&sb->s_umount);
1011 }
1012 }
1013
1014 static void do_thaw_all(struct work_struct *work)
1015 {
1016 __iterate_supers(do_thaw_all_callback);
1017 kfree(work);
1018 printk(KERN_WARNING "Emergency Thaw complete\n");
1019 }
1020
1021
1022
1023
1024
1025
1026 void emergency_thaw_all(void)
1027 {
1028 struct work_struct *work;
1029
1030 work = kmalloc(sizeof(*work), GFP_ATOMIC);
1031 if (work) {
1032 INIT_WORK(work, do_thaw_all);
1033 schedule_work(work);
1034 }
1035 }
1036
1037 static DEFINE_IDA(unnamed_dev_ida);
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050 int get_anon_bdev(dev_t *p)
1051 {
1052 int dev;
1053
1054
1055
1056
1057
1058 dev = ida_alloc_range(&unnamed_dev_ida, 1, (1 << MINORBITS) - 1,
1059 GFP_ATOMIC);
1060 if (dev == -ENOSPC)
1061 dev = -EMFILE;
1062 if (dev < 0)
1063 return dev;
1064
1065 *p = MKDEV(0, dev);
1066 return 0;
1067 }
1068 EXPORT_SYMBOL(get_anon_bdev);
1069
1070 void free_anon_bdev(dev_t dev)
1071 {
1072 ida_free(&unnamed_dev_ida, MINOR(dev));
1073 }
1074 EXPORT_SYMBOL(free_anon_bdev);
1075
1076 int set_anon_super(struct super_block *s, void *data)
1077 {
1078 return get_anon_bdev(&s->s_dev);
1079 }
1080 EXPORT_SYMBOL(set_anon_super);
1081
1082 void kill_anon_super(struct super_block *sb)
1083 {
1084 dev_t dev = sb->s_dev;
1085 generic_shutdown_super(sb);
1086 free_anon_bdev(dev);
1087 }
1088 EXPORT_SYMBOL(kill_anon_super);
1089
1090 void kill_litter_super(struct super_block *sb)
1091 {
1092 if (sb->s_root)
1093 d_genocide(sb->s_root);
1094 kill_anon_super(sb);
1095 }
1096 EXPORT_SYMBOL(kill_litter_super);
1097
1098 int set_anon_super_fc(struct super_block *sb, struct fs_context *fc)
1099 {
1100 return set_anon_super(sb, NULL);
1101 }
1102 EXPORT_SYMBOL(set_anon_super_fc);
1103
1104 static int test_keyed_super(struct super_block *sb, struct fs_context *fc)
1105 {
1106 return sb->s_fs_info == fc->s_fs_info;
1107 }
1108
1109 static int test_single_super(struct super_block *s, struct fs_context *fc)
1110 {
1111 return 1;
1112 }
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139 int vfs_get_super(struct fs_context *fc,
1140 enum vfs_get_super_keying keying,
1141 int (*fill_super)(struct super_block *sb,
1142 struct fs_context *fc))
1143 {
1144 int (*test)(struct super_block *, struct fs_context *);
1145 struct super_block *sb;
1146 int err;
1147
1148 switch (keying) {
1149 case vfs_get_single_super:
1150 case vfs_get_single_reconf_super:
1151 test = test_single_super;
1152 break;
1153 case vfs_get_keyed_super:
1154 test = test_keyed_super;
1155 break;
1156 case vfs_get_independent_super:
1157 test = NULL;
1158 break;
1159 default:
1160 BUG();
1161 }
1162
1163 sb = sget_fc(fc, test, set_anon_super_fc);
1164 if (IS_ERR(sb))
1165 return PTR_ERR(sb);
1166
1167 if (!sb->s_root) {
1168 err = fill_super(sb, fc);
1169 if (err)
1170 goto error;
1171
1172 sb->s_flags |= SB_ACTIVE;
1173 fc->root = dget(sb->s_root);
1174 } else {
1175 fc->root = dget(sb->s_root);
1176 if (keying == vfs_get_single_reconf_super) {
1177 err = reconfigure_super(fc);
1178 if (err < 0) {
1179 dput(fc->root);
1180 fc->root = NULL;
1181 goto error;
1182 }
1183 }
1184 }
1185
1186 return 0;
1187
1188 error:
1189 deactivate_locked_super(sb);
1190 return err;
1191 }
1192 EXPORT_SYMBOL(vfs_get_super);
1193
1194 int get_tree_nodev(struct fs_context *fc,
1195 int (*fill_super)(struct super_block *sb,
1196 struct fs_context *fc))
1197 {
1198 return vfs_get_super(fc, vfs_get_independent_super, fill_super);
1199 }
1200 EXPORT_SYMBOL(get_tree_nodev);
1201
1202 int get_tree_single(struct fs_context *fc,
1203 int (*fill_super)(struct super_block *sb,
1204 struct fs_context *fc))
1205 {
1206 return vfs_get_super(fc, vfs_get_single_super, fill_super);
1207 }
1208 EXPORT_SYMBOL(get_tree_single);
1209
1210 int get_tree_single_reconf(struct fs_context *fc,
1211 int (*fill_super)(struct super_block *sb,
1212 struct fs_context *fc))
1213 {
1214 return vfs_get_super(fc, vfs_get_single_reconf_super, fill_super);
1215 }
1216 EXPORT_SYMBOL(get_tree_single_reconf);
1217
1218 int get_tree_keyed(struct fs_context *fc,
1219 int (*fill_super)(struct super_block *sb,
1220 struct fs_context *fc),
1221 void *key)
1222 {
1223 fc->s_fs_info = key;
1224 return vfs_get_super(fc, vfs_get_keyed_super, fill_super);
1225 }
1226 EXPORT_SYMBOL(get_tree_keyed);
1227
1228 #ifdef CONFIG_BLOCK
1229
1230 static int set_bdev_super(struct super_block *s, void *data)
1231 {
1232 s->s_bdev = data;
1233 s->s_dev = s->s_bdev->bd_dev;
1234 s->s_bdi = bdi_get(s->s_bdev->bd_disk->bdi);
1235
1236 if (bdev_stable_writes(s->s_bdev))
1237 s->s_iflags |= SB_I_STABLE_WRITES;
1238 return 0;
1239 }
1240
1241 static int set_bdev_super_fc(struct super_block *s, struct fs_context *fc)
1242 {
1243 return set_bdev_super(s, fc->sget_key);
1244 }
1245
1246 static int test_bdev_super_fc(struct super_block *s, struct fs_context *fc)
1247 {
1248 return !(s->s_iflags & SB_I_RETIRED) && s->s_bdev == fc->sget_key;
1249 }
1250
1251
1252
1253
1254
1255
1256 int get_tree_bdev(struct fs_context *fc,
1257 int (*fill_super)(struct super_block *,
1258 struct fs_context *))
1259 {
1260 struct block_device *bdev;
1261 struct super_block *s;
1262 fmode_t mode = FMODE_READ | FMODE_EXCL;
1263 int error = 0;
1264
1265 if (!(fc->sb_flags & SB_RDONLY))
1266 mode |= FMODE_WRITE;
1267
1268 if (!fc->source)
1269 return invalf(fc, "No source specified");
1270
1271 bdev = blkdev_get_by_path(fc->source, mode, fc->fs_type);
1272 if (IS_ERR(bdev)) {
1273 errorf(fc, "%s: Can't open blockdev", fc->source);
1274 return PTR_ERR(bdev);
1275 }
1276
1277
1278
1279
1280
1281 mutex_lock(&bdev->bd_fsfreeze_mutex);
1282 if (bdev->bd_fsfreeze_count > 0) {
1283 mutex_unlock(&bdev->bd_fsfreeze_mutex);
1284 warnf(fc, "%pg: Can't mount, blockdev is frozen", bdev);
1285 blkdev_put(bdev, mode);
1286 return -EBUSY;
1287 }
1288
1289 fc->sb_flags |= SB_NOSEC;
1290 fc->sget_key = bdev;
1291 s = sget_fc(fc, test_bdev_super_fc, set_bdev_super_fc);
1292 mutex_unlock(&bdev->bd_fsfreeze_mutex);
1293 if (IS_ERR(s)) {
1294 blkdev_put(bdev, mode);
1295 return PTR_ERR(s);
1296 }
1297
1298 if (s->s_root) {
1299
1300 if ((fc->sb_flags ^ s->s_flags) & SB_RDONLY) {
1301 warnf(fc, "%pg: Can't mount, would change RO state", bdev);
1302 deactivate_locked_super(s);
1303 blkdev_put(bdev, mode);
1304 return -EBUSY;
1305 }
1306
1307
1308
1309
1310
1311
1312
1313
1314 up_write(&s->s_umount);
1315 blkdev_put(bdev, mode);
1316 down_write(&s->s_umount);
1317 } else {
1318 s->s_mode = mode;
1319 snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev);
1320 shrinker_debugfs_rename(&s->s_shrink, "sb-%s:%s",
1321 fc->fs_type->name, s->s_id);
1322 sb_set_blocksize(s, block_size(bdev));
1323 error = fill_super(s, fc);
1324 if (error) {
1325 deactivate_locked_super(s);
1326 return error;
1327 }
1328
1329 s->s_flags |= SB_ACTIVE;
1330 bdev->bd_super = s;
1331 }
1332
1333 BUG_ON(fc->root);
1334 fc->root = dget(s->s_root);
1335 return 0;
1336 }
1337 EXPORT_SYMBOL(get_tree_bdev);
1338
1339 static int test_bdev_super(struct super_block *s, void *data)
1340 {
1341 return !(s->s_iflags & SB_I_RETIRED) && (void *)s->s_bdev == data;
1342 }
1343
1344 struct dentry *mount_bdev(struct file_system_type *fs_type,
1345 int flags, const char *dev_name, void *data,
1346 int (*fill_super)(struct super_block *, void *, int))
1347 {
1348 struct block_device *bdev;
1349 struct super_block *s;
1350 fmode_t mode = FMODE_READ | FMODE_EXCL;
1351 int error = 0;
1352
1353 if (!(flags & SB_RDONLY))
1354 mode |= FMODE_WRITE;
1355
1356 bdev = blkdev_get_by_path(dev_name, mode, fs_type);
1357 if (IS_ERR(bdev))
1358 return ERR_CAST(bdev);
1359
1360
1361
1362
1363
1364
1365 mutex_lock(&bdev->bd_fsfreeze_mutex);
1366 if (bdev->bd_fsfreeze_count > 0) {
1367 mutex_unlock(&bdev->bd_fsfreeze_mutex);
1368 error = -EBUSY;
1369 goto error_bdev;
1370 }
1371 s = sget(fs_type, test_bdev_super, set_bdev_super, flags | SB_NOSEC,
1372 bdev);
1373 mutex_unlock(&bdev->bd_fsfreeze_mutex);
1374 if (IS_ERR(s))
1375 goto error_s;
1376
1377 if (s->s_root) {
1378 if ((flags ^ s->s_flags) & SB_RDONLY) {
1379 deactivate_locked_super(s);
1380 error = -EBUSY;
1381 goto error_bdev;
1382 }
1383
1384
1385
1386
1387
1388
1389
1390
1391 up_write(&s->s_umount);
1392 blkdev_put(bdev, mode);
1393 down_write(&s->s_umount);
1394 } else {
1395 s->s_mode = mode;
1396 snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev);
1397 shrinker_debugfs_rename(&s->s_shrink, "sb-%s:%s",
1398 fs_type->name, s->s_id);
1399 sb_set_blocksize(s, block_size(bdev));
1400 error = fill_super(s, data, flags & SB_SILENT ? 1 : 0);
1401 if (error) {
1402 deactivate_locked_super(s);
1403 goto error;
1404 }
1405
1406 s->s_flags |= SB_ACTIVE;
1407 bdev->bd_super = s;
1408 }
1409
1410 return dget(s->s_root);
1411
1412 error_s:
1413 error = PTR_ERR(s);
1414 error_bdev:
1415 blkdev_put(bdev, mode);
1416 error:
1417 return ERR_PTR(error);
1418 }
1419 EXPORT_SYMBOL(mount_bdev);
1420
1421 void kill_block_super(struct super_block *sb)
1422 {
1423 struct block_device *bdev = sb->s_bdev;
1424 fmode_t mode = sb->s_mode;
1425
1426 bdev->bd_super = NULL;
1427 generic_shutdown_super(sb);
1428 sync_blockdev(bdev);
1429 WARN_ON_ONCE(!(mode & FMODE_EXCL));
1430 blkdev_put(bdev, mode | FMODE_EXCL);
1431 }
1432
1433 EXPORT_SYMBOL(kill_block_super);
1434 #endif
1435
1436 struct dentry *mount_nodev(struct file_system_type *fs_type,
1437 int flags, void *data,
1438 int (*fill_super)(struct super_block *, void *, int))
1439 {
1440 int error;
1441 struct super_block *s = sget(fs_type, NULL, set_anon_super, flags, NULL);
1442
1443 if (IS_ERR(s))
1444 return ERR_CAST(s);
1445
1446 error = fill_super(s, data, flags & SB_SILENT ? 1 : 0);
1447 if (error) {
1448 deactivate_locked_super(s);
1449 return ERR_PTR(error);
1450 }
1451 s->s_flags |= SB_ACTIVE;
1452 return dget(s->s_root);
1453 }
1454 EXPORT_SYMBOL(mount_nodev);
1455
1456 int reconfigure_single(struct super_block *s,
1457 int flags, void *data)
1458 {
1459 struct fs_context *fc;
1460 int ret;
1461
1462
1463
1464
1465
1466
1467 fc = fs_context_for_reconfigure(s->s_root, flags, MS_RMT_MASK);
1468 if (IS_ERR(fc))
1469 return PTR_ERR(fc);
1470
1471 ret = parse_monolithic_mount_data(fc, data);
1472 if (ret < 0)
1473 goto out;
1474
1475 ret = reconfigure_super(fc);
1476 out:
1477 put_fs_context(fc);
1478 return ret;
1479 }
1480
1481 static int compare_single(struct super_block *s, void *p)
1482 {
1483 return 1;
1484 }
1485
1486 struct dentry *mount_single(struct file_system_type *fs_type,
1487 int flags, void *data,
1488 int (*fill_super)(struct super_block *, void *, int))
1489 {
1490 struct super_block *s;
1491 int error;
1492
1493 s = sget(fs_type, compare_single, set_anon_super, flags, NULL);
1494 if (IS_ERR(s))
1495 return ERR_CAST(s);
1496 if (!s->s_root) {
1497 error = fill_super(s, data, flags & SB_SILENT ? 1 : 0);
1498 if (!error)
1499 s->s_flags |= SB_ACTIVE;
1500 } else {
1501 error = reconfigure_single(s, flags, data);
1502 }
1503 if (unlikely(error)) {
1504 deactivate_locked_super(s);
1505 return ERR_PTR(error);
1506 }
1507 return dget(s->s_root);
1508 }
1509 EXPORT_SYMBOL(mount_single);
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519 int vfs_get_tree(struct fs_context *fc)
1520 {
1521 struct super_block *sb;
1522 int error;
1523
1524 if (fc->root)
1525 return -EBUSY;
1526
1527
1528
1529
1530 error = fc->ops->get_tree(fc);
1531 if (error < 0)
1532 return error;
1533
1534 if (!fc->root) {
1535 pr_err("Filesystem %s get_tree() didn't set fc->root\n",
1536 fc->fs_type->name);
1537
1538
1539
1540 BUG();
1541 }
1542
1543 sb = fc->root->d_sb;
1544 WARN_ON(!sb->s_bdi);
1545
1546
1547
1548
1549
1550
1551
1552 smp_wmb();
1553 sb->s_flags |= SB_BORN;
1554
1555 error = security_sb_set_mnt_opts(sb, fc->security, 0, NULL);
1556 if (unlikely(error)) {
1557 fc_drop_locked(fc);
1558 return error;
1559 }
1560
1561
1562
1563
1564
1565
1566
1567 WARN((sb->s_maxbytes < 0), "%s set sb->s_maxbytes to "
1568 "negative value (%lld)\n", fc->fs_type->name, sb->s_maxbytes);
1569
1570 return 0;
1571 }
1572 EXPORT_SYMBOL(vfs_get_tree);
1573
1574
1575
1576
1577
1578 int super_setup_bdi_name(struct super_block *sb, char *fmt, ...)
1579 {
1580 struct backing_dev_info *bdi;
1581 int err;
1582 va_list args;
1583
1584 bdi = bdi_alloc(NUMA_NO_NODE);
1585 if (!bdi)
1586 return -ENOMEM;
1587
1588 va_start(args, fmt);
1589 err = bdi_register_va(bdi, fmt, args);
1590 va_end(args);
1591 if (err) {
1592 bdi_put(bdi);
1593 return err;
1594 }
1595 WARN_ON(sb->s_bdi != &noop_backing_dev_info);
1596 sb->s_bdi = bdi;
1597 sb->s_iflags |= SB_I_PERSB_BDI;
1598
1599 return 0;
1600 }
1601 EXPORT_SYMBOL(super_setup_bdi_name);
1602
1603
1604
1605
1606
1607 int super_setup_bdi(struct super_block *sb)
1608 {
1609 static atomic_long_t bdi_seq = ATOMIC_LONG_INIT(0);
1610
1611 return super_setup_bdi_name(sb, "%.28s-%ld", sb->s_type->name,
1612 atomic_long_inc_return(&bdi_seq));
1613 }
1614 EXPORT_SYMBOL(super_setup_bdi);
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624 static void sb_wait_write(struct super_block *sb, int level)
1625 {
1626 percpu_down_write(sb->s_writers.rw_sem + level-1);
1627 }
1628
1629
1630
1631
1632
1633 static void lockdep_sb_freeze_release(struct super_block *sb)
1634 {
1635 int level;
1636
1637 for (level = SB_FREEZE_LEVELS - 1; level >= 0; level--)
1638 percpu_rwsem_release(sb->s_writers.rw_sem + level, 0, _THIS_IP_);
1639 }
1640
1641
1642
1643
1644 static void lockdep_sb_freeze_acquire(struct super_block *sb)
1645 {
1646 int level;
1647
1648 for (level = 0; level < SB_FREEZE_LEVELS; ++level)
1649 percpu_rwsem_acquire(sb->s_writers.rw_sem + level, 0, _THIS_IP_);
1650 }
1651
1652 static void sb_freeze_unlock(struct super_block *sb, int level)
1653 {
1654 for (level--; level >= 0; level--)
1655 percpu_up_write(sb->s_writers.rw_sem + level);
1656 }
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691 int freeze_super(struct super_block *sb)
1692 {
1693 int ret;
1694
1695 atomic_inc(&sb->s_active);
1696 down_write(&sb->s_umount);
1697 if (sb->s_writers.frozen != SB_UNFROZEN) {
1698 deactivate_locked_super(sb);
1699 return -EBUSY;
1700 }
1701
1702 if (!(sb->s_flags & SB_BORN)) {
1703 up_write(&sb->s_umount);
1704 return 0;
1705 }
1706
1707 if (sb_rdonly(sb)) {
1708
1709 sb->s_writers.frozen = SB_FREEZE_COMPLETE;
1710 up_write(&sb->s_umount);
1711 return 0;
1712 }
1713
1714 sb->s_writers.frozen = SB_FREEZE_WRITE;
1715
1716 up_write(&sb->s_umount);
1717 sb_wait_write(sb, SB_FREEZE_WRITE);
1718 down_write(&sb->s_umount);
1719
1720
1721 sb->s_writers.frozen = SB_FREEZE_PAGEFAULT;
1722 sb_wait_write(sb, SB_FREEZE_PAGEFAULT);
1723
1724
1725 ret = sync_filesystem(sb);
1726 if (ret) {
1727 sb->s_writers.frozen = SB_UNFROZEN;
1728 sb_freeze_unlock(sb, SB_FREEZE_PAGEFAULT);
1729 wake_up(&sb->s_writers.wait_unfrozen);
1730 deactivate_locked_super(sb);
1731 return ret;
1732 }
1733
1734
1735 sb->s_writers.frozen = SB_FREEZE_FS;
1736 sb_wait_write(sb, SB_FREEZE_FS);
1737
1738 if (sb->s_op->freeze_fs) {
1739 ret = sb->s_op->freeze_fs(sb);
1740 if (ret) {
1741 printk(KERN_ERR
1742 "VFS:Filesystem freeze failed\n");
1743 sb->s_writers.frozen = SB_UNFROZEN;
1744 sb_freeze_unlock(sb, SB_FREEZE_FS);
1745 wake_up(&sb->s_writers.wait_unfrozen);
1746 deactivate_locked_super(sb);
1747 return ret;
1748 }
1749 }
1750
1751
1752
1753
1754 sb->s_writers.frozen = SB_FREEZE_COMPLETE;
1755 lockdep_sb_freeze_release(sb);
1756 up_write(&sb->s_umount);
1757 return 0;
1758 }
1759 EXPORT_SYMBOL(freeze_super);
1760
1761 static int thaw_super_locked(struct super_block *sb)
1762 {
1763 int error;
1764
1765 if (sb->s_writers.frozen != SB_FREEZE_COMPLETE) {
1766 up_write(&sb->s_umount);
1767 return -EINVAL;
1768 }
1769
1770 if (sb_rdonly(sb)) {
1771 sb->s_writers.frozen = SB_UNFROZEN;
1772 goto out;
1773 }
1774
1775 lockdep_sb_freeze_acquire(sb);
1776
1777 if (sb->s_op->unfreeze_fs) {
1778 error = sb->s_op->unfreeze_fs(sb);
1779 if (error) {
1780 printk(KERN_ERR
1781 "VFS:Filesystem thaw failed\n");
1782 lockdep_sb_freeze_release(sb);
1783 up_write(&sb->s_umount);
1784 return error;
1785 }
1786 }
1787
1788 sb->s_writers.frozen = SB_UNFROZEN;
1789 sb_freeze_unlock(sb, SB_FREEZE_FS);
1790 out:
1791 wake_up(&sb->s_writers.wait_unfrozen);
1792 deactivate_locked_super(sb);
1793 return 0;
1794 }
1795
1796
1797
1798
1799
1800
1801
1802 int thaw_super(struct super_block *sb)
1803 {
1804 down_write(&sb->s_umount);
1805 return thaw_super_locked(sb);
1806 }
1807 EXPORT_SYMBOL(thaw_super);