Lines Matching refs:sb
42 static int thaw_super_locked(struct super_block *sb);
63 struct super_block *sb; in super_cache_scan() local
70 sb = container_of(shrink, struct super_block, s_shrink); in super_cache_scan()
79 if (!trylock_super(sb)) in super_cache_scan()
82 if (sb->s_op->nr_cached_objects) in super_cache_scan()
83 fs_objects = sb->s_op->nr_cached_objects(sb, sc); in super_cache_scan()
85 inodes = list_lru_shrink_count(&sb->s_inode_lru, sc); in super_cache_scan()
86 dentries = list_lru_shrink_count(&sb->s_dentry_lru, sc); in super_cache_scan()
104 freed = prune_dcache_sb(sb, sc); in super_cache_scan()
106 freed += prune_icache_sb(sb, sc); in super_cache_scan()
110 freed += sb->s_op->free_cached_objects(sb, sc); in super_cache_scan()
113 up_read(&sb->s_umount); in super_cache_scan()
120 struct super_block *sb; in super_cache_count() local
123 sb = container_of(shrink, struct super_block, s_shrink); in super_cache_count()
139 if (!(sb->s_flags & SB_BORN)) in super_cache_count()
143 if (sb->s_op && sb->s_op->nr_cached_objects) in super_cache_count()
144 total_objects = sb->s_op->nr_cached_objects(sb, sc); in super_cache_count()
146 total_objects += list_lru_shrink_count(&sb->s_dentry_lru, sc); in super_cache_count()
147 total_objects += list_lru_shrink_count(&sb->s_inode_lru, sc); in super_cache_count()
308 void put_super(struct super_block *sb) in put_super() argument
311 __put_super(sb); in put_super()
413 bool trylock_super(struct super_block *sb) in trylock_super() argument
415 if (down_read_trylock(&sb->s_umount)) { in trylock_super()
416 if (!hlist_unhashed(&sb->s_instances) && in trylock_super()
417 sb->s_root && (sb->s_flags & SB_BORN)) in trylock_super()
419 up_read(&sb->s_umount); in trylock_super()
441 void retire_super(struct super_block *sb) in retire_super() argument
443 WARN_ON(!sb->s_bdev); in retire_super()
444 down_write(&sb->s_umount); in retire_super()
445 if (sb->s_iflags & SB_I_PERSB_BDI) { in retire_super()
446 bdi_unregister(sb->s_bdi); in retire_super()
447 sb->s_iflags &= ~SB_I_PERSB_BDI; in retire_super()
449 sb->s_iflags |= SB_I_RETIRED; in retire_super()
450 up_write(&sb->s_umount); in retire_super()
468 void generic_shutdown_super(struct super_block *sb) in generic_shutdown_super() argument
470 const struct super_operations *sop = sb->s_op; in generic_shutdown_super()
472 if (sb->s_root) { in generic_shutdown_super()
473 shrink_dcache_for_umount(sb); in generic_shutdown_super()
474 sync_filesystem(sb); in generic_shutdown_super()
475 sb->s_flags &= ~SB_ACTIVE; in generic_shutdown_super()
480 evict_inodes(sb); in generic_shutdown_super()
482 fsnotify_sb_delete(sb); in generic_shutdown_super()
483 fscrypt_destroy_keyring(sb); in generic_shutdown_super()
484 security_sb_delete(sb); in generic_shutdown_super()
486 if (sb->s_dio_done_wq) { in generic_shutdown_super()
487 destroy_workqueue(sb->s_dio_done_wq); in generic_shutdown_super()
488 sb->s_dio_done_wq = NULL; in generic_shutdown_super()
492 sop->put_super(sb); in generic_shutdown_super()
494 if (!list_empty(&sb->s_inodes)) { in generic_shutdown_super()
497 sb->s_id); in generic_shutdown_super()
502 hlist_del_init(&sb->s_instances); in generic_shutdown_super()
504 up_write(&sb->s_umount); in generic_shutdown_super()
505 if (sb->s_bdi != &noop_backing_dev_info) { in generic_shutdown_super()
506 if (sb->s_iflags & SB_I_PERSB_BDI) in generic_shutdown_super()
507 bdi_unregister(sb->s_bdi); in generic_shutdown_super()
508 bdi_put(sb->s_bdi); in generic_shutdown_super()
509 sb->s_bdi = &noop_backing_dev_info; in generic_shutdown_super()
666 void drop_super(struct super_block *sb) in drop_super() argument
668 up_read(&sb->s_umount); in drop_super()
669 put_super(sb); in drop_super()
674 void drop_super_exclusive(struct super_block *sb) in drop_super_exclusive() argument
676 up_write(&sb->s_umount); in drop_super_exclusive()
677 put_super(sb); in drop_super_exclusive()
683 struct super_block *sb, *p = NULL; in __iterate_supers() local
686 list_for_each_entry(sb, &super_blocks, s_list) { in __iterate_supers()
687 if (hlist_unhashed(&sb->s_instances)) in __iterate_supers()
689 sb->s_count++; in __iterate_supers()
692 f(sb); in __iterate_supers()
697 p = sb; in __iterate_supers()
713 struct super_block *sb, *p = NULL; in iterate_supers() local
716 list_for_each_entry(sb, &super_blocks, s_list) { in iterate_supers()
717 if (hlist_unhashed(&sb->s_instances)) in iterate_supers()
719 sb->s_count++; in iterate_supers()
722 down_read(&sb->s_umount); in iterate_supers()
723 if (sb->s_root && (sb->s_flags & SB_BORN)) in iterate_supers()
724 f(sb, arg); in iterate_supers()
725 up_read(&sb->s_umount); in iterate_supers()
730 p = sb; in iterate_supers()
749 struct super_block *sb, *p = NULL; in iterate_supers_type() local
752 hlist_for_each_entry(sb, &type->fs_supers, s_instances) { in iterate_supers_type()
753 sb->s_count++; in iterate_supers_type()
756 down_read(&sb->s_umount); in iterate_supers_type()
757 if (sb->s_root && (sb->s_flags & SB_BORN)) in iterate_supers_type()
758 f(sb, arg); in iterate_supers_type()
759 up_read(&sb->s_umount); in iterate_supers_type()
764 p = sb; in iterate_supers_type()
782 struct super_block *sb; in get_super() local
789 list_for_each_entry(sb, &super_blocks, s_list) { in get_super()
790 if (hlist_unhashed(&sb->s_instances)) in get_super()
792 if (sb->s_bdev == bdev) { in get_super()
793 sb->s_count++; in get_super()
795 down_read(&sb->s_umount); in get_super()
797 if (sb->s_root && (sb->s_flags & SB_BORN)) in get_super()
798 return sb; in get_super()
799 up_read(&sb->s_umount); in get_super()
802 __put_super(sb); in get_super()
820 struct super_block *sb; in get_active_super() local
827 list_for_each_entry(sb, &super_blocks, s_list) { in get_active_super()
828 if (hlist_unhashed(&sb->s_instances)) in get_active_super()
830 if (sb->s_bdev == bdev) { in get_active_super()
831 if (!grab_super(sb)) in get_active_super()
833 up_write(&sb->s_umount); in get_active_super()
834 return sb; in get_active_super()
843 struct super_block *sb; in user_get_super() local
847 list_for_each_entry(sb, &super_blocks, s_list) { in user_get_super()
848 if (hlist_unhashed(&sb->s_instances)) in user_get_super()
850 if (sb->s_dev == dev) { in user_get_super()
851 sb->s_count++; in user_get_super()
854 down_write(&sb->s_umount); in user_get_super()
856 down_read(&sb->s_umount); in user_get_super()
858 if (sb->s_root && (sb->s_flags & SB_BORN)) in user_get_super()
859 return sb; in user_get_super()
861 up_write(&sb->s_umount); in user_get_super()
863 up_read(&sb->s_umount); in user_get_super()
866 __put_super(sb); in user_get_super()
882 struct super_block *sb = fc->root->d_sb; in reconfigure_super() local
889 if (sb->s_writers.frozen != SB_UNFROZEN) in reconfigure_super()
892 retval = security_sb_remount(sb, fc->security); in reconfigure_super()
898 if (!(fc->sb_flags & SB_RDONLY) && sb->s_bdev && in reconfigure_super()
899 bdev_read_only(sb->s_bdev)) in reconfigure_super()
903 remount_ro = (fc->sb_flags & SB_RDONLY) && !sb_rdonly(sb); in reconfigure_super()
907 if (!hlist_empty(&sb->s_pins)) { in reconfigure_super()
908 up_write(&sb->s_umount); in reconfigure_super()
909 group_pin_kill(&sb->s_pins); in reconfigure_super()
910 down_write(&sb->s_umount); in reconfigure_super()
911 if (!sb->s_root) in reconfigure_super()
913 if (sb->s_writers.frozen != SB_UNFROZEN) in reconfigure_super()
915 remount_ro = !sb_rdonly(sb); in reconfigure_super()
918 shrink_dcache_sb(sb); in reconfigure_super()
925 sb->s_readonly_remount = 1; in reconfigure_super()
928 retval = sb_prepare_remount_readonly(sb); in reconfigure_super()
941 sb->s_type->name, retval); in reconfigure_super()
945 WRITE_ONCE(sb->s_flags, ((sb->s_flags & ~fc->sb_flags_mask) | in reconfigure_super()
949 sb->s_readonly_remount = 0; in reconfigure_super()
959 if (remount_ro && sb->s_bdev) in reconfigure_super()
960 invalidate_bdev(sb->s_bdev); in reconfigure_super()
964 sb->s_readonly_remount = 0; in reconfigure_super()
968 static void do_emergency_remount_callback(struct super_block *sb) in do_emergency_remount_callback() argument
970 down_write(&sb->s_umount); in do_emergency_remount_callback()
971 if (sb->s_root && sb->s_bdev && (sb->s_flags & SB_BORN) && in do_emergency_remount_callback()
972 !sb_rdonly(sb)) { in do_emergency_remount_callback()
975 fc = fs_context_for_reconfigure(sb->s_root, in do_emergency_remount_callback()
983 up_write(&sb->s_umount); in do_emergency_remount_callback()
1004 static void do_thaw_all_callback(struct super_block *sb) in do_thaw_all_callback() argument
1006 down_write(&sb->s_umount); in do_thaw_all_callback()
1007 if (sb->s_root && sb->s_flags & SB_BORN) { in do_thaw_all_callback()
1008 emergency_thaw_bdev(sb); in do_thaw_all_callback()
1009 thaw_super_locked(sb); in do_thaw_all_callback()
1011 up_write(&sb->s_umount); in do_thaw_all_callback()
1083 void kill_anon_super(struct super_block *sb) in kill_anon_super() argument
1085 dev_t dev = sb->s_dev; in kill_anon_super()
1086 generic_shutdown_super(sb); in kill_anon_super()
1091 void kill_litter_super(struct super_block *sb) in kill_litter_super() argument
1093 if (sb->s_root) in kill_litter_super()
1094 d_genocide(sb->s_root); in kill_litter_super()
1095 kill_anon_super(sb); in kill_litter_super()
1099 int set_anon_super_fc(struct super_block *sb, struct fs_context *fc) in set_anon_super_fc() argument
1101 return set_anon_super(sb, NULL); in set_anon_super_fc()
1105 static int test_keyed_super(struct super_block *sb, struct fs_context *fc) in test_keyed_super() argument
1107 return sb->s_fs_info == fc->s_fs_info; in test_keyed_super()
1142 int (*fill_super)(struct super_block *sb, in vfs_get_super() argument
1146 struct super_block *sb; in vfs_get_super() local
1164 sb = sget_fc(fc, test, set_anon_super_fc); in vfs_get_super()
1165 if (IS_ERR(sb)) in vfs_get_super()
1166 return PTR_ERR(sb); in vfs_get_super()
1168 if (!sb->s_root) { in vfs_get_super()
1169 err = fill_super(sb, fc); in vfs_get_super()
1173 sb->s_flags |= SB_ACTIVE; in vfs_get_super()
1174 fc->root = dget(sb->s_root); in vfs_get_super()
1176 fc->root = dget(sb->s_root); in vfs_get_super()
1190 deactivate_locked_super(sb); in vfs_get_super()
1196 int (*fill_super)(struct super_block *sb, in get_tree_nodev() argument
1204 int (*fill_super)(struct super_block *sb, in get_tree_single() argument
1212 int (*fill_super)(struct super_block *sb, in get_tree_single_reconf() argument
1220 int (*fill_super)(struct super_block *sb, in get_tree_keyed() argument
1422 void kill_block_super(struct super_block *sb) in kill_block_super() argument
1424 struct block_device *bdev = sb->s_bdev; in kill_block_super()
1425 fmode_t mode = sb->s_mode; in kill_block_super()
1428 generic_shutdown_super(sb); in kill_block_super()
1522 struct super_block *sb; in vfs_get_tree() local
1544 sb = fc->root->d_sb; in vfs_get_tree()
1545 WARN_ON(!sb->s_bdi); in vfs_get_tree()
1554 sb->s_flags |= SB_BORN; in vfs_get_tree()
1556 error = security_sb_set_mnt_opts(sb, fc->security, 0, NULL); in vfs_get_tree()
1568 WARN((sb->s_maxbytes < 0), "%s set sb->s_maxbytes to " in vfs_get_tree()
1569 "negative value (%lld)\n", fc->fs_type->name, sb->s_maxbytes); in vfs_get_tree()
1579 int super_setup_bdi_name(struct super_block *sb, char *fmt, ...) in super_setup_bdi_name() argument
1596 WARN_ON(sb->s_bdi != &noop_backing_dev_info); in super_setup_bdi_name()
1597 sb->s_bdi = bdi; in super_setup_bdi_name()
1598 sb->s_iflags |= SB_I_PERSB_BDI; in super_setup_bdi_name()
1608 int super_setup_bdi(struct super_block *sb) in super_setup_bdi() argument
1612 return super_setup_bdi_name(sb, "%.28s-%ld", sb->s_type->name, in super_setup_bdi()
1625 static void sb_wait_write(struct super_block *sb, int level) in sb_wait_write() argument
1627 percpu_down_write(sb->s_writers.rw_sem + level-1); in sb_wait_write()
1634 static void lockdep_sb_freeze_release(struct super_block *sb) in lockdep_sb_freeze_release() argument
1639 percpu_rwsem_release(sb->s_writers.rw_sem + level, 0, _THIS_IP_); in lockdep_sb_freeze_release()
1645 static void lockdep_sb_freeze_acquire(struct super_block *sb) in lockdep_sb_freeze_acquire() argument
1650 percpu_rwsem_acquire(sb->s_writers.rw_sem + level, 0, _THIS_IP_); in lockdep_sb_freeze_acquire()
1653 static void sb_freeze_unlock(struct super_block *sb, int level) in sb_freeze_unlock() argument
1656 percpu_up_write(sb->s_writers.rw_sem + level); in sb_freeze_unlock()
1692 int freeze_super(struct super_block *sb) in freeze_super() argument
1696 atomic_inc(&sb->s_active); in freeze_super()
1697 down_write(&sb->s_umount); in freeze_super()
1698 if (sb->s_writers.frozen != SB_UNFROZEN) { in freeze_super()
1699 deactivate_locked_super(sb); in freeze_super()
1703 if (!(sb->s_flags & SB_BORN)) { in freeze_super()
1704 up_write(&sb->s_umount); in freeze_super()
1708 if (sb_rdonly(sb)) { in freeze_super()
1710 sb->s_writers.frozen = SB_FREEZE_COMPLETE; in freeze_super()
1711 up_write(&sb->s_umount); in freeze_super()
1715 sb->s_writers.frozen = SB_FREEZE_WRITE; in freeze_super()
1717 up_write(&sb->s_umount); in freeze_super()
1718 sb_wait_write(sb, SB_FREEZE_WRITE); in freeze_super()
1719 down_write(&sb->s_umount); in freeze_super()
1722 sb->s_writers.frozen = SB_FREEZE_PAGEFAULT; in freeze_super()
1723 sb_wait_write(sb, SB_FREEZE_PAGEFAULT); in freeze_super()
1726 ret = sync_filesystem(sb); in freeze_super()
1728 sb->s_writers.frozen = SB_UNFROZEN; in freeze_super()
1729 sb_freeze_unlock(sb, SB_FREEZE_PAGEFAULT); in freeze_super()
1730 wake_up(&sb->s_writers.wait_unfrozen); in freeze_super()
1731 deactivate_locked_super(sb); in freeze_super()
1736 sb->s_writers.frozen = SB_FREEZE_FS; in freeze_super()
1737 sb_wait_write(sb, SB_FREEZE_FS); in freeze_super()
1739 if (sb->s_op->freeze_fs) { in freeze_super()
1740 ret = sb->s_op->freeze_fs(sb); in freeze_super()
1744 sb->s_writers.frozen = SB_UNFROZEN; in freeze_super()
1745 sb_freeze_unlock(sb, SB_FREEZE_FS); in freeze_super()
1746 wake_up(&sb->s_writers.wait_unfrozen); in freeze_super()
1747 deactivate_locked_super(sb); in freeze_super()
1755 sb->s_writers.frozen = SB_FREEZE_COMPLETE; in freeze_super()
1756 lockdep_sb_freeze_release(sb); in freeze_super()
1757 up_write(&sb->s_umount); in freeze_super()
1762 static int thaw_super_locked(struct super_block *sb) in thaw_super_locked() argument
1766 if (sb->s_writers.frozen != SB_FREEZE_COMPLETE) { in thaw_super_locked()
1767 up_write(&sb->s_umount); in thaw_super_locked()
1771 if (sb_rdonly(sb)) { in thaw_super_locked()
1772 sb->s_writers.frozen = SB_UNFROZEN; in thaw_super_locked()
1776 lockdep_sb_freeze_acquire(sb); in thaw_super_locked()
1778 if (sb->s_op->unfreeze_fs) { in thaw_super_locked()
1779 error = sb->s_op->unfreeze_fs(sb); in thaw_super_locked()
1783 lockdep_sb_freeze_release(sb); in thaw_super_locked()
1784 up_write(&sb->s_umount); in thaw_super_locked()
1789 sb->s_writers.frozen = SB_UNFROZEN; in thaw_super_locked()
1790 sb_freeze_unlock(sb, SB_FREEZE_FS); in thaw_super_locked()
1792 wake_up(&sb->s_writers.wait_unfrozen); in thaw_super_locked()
1793 deactivate_locked_super(sb); in thaw_super_locked()
1803 int thaw_super(struct super_block *sb) in thaw_super() argument
1805 down_write(&sb->s_umount); in thaw_super()
1806 return thaw_super_locked(sb); in thaw_super()