1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#include <linux/export.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>
30#include <linux/idr.h>
31#include <linux/mutex.h>
32#include <linux/backing-dev.h>
33#include <linux/rculist_bl.h>
34#include <linux/cleancache.h>
35#include <linux/fsnotify.h>
36#include <linux/lockdep.h>
37#include "internal.h"
38
39
40LIST_HEAD(super_blocks);
41DEFINE_SPINLOCK(sb_lock);
42
43static char *sb_writers_name[SB_FREEZE_LEVELS] = {
44 "sb_writers",
45 "sb_pagefaults",
46 "sb_internal",
47};
48
49
50
51
52
53
54
55
56static int prune_super(struct shrinker *shrink, struct shrink_control *sc)
57{
58 struct super_block *sb;
59 int fs_objects = 0;
60 int total_objects;
61
62 sb = container_of(shrink, struct super_block, s_shrink);
63
64
65
66
67
68 if (sc->nr_to_scan && !(sc->gfp_mask & __GFP_FS))
69 return -1;
70
71 if (!grab_super_passive(sb))
72 return -1;
73
74 if (sb->s_op && sb->s_op->nr_cached_objects)
75 fs_objects = sb->s_op->nr_cached_objects(sb);
76
77 total_objects = sb->s_nr_dentry_unused +
78 sb->s_nr_inodes_unused + fs_objects + 1;
79
80 if (sc->nr_to_scan) {
81 int dentries;
82 int inodes;
83
84
85 dentries = (sc->nr_to_scan * sb->s_nr_dentry_unused) /
86 total_objects;
87 inodes = (sc->nr_to_scan * sb->s_nr_inodes_unused) /
88 total_objects;
89 if (fs_objects)
90 fs_objects = (sc->nr_to_scan * fs_objects) /
91 total_objects;
92
93
94
95
96 prune_dcache_sb(sb, dentries);
97 prune_icache_sb(sb, inodes);
98
99 if (fs_objects && sb->s_op->free_cached_objects) {
100 sb->s_op->free_cached_objects(sb, fs_objects);
101 fs_objects = sb->s_op->nr_cached_objects(sb);
102 }
103 total_objects = sb->s_nr_dentry_unused +
104 sb->s_nr_inodes_unused + fs_objects;
105 }
106
107 total_objects = (total_objects / 100) * sysctl_vfs_cache_pressure;
108 drop_super(sb);
109 return total_objects;
110}
111
112static int init_sb_writers(struct super_block *s, struct file_system_type *type)
113{
114 int err;
115 int i;
116
117 for (i = 0; i < SB_FREEZE_LEVELS; i++) {
118 err = percpu_counter_init(&s->s_writers.counter[i], 0);
119 if (err < 0)
120 goto err_out;
121 lockdep_init_map(&s->s_writers.lock_map[i], sb_writers_name[i],
122 &type->s_writers_key[i], 0);
123 }
124 init_waitqueue_head(&s->s_writers.wait);
125 init_waitqueue_head(&s->s_writers.wait_unfrozen);
126 return 0;
127err_out:
128 while (--i >= 0)
129 percpu_counter_destroy(&s->s_writers.counter[i]);
130 return err;
131}
132
133static void destroy_sb_writers(struct super_block *s)
134{
135 int i;
136
137 for (i = 0; i < SB_FREEZE_LEVELS; i++)
138 percpu_counter_destroy(&s->s_writers.counter[i]);
139}
140
141
142
143
144
145
146
147
148
149static struct super_block *alloc_super(struct file_system_type *type, int flags)
150{
151 struct super_block *s = kzalloc(sizeof(struct super_block), GFP_USER);
152 static const struct super_operations default_op;
153
154 if (s) {
155 if (security_sb_alloc(s)) {
156
157
158
159
160 kfree(s);
161 s = NULL;
162 goto out;
163 }
164#ifdef CONFIG_SMP
165 s->s_files = alloc_percpu(struct list_head);
166 if (!s->s_files)
167 goto err_out;
168 else {
169 int i;
170
171 for_each_possible_cpu(i)
172 INIT_LIST_HEAD(per_cpu_ptr(s->s_files, i));
173 }
174#else
175 INIT_LIST_HEAD(&s->s_files);
176#endif
177 if (init_sb_writers(s, type))
178 goto err_out;
179 s->s_flags = flags;
180 s->s_bdi = &default_backing_dev_info;
181 INIT_HLIST_NODE(&s->s_instances);
182 INIT_HLIST_BL_HEAD(&s->s_anon);
183 INIT_LIST_HEAD(&s->s_inodes);
184 INIT_LIST_HEAD(&s->s_dentry_lru);
185 INIT_LIST_HEAD(&s->s_inode_lru);
186 spin_lock_init(&s->s_inode_lru_lock);
187 INIT_LIST_HEAD(&s->s_mounts);
188 init_rwsem(&s->s_umount);
189 lockdep_set_class(&s->s_umount, &type->s_umount_key);
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205 down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING);
206 s->s_count = 1;
207 atomic_set(&s->s_active, 1);
208 mutex_init(&s->s_vfs_rename_mutex);
209 lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key);
210 mutex_init(&s->s_dquot.dqio_mutex);
211 mutex_init(&s->s_dquot.dqonoff_mutex);
212 init_rwsem(&s->s_dquot.dqptr_sem);
213 s->s_maxbytes = MAX_NON_LFS;
214 s->s_op = &default_op;
215 s->s_time_gran = 1000000000;
216 s->cleancache_poolid = -1;
217
218 s->s_shrink.seeks = DEFAULT_SEEKS;
219 s->s_shrink.shrink = prune_super;
220 s->s_shrink.batch = 1024;
221 }
222out:
223 return s;
224err_out:
225 security_sb_free(s);
226#ifdef CONFIG_SMP
227 if (s->s_files)
228 free_percpu(s->s_files);
229#endif
230 destroy_sb_writers(s);
231 kfree(s);
232 s = NULL;
233 goto out;
234}
235
236
237
238
239
240
241
242static inline void destroy_super(struct super_block *s)
243{
244#ifdef CONFIG_SMP
245 free_percpu(s->s_files);
246#endif
247 destroy_sb_writers(s);
248 security_sb_free(s);
249 WARN_ON(!list_empty(&s->s_mounts));
250 kfree(s->s_subtype);
251 kfree(s->s_options);
252 kfree(s);
253}
254
255
256
257
258
259
260static void __put_super(struct super_block *sb)
261{
262 if (!--sb->s_count) {
263 list_del_init(&sb->s_list);
264 destroy_super(sb);
265 }
266}
267
268
269
270
271
272
273
274
275static void put_super(struct super_block *sb)
276{
277 spin_lock(&sb_lock);
278 __put_super(sb);
279 spin_unlock(&sb_lock);
280}
281
282
283
284
285
286
287
288
289
290
291
292
293
294void deactivate_locked_super(struct super_block *s)
295{
296 struct file_system_type *fs = s->s_type;
297 if (atomic_dec_and_test(&s->s_active)) {
298 cleancache_invalidate_fs(s);
299 fs->kill_sb(s);
300
301
302 unregister_shrinker(&s->s_shrink);
303 put_filesystem(fs);
304 put_super(s);
305 } else {
306 up_write(&s->s_umount);
307 }
308}
309
310EXPORT_SYMBOL(deactivate_locked_super);
311
312
313
314
315
316
317
318
319
320void deactivate_super(struct super_block *s)
321{
322 if (!atomic_add_unless(&s->s_active, -1, 1)) {
323 down_write(&s->s_umount);
324 deactivate_locked_super(s);
325 }
326}
327
328EXPORT_SYMBOL(deactivate_super);
329
330
331
332
333
334
335
336
337
338
339
340
341static int grab_super(struct super_block *s) __releases(sb_lock)
342{
343 if (atomic_inc_not_zero(&s->s_active)) {
344 spin_unlock(&sb_lock);
345 return 1;
346 }
347
348 s->s_count++;
349 spin_unlock(&sb_lock);
350
351 down_write(&s->s_umount);
352 up_write(&s->s_umount);
353 put_super(s);
354 return 0;
355}
356
357
358
359
360
361
362
363
364
365
366
367
368
369bool grab_super_passive(struct super_block *sb)
370{
371 spin_lock(&sb_lock);
372 if (hlist_unhashed(&sb->s_instances)) {
373 spin_unlock(&sb_lock);
374 return false;
375 }
376
377 sb->s_count++;
378 spin_unlock(&sb_lock);
379
380 if (down_read_trylock(&sb->s_umount)) {
381 if (sb->s_root && (sb->s_flags & MS_BORN))
382 return true;
383 up_read(&sb->s_umount);
384 }
385
386 put_super(sb);
387 return false;
388}
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404void generic_shutdown_super(struct super_block *sb)
405{
406 const struct super_operations *sop = sb->s_op;
407
408 if (sb->s_root) {
409 shrink_dcache_for_umount(sb);
410 sync_filesystem(sb);
411 sb->s_flags &= ~MS_ACTIVE;
412
413 fsnotify_unmount_inodes(&sb->s_inodes);
414
415 evict_inodes(sb);
416
417 if (sop->put_super)
418 sop->put_super(sb);
419
420 if (!list_empty(&sb->s_inodes)) {
421 printk("VFS: Busy inodes after unmount of %s. "
422 "Self-destruct in 5 seconds. Have a nice day...\n",
423 sb->s_id);
424 }
425 }
426 spin_lock(&sb_lock);
427
428 hlist_del_init(&sb->s_instances);
429 spin_unlock(&sb_lock);
430 up_write(&sb->s_umount);
431}
432
433EXPORT_SYMBOL(generic_shutdown_super);
434
435
436
437
438
439
440
441
442
443struct super_block *sget(struct file_system_type *type,
444 int (*test)(struct super_block *,void *),
445 int (*set)(struct super_block *,void *),
446 int flags,
447 void *data)
448{
449 struct super_block *s = NULL;
450 struct hlist_node *node;
451 struct super_block *old;
452 int err;
453
454retry:
455 spin_lock(&sb_lock);
456 if (test) {
457 hlist_for_each_entry(old, node, &type->fs_supers, s_instances) {
458 if (!test(old, data))
459 continue;
460 if (!grab_super(old))
461 goto retry;
462 if (s) {
463 up_write(&s->s_umount);
464 destroy_super(s);
465 s = NULL;
466 }
467 down_write(&old->s_umount);
468 if (unlikely(!(old->s_flags & MS_BORN))) {
469 deactivate_locked_super(old);
470 goto retry;
471 }
472 return old;
473 }
474 }
475 if (!s) {
476 spin_unlock(&sb_lock);
477 s = alloc_super(type, flags);
478 if (!s)
479 return ERR_PTR(-ENOMEM);
480 goto retry;
481 }
482
483 err = set(s, data);
484 if (err) {
485 spin_unlock(&sb_lock);
486 up_write(&s->s_umount);
487 destroy_super(s);
488 return ERR_PTR(err);
489 }
490 s->s_type = type;
491 strlcpy(s->s_id, type->name, sizeof(s->s_id));
492 list_add_tail(&s->s_list, &super_blocks);
493 hlist_add_head(&s->s_instances, &type->fs_supers);
494 spin_unlock(&sb_lock);
495 get_filesystem(type);
496 register_shrinker(&s->s_shrink);
497 return s;
498}
499
500EXPORT_SYMBOL(sget);
501
502void drop_super(struct super_block *sb)
503{
504 up_read(&sb->s_umount);
505 put_super(sb);
506}
507
508EXPORT_SYMBOL(drop_super);
509
510
511
512
513
514
515
516
517
518void iterate_supers(void (*f)(struct super_block *, void *), void *arg)
519{
520 struct super_block *sb, *p = NULL;
521
522 spin_lock(&sb_lock);
523 list_for_each_entry(sb, &super_blocks, s_list) {
524 if (hlist_unhashed(&sb->s_instances))
525 continue;
526 sb->s_count++;
527 spin_unlock(&sb_lock);
528
529 down_read(&sb->s_umount);
530 if (sb->s_root && (sb->s_flags & MS_BORN))
531 f(sb, arg);
532 up_read(&sb->s_umount);
533
534 spin_lock(&sb_lock);
535 if (p)
536 __put_super(p);
537 p = sb;
538 }
539 if (p)
540 __put_super(p);
541 spin_unlock(&sb_lock);
542}
543
544
545
546
547
548
549
550
551
552
553void iterate_supers_type(struct file_system_type *type,
554 void (*f)(struct super_block *, void *), void *arg)
555{
556 struct super_block *sb, *p = NULL;
557 struct hlist_node *node;
558
559 spin_lock(&sb_lock);
560 hlist_for_each_entry(sb, node, &type->fs_supers, s_instances) {
561 sb->s_count++;
562 spin_unlock(&sb_lock);
563
564 down_read(&sb->s_umount);
565 if (sb->s_root && (sb->s_flags & MS_BORN))
566 f(sb, arg);
567 up_read(&sb->s_umount);
568
569 spin_lock(&sb_lock);
570 if (p)
571 __put_super(p);
572 p = sb;
573 }
574 if (p)
575 __put_super(p);
576 spin_unlock(&sb_lock);
577}
578
579EXPORT_SYMBOL(iterate_supers_type);
580
581
582
583
584
585
586
587
588
589struct super_block *get_super(struct block_device *bdev)
590{
591 struct super_block *sb;
592
593 if (!bdev)
594 return NULL;
595
596 spin_lock(&sb_lock);
597rescan:
598 list_for_each_entry(sb, &super_blocks, s_list) {
599 if (hlist_unhashed(&sb->s_instances))
600 continue;
601 if (sb->s_bdev == bdev) {
602 sb->s_count++;
603 spin_unlock(&sb_lock);
604 down_read(&sb->s_umount);
605
606 if (sb->s_root && (sb->s_flags & MS_BORN))
607 return sb;
608 up_read(&sb->s_umount);
609
610 spin_lock(&sb_lock);
611 __put_super(sb);
612 goto rescan;
613 }
614 }
615 spin_unlock(&sb_lock);
616 return NULL;
617}
618
619EXPORT_SYMBOL(get_super);
620
621
622
623
624
625
626
627
628
629
630struct super_block *get_super_thawed(struct block_device *bdev)
631{
632 while (1) {
633 struct super_block *s = get_super(bdev);
634 if (!s || s->s_writers.frozen == SB_UNFROZEN)
635 return s;
636 up_read(&s->s_umount);
637 wait_event(s->s_writers.wait_unfrozen,
638 s->s_writers.frozen == SB_UNFROZEN);
639 put_super(s);
640 }
641}
642EXPORT_SYMBOL(get_super_thawed);
643
644
645
646
647
648
649
650
651
652struct super_block *get_active_super(struct block_device *bdev)
653{
654 struct super_block *sb;
655
656 if (!bdev)
657 return NULL;
658
659restart:
660 spin_lock(&sb_lock);
661 list_for_each_entry(sb, &super_blocks, s_list) {
662 if (hlist_unhashed(&sb->s_instances))
663 continue;
664 if (sb->s_bdev == bdev) {
665 if (grab_super(sb))
666 return sb;
667 else
668 goto restart;
669 }
670 }
671 spin_unlock(&sb_lock);
672 return NULL;
673}
674
675struct super_block *user_get_super(dev_t dev)
676{
677 struct super_block *sb;
678
679 spin_lock(&sb_lock);
680rescan:
681 list_for_each_entry(sb, &super_blocks, s_list) {
682 if (hlist_unhashed(&sb->s_instances))
683 continue;
684 if (sb->s_dev == dev) {
685 sb->s_count++;
686 spin_unlock(&sb_lock);
687 down_read(&sb->s_umount);
688
689 if (sb->s_root && (sb->s_flags & MS_BORN))
690 return sb;
691 up_read(&sb->s_umount);
692
693 spin_lock(&sb_lock);
694 __put_super(sb);
695 goto rescan;
696 }
697 }
698 spin_unlock(&sb_lock);
699 return NULL;
700}
701
702
703
704
705
706
707
708
709
710
711int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
712{
713 int retval;
714 int remount_ro;
715
716 if (sb->s_writers.frozen != SB_UNFROZEN)
717 return -EBUSY;
718
719#ifdef CONFIG_BLOCK
720 if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev))
721 return -EACCES;
722#endif
723
724 if (flags & MS_RDONLY)
725 acct_auto_close(sb);
726 shrink_dcache_sb(sb);
727 sync_filesystem(sb);
728
729 remount_ro = (flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY);
730
731
732
733 if (remount_ro) {
734 if (force) {
735 mark_files_ro(sb);
736 } else {
737 retval = sb_prepare_remount_readonly(sb);
738 if (retval)
739 return retval;
740 }
741 }
742
743 if (sb->s_op->remount_fs) {
744 retval = sb->s_op->remount_fs(sb, &flags, data);
745 if (retval) {
746 if (!force)
747 goto cancel_readonly;
748
749 WARN(1, "forced remount of a %s fs returned %i\n",
750 sb->s_type->name, retval);
751 }
752 }
753 sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK);
754
755 smp_wmb();
756 sb->s_readonly_remount = 0;
757
758
759
760
761
762
763
764
765
766 if (remount_ro && sb->s_bdev)
767 invalidate_bdev(sb->s_bdev);
768 return 0;
769
770cancel_readonly:
771 sb->s_readonly_remount = 0;
772 return retval;
773}
774
775static void do_emergency_remount(struct work_struct *work)
776{
777 struct super_block *sb, *p = NULL;
778
779 spin_lock(&sb_lock);
780 list_for_each_entry(sb, &super_blocks, s_list) {
781 if (hlist_unhashed(&sb->s_instances))
782 continue;
783 sb->s_count++;
784 spin_unlock(&sb_lock);
785 down_write(&sb->s_umount);
786 if (sb->s_root && sb->s_bdev && (sb->s_flags & MS_BORN) &&
787 !(sb->s_flags & MS_RDONLY)) {
788
789
790
791 do_remount_sb(sb, MS_RDONLY, NULL, 1);
792 }
793 up_write(&sb->s_umount);
794 spin_lock(&sb_lock);
795 if (p)
796 __put_super(p);
797 p = sb;
798 }
799 if (p)
800 __put_super(p);
801 spin_unlock(&sb_lock);
802 kfree(work);
803 printk("Emergency Remount complete\n");
804}
805
806void emergency_remount(void)
807{
808 struct work_struct *work;
809
810 work = kmalloc(sizeof(*work), GFP_ATOMIC);
811 if (work) {
812 INIT_WORK(work, do_emergency_remount);
813 schedule_work(work);
814 }
815}
816
817
818
819
820
821
822static DEFINE_IDA(unnamed_dev_ida);
823static DEFINE_SPINLOCK(unnamed_dev_lock);
824static int unnamed_dev_start = 0;
825
826int get_anon_bdev(dev_t *p)
827{
828 int dev;
829 int error;
830
831 retry:
832 if (ida_pre_get(&unnamed_dev_ida, GFP_ATOMIC) == 0)
833 return -ENOMEM;
834 spin_lock(&unnamed_dev_lock);
835 error = ida_get_new_above(&unnamed_dev_ida, unnamed_dev_start, &dev);
836 if (!error)
837 unnamed_dev_start = dev + 1;
838 spin_unlock(&unnamed_dev_lock);
839 if (error == -EAGAIN)
840
841 goto retry;
842 else if (error)
843 return -EAGAIN;
844
845 if ((dev & MAX_IDR_MASK) == (1 << MINORBITS)) {
846 spin_lock(&unnamed_dev_lock);
847 ida_remove(&unnamed_dev_ida, dev);
848 if (unnamed_dev_start > dev)
849 unnamed_dev_start = dev;
850 spin_unlock(&unnamed_dev_lock);
851 return -EMFILE;
852 }
853 *p = MKDEV(0, dev & MINORMASK);
854 return 0;
855}
856EXPORT_SYMBOL(get_anon_bdev);
857
858void free_anon_bdev(dev_t dev)
859{
860 int slot = MINOR(dev);
861 spin_lock(&unnamed_dev_lock);
862 ida_remove(&unnamed_dev_ida, slot);
863 if (slot < unnamed_dev_start)
864 unnamed_dev_start = slot;
865 spin_unlock(&unnamed_dev_lock);
866}
867EXPORT_SYMBOL(free_anon_bdev);
868
869int set_anon_super(struct super_block *s, void *data)
870{
871 int error = get_anon_bdev(&s->s_dev);
872 if (!error)
873 s->s_bdi = &noop_backing_dev_info;
874 return error;
875}
876
877EXPORT_SYMBOL(set_anon_super);
878
879void kill_anon_super(struct super_block *sb)
880{
881 dev_t dev = sb->s_dev;
882 generic_shutdown_super(sb);
883 free_anon_bdev(dev);
884}
885
886EXPORT_SYMBOL(kill_anon_super);
887
888void kill_litter_super(struct super_block *sb)
889{
890 if (sb->s_root)
891 d_genocide(sb->s_root);
892 kill_anon_super(sb);
893}
894
895EXPORT_SYMBOL(kill_litter_super);
896
897static int ns_test_super(struct super_block *sb, void *data)
898{
899 return sb->s_fs_info == data;
900}
901
902static int ns_set_super(struct super_block *sb, void *data)
903{
904 sb->s_fs_info = data;
905 return set_anon_super(sb, NULL);
906}
907
908struct dentry *mount_ns(struct file_system_type *fs_type, int flags,
909 void *data, int (*fill_super)(struct super_block *, void *, int))
910{
911 struct super_block *sb;
912
913 sb = sget(fs_type, ns_test_super, ns_set_super, flags, data);
914 if (IS_ERR(sb))
915 return ERR_CAST(sb);
916
917 if (!sb->s_root) {
918 int err;
919 err = fill_super(sb, data, flags & MS_SILENT ? 1 : 0);
920 if (err) {
921 deactivate_locked_super(sb);
922 return ERR_PTR(err);
923 }
924
925 sb->s_flags |= MS_ACTIVE;
926 }
927
928 return dget(sb->s_root);
929}
930
931EXPORT_SYMBOL(mount_ns);
932
933#ifdef CONFIG_BLOCK
934static int set_bdev_super(struct super_block *s, void *data)
935{
936 s->s_bdev = data;
937 s->s_dev = s->s_bdev->bd_dev;
938
939
940
941
942
943 s->s_bdi = &bdev_get_queue(s->s_bdev)->backing_dev_info;
944 return 0;
945}
946
947static int test_bdev_super(struct super_block *s, void *data)
948{
949 return (void *)s->s_bdev == data;
950}
951
952struct dentry *mount_bdev(struct file_system_type *fs_type,
953 int flags, const char *dev_name, void *data,
954 int (*fill_super)(struct super_block *, void *, int))
955{
956 struct block_device *bdev;
957 struct super_block *s;
958 fmode_t mode = FMODE_READ | FMODE_EXCL;
959 int error = 0;
960
961 if (!(flags & MS_RDONLY))
962 mode |= FMODE_WRITE;
963
964 bdev = blkdev_get_by_path(dev_name, mode, fs_type);
965 if (IS_ERR(bdev))
966 return ERR_CAST(bdev);
967
968
969
970
971
972
973 mutex_lock(&bdev->bd_fsfreeze_mutex);
974 if (bdev->bd_fsfreeze_count > 0) {
975 mutex_unlock(&bdev->bd_fsfreeze_mutex);
976 error = -EBUSY;
977 goto error_bdev;
978 }
979 s = sget(fs_type, test_bdev_super, set_bdev_super, flags | MS_NOSEC,
980 bdev);
981 mutex_unlock(&bdev->bd_fsfreeze_mutex);
982 if (IS_ERR(s))
983 goto error_s;
984
985 if (s->s_root) {
986 if ((flags ^ s->s_flags) & MS_RDONLY) {
987 deactivate_locked_super(s);
988 error = -EBUSY;
989 goto error_bdev;
990 }
991
992
993
994
995
996
997
998
999 up_write(&s->s_umount);
1000 blkdev_put(bdev, mode);
1001 down_write(&s->s_umount);
1002 } else {
1003 char b[BDEVNAME_SIZE];
1004
1005 s->s_mode = mode;
1006 strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id));
1007 sb_set_blocksize(s, block_size(bdev));
1008 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
1009 if (error) {
1010 deactivate_locked_super(s);
1011 goto error;
1012 }
1013
1014 s->s_flags |= MS_ACTIVE;
1015 bdev->bd_super = s;
1016 }
1017
1018 return dget(s->s_root);
1019
1020error_s:
1021 error = PTR_ERR(s);
1022error_bdev:
1023 blkdev_put(bdev, mode);
1024error:
1025 return ERR_PTR(error);
1026}
1027EXPORT_SYMBOL(mount_bdev);
1028
1029void kill_block_super(struct super_block *sb)
1030{
1031 struct block_device *bdev = sb->s_bdev;
1032 fmode_t mode = sb->s_mode;
1033
1034 bdev->bd_super = NULL;
1035 generic_shutdown_super(sb);
1036 sync_blockdev(bdev);
1037 WARN_ON_ONCE(!(mode & FMODE_EXCL));
1038 blkdev_put(bdev, mode | FMODE_EXCL);
1039}
1040
1041EXPORT_SYMBOL(kill_block_super);
1042#endif
1043
1044struct dentry *mount_nodev(struct file_system_type *fs_type,
1045 int flags, void *data,
1046 int (*fill_super)(struct super_block *, void *, int))
1047{
1048 int error;
1049 struct super_block *s = sget(fs_type, NULL, set_anon_super, flags, NULL);
1050
1051 if (IS_ERR(s))
1052 return ERR_CAST(s);
1053
1054 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
1055 if (error) {
1056 deactivate_locked_super(s);
1057 return ERR_PTR(error);
1058 }
1059 s->s_flags |= MS_ACTIVE;
1060 return dget(s->s_root);
1061}
1062EXPORT_SYMBOL(mount_nodev);
1063
1064static int compare_single(struct super_block *s, void *p)
1065{
1066 return 1;
1067}
1068
1069struct dentry *mount_single(struct file_system_type *fs_type,
1070 int flags, void *data,
1071 int (*fill_super)(struct super_block *, void *, int))
1072{
1073 struct super_block *s;
1074 int error;
1075
1076 s = sget(fs_type, compare_single, set_anon_super, flags, NULL);
1077 if (IS_ERR(s))
1078 return ERR_CAST(s);
1079 if (!s->s_root) {
1080 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
1081 if (error) {
1082 deactivate_locked_super(s);
1083 return ERR_PTR(error);
1084 }
1085 s->s_flags |= MS_ACTIVE;
1086 } else {
1087 do_remount_sb(s, flags, data, 0);
1088 }
1089 return dget(s->s_root);
1090}
1091EXPORT_SYMBOL(mount_single);
1092
1093struct dentry *
1094mount_fs(struct file_system_type *type, int flags, const char *name, void *data)
1095{
1096 struct dentry *root;
1097 struct super_block *sb;
1098 char *secdata = NULL;
1099 int error = -ENOMEM;
1100
1101 if (data && !(type->fs_flags & FS_BINARY_MOUNTDATA)) {
1102 secdata = alloc_secdata();
1103 if (!secdata)
1104 goto out;
1105
1106 error = security_sb_copy_data(data, secdata);
1107 if (error)
1108 goto out_free_secdata;
1109 }
1110
1111 root = type->mount(type, flags, name, data);
1112 if (IS_ERR(root)) {
1113 error = PTR_ERR(root);
1114 goto out_free_secdata;
1115 }
1116 sb = root->d_sb;
1117 BUG_ON(!sb);
1118 WARN_ON(!sb->s_bdi);
1119 WARN_ON(sb->s_bdi == &default_backing_dev_info);
1120 sb->s_flags |= MS_BORN;
1121
1122 error = security_sb_kern_mount(sb, flags, secdata);
1123 if (error)
1124 goto out_sb;
1125
1126
1127
1128
1129
1130
1131
1132 WARN((sb->s_maxbytes < 0), "%s set sb->s_maxbytes to "
1133 "negative value (%lld)\n", type->name, sb->s_maxbytes);
1134
1135 up_write(&sb->s_umount);
1136 free_secdata(secdata);
1137 return root;
1138out_sb:
1139 dput(root);
1140 deactivate_locked_super(sb);
1141out_free_secdata:
1142 free_secdata(secdata);
1143out:
1144 return ERR_PTR(error);
1145}
1146
1147
1148
1149
1150
1151void __sb_end_write(struct super_block *sb, int level)
1152{
1153 percpu_counter_dec(&sb->s_writers.counter[level-1]);
1154
1155
1156
1157
1158 smp_mb();
1159 if (waitqueue_active(&sb->s_writers.wait))
1160 wake_up(&sb->s_writers.wait);
1161 rwsem_release(&sb->s_writers.lock_map[level-1], 1, _RET_IP_);
1162}
1163EXPORT_SYMBOL(__sb_end_write);
1164
1165#ifdef CONFIG_LOCKDEP
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175static void acquire_freeze_lock(struct super_block *sb, int level, bool trylock,
1176 unsigned long ip)
1177{
1178 int i;
1179
1180 if (!trylock) {
1181 for (i = 0; i < level - 1; i++)
1182 if (lock_is_held(&sb->s_writers.lock_map[i])) {
1183 trylock = true;
1184 break;
1185 }
1186 }
1187 rwsem_acquire_read(&sb->s_writers.lock_map[level-1], 0, trylock, ip);
1188}
1189#endif
1190
1191
1192
1193
1194
1195int __sb_start_write(struct super_block *sb, int level, bool wait)
1196{
1197retry:
1198 if (unlikely(sb->s_writers.frozen >= level)) {
1199 if (!wait)
1200 return 0;
1201 wait_event(sb->s_writers.wait_unfrozen,
1202 sb->s_writers.frozen < level);
1203 }
1204
1205#ifdef CONFIG_LOCKDEP
1206 acquire_freeze_lock(sb, level, !wait, _RET_IP_);
1207#endif
1208 percpu_counter_inc(&sb->s_writers.counter[level-1]);
1209
1210
1211
1212
1213 smp_mb();
1214 if (unlikely(sb->s_writers.frozen >= level)) {
1215 __sb_end_write(sb, level);
1216 goto retry;
1217 }
1218 return 1;
1219}
1220EXPORT_SYMBOL(__sb_start_write);
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232static void sb_wait_write(struct super_block *sb, int level)
1233{
1234 s64 writers;
1235
1236
1237
1238
1239
1240 rwsem_acquire(&sb->s_writers.lock_map[level-1], 0, 0, _THIS_IP_);
1241 rwsem_release(&sb->s_writers.lock_map[level-1], 1, _THIS_IP_);
1242
1243 do {
1244 DEFINE_WAIT(wait);
1245
1246
1247
1248
1249
1250 prepare_to_wait(&sb->s_writers.wait, &wait,
1251 TASK_UNINTERRUPTIBLE);
1252
1253 writers = percpu_counter_sum(&sb->s_writers.counter[level-1]);
1254 if (writers)
1255 schedule();
1256
1257 finish_wait(&sb->s_writers.wait, &wait);
1258 } while (writers);
1259}
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294int freeze_super(struct super_block *sb)
1295{
1296 int ret;
1297
1298 atomic_inc(&sb->s_active);
1299 down_write(&sb->s_umount);
1300 if (sb->s_writers.frozen != SB_UNFROZEN) {
1301 deactivate_locked_super(sb);
1302 return -EBUSY;
1303 }
1304
1305 if (!(sb->s_flags & MS_BORN)) {
1306 up_write(&sb->s_umount);
1307 return 0;
1308 }
1309
1310 if (sb->s_flags & MS_RDONLY) {
1311
1312 sb->s_writers.frozen = SB_FREEZE_COMPLETE;
1313 up_write(&sb->s_umount);
1314 return 0;
1315 }
1316
1317
1318 sb->s_writers.frozen = SB_FREEZE_WRITE;
1319 smp_wmb();
1320
1321
1322 up_write(&sb->s_umount);
1323
1324 sb_wait_write(sb, SB_FREEZE_WRITE);
1325
1326
1327 down_write(&sb->s_umount);
1328 sb->s_writers.frozen = SB_FREEZE_PAGEFAULT;
1329 smp_wmb();
1330
1331 sb_wait_write(sb, SB_FREEZE_PAGEFAULT);
1332
1333
1334 sync_filesystem(sb);
1335
1336
1337 sb->s_writers.frozen = SB_FREEZE_FS;
1338 smp_wmb();
1339 sb_wait_write(sb, SB_FREEZE_FS);
1340
1341 if (sb->s_op->freeze_fs) {
1342 ret = sb->s_op->freeze_fs(sb);
1343 if (ret) {
1344 printk(KERN_ERR
1345 "VFS:Filesystem freeze failed\n");
1346 sb->s_writers.frozen = SB_UNFROZEN;
1347 smp_wmb();
1348 wake_up(&sb->s_writers.wait_unfrozen);
1349 deactivate_locked_super(sb);
1350 return ret;
1351 }
1352 }
1353
1354
1355
1356
1357 sb->s_writers.frozen = SB_FREEZE_COMPLETE;
1358 up_write(&sb->s_umount);
1359 return 0;
1360}
1361EXPORT_SYMBOL(freeze_super);
1362
1363
1364
1365
1366
1367
1368
1369int thaw_super(struct super_block *sb)
1370{
1371 int error;
1372
1373 down_write(&sb->s_umount);
1374 if (sb->s_writers.frozen == SB_UNFROZEN) {
1375 up_write(&sb->s_umount);
1376 return -EINVAL;
1377 }
1378
1379 if (sb->s_flags & MS_RDONLY)
1380 goto out;
1381
1382 if (sb->s_op->unfreeze_fs) {
1383 error = sb->s_op->unfreeze_fs(sb);
1384 if (error) {
1385 printk(KERN_ERR
1386 "VFS:Filesystem thaw failed\n");
1387 up_write(&sb->s_umount);
1388 return error;
1389 }
1390 }
1391
1392out:
1393 sb->s_writers.frozen = SB_UNFROZEN;
1394 smp_wmb();
1395 wake_up(&sb->s_writers.wait_unfrozen);
1396 deactivate_locked_super(sb);
1397
1398 return 0;
1399}
1400EXPORT_SYMBOL(thaw_super);
1401