Lines Matching full:sb

43 static int thaw_super_locked(struct super_block *sb);
55 * One thing we have to be careful of with a per-sb shrinker is that we don't
64 struct super_block *sb; in super_cache_scan() local
71 sb = container_of(shrink, struct super_block, s_shrink); in super_cache_scan()
80 if (!trylock_super(sb)) in super_cache_scan()
83 if (sb->s_op->nr_cached_objects) in super_cache_scan()
84 fs_objects = sb->s_op->nr_cached_objects(sb, sc); in super_cache_scan()
86 inodes = list_lru_shrink_count(&sb->s_inode_lru, sc); in super_cache_scan()
87 dentries = list_lru_shrink_count(&sb->s_dentry_lru, sc); in super_cache_scan()
105 freed = prune_dcache_sb(sb, sc); in super_cache_scan()
107 freed += prune_icache_sb(sb, sc); in super_cache_scan()
111 freed += sb->s_op->free_cached_objects(sb, sc); in super_cache_scan()
114 up_read(&sb->s_umount); in super_cache_scan()
121 struct super_block *sb; in super_cache_count() local
124 sb = container_of(shrink, struct super_block, s_shrink); in super_cache_count()
140 if (!(sb->s_flags & SB_BORN)) in super_cache_count()
144 if (sb->s_op && sb->s_op->nr_cached_objects) in super_cache_count()
145 total_objects = sb->s_op->nr_cached_objects(sb, sc); in super_cache_count()
147 total_objects += list_lru_shrink_count(&sb->s_dentry_lru, sc); in super_cache_count()
148 total_objects += list_lru_shrink_count(&sb->s_inode_lru, sc); in super_cache_count()
217 * When it cannot find a suitable sb, it allocates a new in alloc_super()
305 * @sb: superblock in question
310 void put_super(struct super_block *sb) in put_super() argument
313 __put_super(sb); in put_super()
401 * @sb: reference we are trying to grab
416 bool trylock_super(struct super_block *sb) in trylock_super() argument
418 if (down_read_trylock(&sb->s_umount)) { in trylock_super()
419 if (!hlist_unhashed(&sb->s_instances) && in trylock_super()
420 sb->s_root && (sb->s_flags & SB_BORN)) in trylock_super()
422 up_read(&sb->s_umount); in trylock_super()
430 * @sb: superblock to kill
442 void generic_shutdown_super(struct super_block *sb) in generic_shutdown_super() argument
444 const struct super_operations *sop = sb->s_op; in generic_shutdown_super()
446 if (sb->s_root) { in generic_shutdown_super()
447 shrink_dcache_for_umount(sb); in generic_shutdown_super()
448 sync_filesystem(sb); in generic_shutdown_super()
449 sb->s_flags &= ~SB_ACTIVE; in generic_shutdown_super()
454 evict_inodes(sb); in generic_shutdown_super()
456 fsnotify_sb_delete(sb); in generic_shutdown_super()
457 security_sb_delete(sb); in generic_shutdown_super()
459 if (sb->s_dio_done_wq) { in generic_shutdown_super()
460 destroy_workqueue(sb->s_dio_done_wq); in generic_shutdown_super()
461 sb->s_dio_done_wq = NULL; in generic_shutdown_super()
465 sop->put_super(sb); in generic_shutdown_super()
467 if (!list_empty(&sb->s_inodes)) { in generic_shutdown_super()
470 sb->s_id); in generic_shutdown_super()
475 hlist_del_init(&sb->s_instances); in generic_shutdown_super()
477 up_write(&sb->s_umount); in generic_shutdown_super()
478 if (sb->s_bdi != &noop_backing_dev_info) { in generic_shutdown_super()
479 bdi_put(sb->s_bdi); in generic_shutdown_super()
480 sb->s_bdi = &noop_backing_dev_info; in generic_shutdown_super()
637 void drop_super(struct super_block *sb) in drop_super() argument
639 up_read(&sb->s_umount); in drop_super()
640 put_super(sb); in drop_super()
645 void drop_super_exclusive(struct super_block *sb) in drop_super_exclusive() argument
647 up_write(&sb->s_umount); in drop_super_exclusive()
648 put_super(sb); in drop_super_exclusive()
654 struct super_block *sb, *p = NULL; in __iterate_supers() local
657 list_for_each_entry(sb, &super_blocks, s_list) { in __iterate_supers()
658 if (hlist_unhashed(&sb->s_instances)) in __iterate_supers()
660 sb->s_count++; in __iterate_supers()
663 f(sb); in __iterate_supers()
668 p = sb; in __iterate_supers()
684 struct super_block *sb, *p = NULL; in iterate_supers() local
687 list_for_each_entry(sb, &super_blocks, s_list) { in iterate_supers()
688 if (hlist_unhashed(&sb->s_instances)) in iterate_supers()
690 sb->s_count++; in iterate_supers()
693 down_read(&sb->s_umount); in iterate_supers()
694 if (sb->s_root && (sb->s_flags & SB_BORN)) in iterate_supers()
695 f(sb, arg); in iterate_supers()
696 up_read(&sb->s_umount); in iterate_supers()
701 p = sb; in iterate_supers()
720 struct super_block *sb, *p = NULL; in iterate_supers_type() local
723 hlist_for_each_entry(sb, &type->fs_supers, s_instances) { in iterate_supers_type()
724 sb->s_count++; in iterate_supers_type()
727 down_read(&sb->s_umount); in iterate_supers_type()
728 if (sb->s_root && (sb->s_flags & SB_BORN)) in iterate_supers_type()
729 f(sb, arg); in iterate_supers_type()
730 up_read(&sb->s_umount); in iterate_supers_type()
735 p = sb; in iterate_supers_type()
753 struct super_block *sb; in get_super() local
760 list_for_each_entry(sb, &super_blocks, s_list) { in get_super()
761 if (hlist_unhashed(&sb->s_instances)) in get_super()
763 if (sb->s_bdev == bdev) { in get_super()
764 sb->s_count++; in get_super()
766 down_read(&sb->s_umount); in get_super()
768 if (sb->s_root && (sb->s_flags & SB_BORN)) in get_super()
769 return sb; in get_super()
770 up_read(&sb->s_umount); in get_super()
773 __put_super(sb); in get_super()
791 struct super_block *sb; in get_active_super() local
798 list_for_each_entry(sb, &super_blocks, s_list) { in get_active_super()
799 if (hlist_unhashed(&sb->s_instances)) in get_active_super()
801 if (sb->s_bdev == bdev) { in get_active_super()
802 if (!grab_super(sb)) in get_active_super()
804 up_write(&sb->s_umount); in get_active_super()
805 return sb; in get_active_super()
814 struct super_block *sb; in user_get_super() local
818 list_for_each_entry(sb, &super_blocks, s_list) { in user_get_super()
819 if (hlist_unhashed(&sb->s_instances)) in user_get_super()
821 if (sb->s_dev == dev) { in user_get_super()
822 sb->s_count++; in user_get_super()
825 down_write(&sb->s_umount); in user_get_super()
827 down_read(&sb->s_umount); in user_get_super()
829 if (sb->s_root && (sb->s_flags & SB_BORN)) in user_get_super()
830 return sb; in user_get_super()
832 up_write(&sb->s_umount); in user_get_super()
834 up_read(&sb->s_umount); in user_get_super()
837 __put_super(sb); in user_get_super()
853 struct super_block *sb = fc->root->d_sb; in reconfigure_super() local
860 if (sb->s_writers.frozen != SB_UNFROZEN) in reconfigure_super()
863 retval = security_sb_remount(sb, fc->security); in reconfigure_super()
869 if (!(fc->sb_flags & SB_RDONLY) && sb->s_bdev && in reconfigure_super()
870 bdev_read_only(sb->s_bdev)) in reconfigure_super()
874 remount_ro = (fc->sb_flags & SB_RDONLY) && !sb_rdonly(sb); in reconfigure_super()
878 if (!hlist_empty(&sb->s_pins)) { in reconfigure_super()
879 up_write(&sb->s_umount); in reconfigure_super()
880 group_pin_kill(&sb->s_pins); in reconfigure_super()
881 down_write(&sb->s_umount); in reconfigure_super()
882 if (!sb->s_root) in reconfigure_super()
884 if (sb->s_writers.frozen != SB_UNFROZEN) in reconfigure_super()
886 remount_ro = !sb_rdonly(sb); in reconfigure_super()
889 shrink_dcache_sb(sb); in reconfigure_super()
891 /* If we are reconfiguring to RDONLY and current sb is read/write, in reconfigure_super()
896 sb->s_readonly_remount = 1; in reconfigure_super()
899 retval = sb_prepare_remount_readonly(sb); in reconfigure_super()
912 sb->s_type->name, retval); in reconfigure_super()
916 WRITE_ONCE(sb->s_flags, ((sb->s_flags & ~fc->sb_flags_mask) | in reconfigure_super()
920 sb->s_readonly_remount = 0; in reconfigure_super()
930 if (remount_ro && sb->s_bdev) in reconfigure_super()
931 invalidate_bdev(sb->s_bdev); in reconfigure_super()
935 sb->s_readonly_remount = 0; in reconfigure_super()
939 static void do_emergency_remount_callback(struct super_block *sb) in do_emergency_remount_callback() argument
941 down_write(&sb->s_umount); in do_emergency_remount_callback()
942 if (sb->s_root && sb->s_bdev && (sb->s_flags & SB_BORN) && in do_emergency_remount_callback()
943 !sb_rdonly(sb)) { in do_emergency_remount_callback()
946 fc = fs_context_for_reconfigure(sb->s_root, in do_emergency_remount_callback()
954 up_write(&sb->s_umount); in do_emergency_remount_callback()
975 static void do_thaw_all_callback(struct super_block *sb) in do_thaw_all_callback() argument
977 down_write(&sb->s_umount); in do_thaw_all_callback()
978 if (sb->s_root && sb->s_flags & SB_BORN) { in do_thaw_all_callback()
979 emergency_thaw_bdev(sb); in do_thaw_all_callback()
980 thaw_super_locked(sb); in do_thaw_all_callback()
982 up_write(&sb->s_umount); in do_thaw_all_callback()
1054 void kill_anon_super(struct super_block *sb) in kill_anon_super() argument
1056 dev_t dev = sb->s_dev; in kill_anon_super()
1057 generic_shutdown_super(sb); in kill_anon_super()
1062 void kill_litter_super(struct super_block *sb) in kill_litter_super() argument
1064 if (sb->s_root) in kill_litter_super()
1065 d_genocide(sb->s_root); in kill_litter_super()
1066 kill_anon_super(sb); in kill_litter_super()
1070 int set_anon_super_fc(struct super_block *sb, struct fs_context *fc) in set_anon_super_fc() argument
1072 return set_anon_super(sb, NULL); in set_anon_super_fc()
1076 static int test_keyed_super(struct super_block *sb, struct fs_context *fc) in test_keyed_super() argument
1078 return sb->s_fs_info == fc->s_fs_info; in test_keyed_super()
1113 int (*fill_super)(struct super_block *sb, in vfs_get_super() argument
1117 struct super_block *sb; in vfs_get_super() local
1135 sb = sget_fc(fc, test, set_anon_super_fc); in vfs_get_super()
1136 if (IS_ERR(sb)) in vfs_get_super()
1137 return PTR_ERR(sb); in vfs_get_super()
1139 if (!sb->s_root) { in vfs_get_super()
1140 err = fill_super(sb, fc); in vfs_get_super()
1144 sb->s_flags |= SB_ACTIVE; in vfs_get_super()
1145 fc->root = dget(sb->s_root); in vfs_get_super()
1147 fc->root = dget(sb->s_root); in vfs_get_super()
1161 deactivate_locked_super(sb); in vfs_get_super()
1167 int (*fill_super)(struct super_block *sb, in get_tree_nodev() argument
1175 int (*fill_super)(struct super_block *sb, in get_tree_single() argument
1183 int (*fill_super)(struct super_block *sb, in get_tree_single_reconf() argument
1191 int (*fill_super)(struct super_block *sb, in get_tree_keyed() argument
1389 void kill_block_super(struct super_block *sb) in kill_block_super() argument
1391 struct block_device *bdev = sb->s_bdev; in kill_block_super()
1392 fmode_t mode = sb->s_mode; in kill_block_super()
1395 generic_shutdown_super(sb); in kill_block_super()
1489 struct super_block *sb; in vfs_get_tree() local
1511 sb = fc->root->d_sb; in vfs_get_tree()
1512 WARN_ON(!sb->s_bdi); in vfs_get_tree()
1521 sb->s_flags |= SB_BORN; in vfs_get_tree()
1523 error = security_sb_set_mnt_opts(sb, fc->security, 0, NULL); in vfs_get_tree()
1535 WARN((sb->s_maxbytes < 0), "%s set sb->s_maxbytes to " in vfs_get_tree()
1536 "negative value (%lld)\n", fc->fs_type->name, sb->s_maxbytes); in vfs_get_tree()
1546 int super_setup_bdi_name(struct super_block *sb, char *fmt, ...) in super_setup_bdi_name() argument
1563 WARN_ON(sb->s_bdi != &noop_backing_dev_info); in super_setup_bdi_name()
1564 sb->s_bdi = bdi; in super_setup_bdi_name()
1574 int super_setup_bdi(struct super_block *sb) in super_setup_bdi() argument
1578 return super_setup_bdi_name(sb, "%.28s-%ld", sb->s_type->name, in super_setup_bdi()
1585 * @sb: the super for which we wait
1591 static void sb_wait_write(struct super_block *sb, int level) in sb_wait_write() argument
1593 percpu_down_write(sb->s_writers.rw_sem + level-1); in sb_wait_write()
1600 static void lockdep_sb_freeze_release(struct super_block *sb) in lockdep_sb_freeze_release() argument
1605 percpu_rwsem_release(sb->s_writers.rw_sem + level, 0, _THIS_IP_); in lockdep_sb_freeze_release()
1609 * Tell lockdep we are holding these locks before we call ->unfreeze_fs(sb).
1611 static void lockdep_sb_freeze_acquire(struct super_block *sb) in lockdep_sb_freeze_acquire() argument
1616 percpu_rwsem_acquire(sb->s_writers.rw_sem + level, 0, _THIS_IP_); in lockdep_sb_freeze_acquire()
1619 static void sb_freeze_unlock(struct super_block *sb) in sb_freeze_unlock() argument
1624 percpu_up_write(sb->s_writers.rw_sem + level); in sb_freeze_unlock()
1629 * @sb: the super to lock
1635 * During this function, sb->s_writers.frozen goes through these values:
1658 * sb->s_writers.frozen is protected by sb->s_umount.
1660 int freeze_super(struct super_block *sb) in freeze_super() argument
1664 atomic_inc(&sb->s_active); in freeze_super()
1665 down_write(&sb->s_umount); in freeze_super()
1666 if (sb->s_writers.frozen != SB_UNFROZEN) { in freeze_super()
1667 deactivate_locked_super(sb); in freeze_super()
1671 if (!(sb->s_flags & SB_BORN)) { in freeze_super()
1672 up_write(&sb->s_umount); in freeze_super()
1676 if (sb_rdonly(sb)) { in freeze_super()
1678 sb->s_writers.frozen = SB_FREEZE_COMPLETE; in freeze_super()
1679 up_write(&sb->s_umount); in freeze_super()
1683 sb->s_writers.frozen = SB_FREEZE_WRITE; in freeze_super()
1685 up_write(&sb->s_umount); in freeze_super()
1686 sb_wait_write(sb, SB_FREEZE_WRITE); in freeze_super()
1687 down_write(&sb->s_umount); in freeze_super()
1690 sb->s_writers.frozen = SB_FREEZE_PAGEFAULT; in freeze_super()
1691 sb_wait_write(sb, SB_FREEZE_PAGEFAULT); in freeze_super()
1694 sync_filesystem(sb); in freeze_super()
1697 sb->s_writers.frozen = SB_FREEZE_FS; in freeze_super()
1698 sb_wait_write(sb, SB_FREEZE_FS); in freeze_super()
1700 if (sb->s_op->freeze_fs) { in freeze_super()
1701 ret = sb->s_op->freeze_fs(sb); in freeze_super()
1705 sb->s_writers.frozen = SB_UNFROZEN; in freeze_super()
1706 sb_freeze_unlock(sb); in freeze_super()
1707 wake_up(&sb->s_writers.wait_unfrozen); in freeze_super()
1708 deactivate_locked_super(sb); in freeze_super()
1716 sb->s_writers.frozen = SB_FREEZE_COMPLETE; in freeze_super()
1717 lockdep_sb_freeze_release(sb); in freeze_super()
1718 up_write(&sb->s_umount); in freeze_super()
1723 static int thaw_super_locked(struct super_block *sb) in thaw_super_locked() argument
1727 if (sb->s_writers.frozen != SB_FREEZE_COMPLETE) { in thaw_super_locked()
1728 up_write(&sb->s_umount); in thaw_super_locked()
1732 if (sb_rdonly(sb)) { in thaw_super_locked()
1733 sb->s_writers.frozen = SB_UNFROZEN; in thaw_super_locked()
1737 lockdep_sb_freeze_acquire(sb); in thaw_super_locked()
1739 if (sb->s_op->unfreeze_fs) { in thaw_super_locked()
1740 error = sb->s_op->unfreeze_fs(sb); in thaw_super_locked()
1744 lockdep_sb_freeze_release(sb); in thaw_super_locked()
1745 up_write(&sb->s_umount); in thaw_super_locked()
1750 sb->s_writers.frozen = SB_UNFROZEN; in thaw_super_locked()
1751 sb_freeze_unlock(sb); in thaw_super_locked()
1753 wake_up(&sb->s_writers.wait_unfrozen); in thaw_super_locked()
1754 deactivate_locked_super(sb); in thaw_super_locked()
1760 * @sb: the super to thaw
1764 int thaw_super(struct super_block *sb) in thaw_super() argument
1766 down_write(&sb->s_umount); in thaw_super()
1767 return thaw_super_locked(sb); in thaw_super()