Lines Matching refs:sb

58 	struct super_block *sb;  in super_cache_scan()  local
65 sb = container_of(shrink, struct super_block, s_shrink); in super_cache_scan()
74 if (!trylock_super(sb)) in super_cache_scan()
77 if (sb->s_op->nr_cached_objects) in super_cache_scan()
78 fs_objects = sb->s_op->nr_cached_objects(sb, sc); in super_cache_scan()
80 inodes = list_lru_shrink_count(&sb->s_inode_lru, sc); in super_cache_scan()
81 dentries = list_lru_shrink_count(&sb->s_dentry_lru, sc); in super_cache_scan()
99 freed = prune_dcache_sb(sb, sc); in super_cache_scan()
101 freed += prune_icache_sb(sb, sc); in super_cache_scan()
105 freed += sb->s_op->free_cached_objects(sb, sc); in super_cache_scan()
108 up_read(&sb->s_umount); in super_cache_scan()
115 struct super_block *sb; in super_cache_count() local
118 sb = container_of(shrink, struct super_block, s_shrink); in super_cache_count()
128 if (sb->s_op && sb->s_op->nr_cached_objects) in super_cache_count()
129 total_objects = sb->s_op->nr_cached_objects(sb, sc); in super_cache_count()
131 total_objects += list_lru_shrink_count(&sb->s_dentry_lru, sc); in super_cache_count()
132 total_objects += list_lru_shrink_count(&sb->s_inode_lru, sc); in super_cache_count()
246 static void __put_super(struct super_block *sb) in __put_super() argument
248 if (!--sb->s_count) { in __put_super()
249 list_del_init(&sb->s_list); in __put_super()
250 destroy_super(sb); in __put_super()
261 static void put_super(struct super_block *sb) in put_super() argument
264 __put_super(sb); in put_super()
367 bool trylock_super(struct super_block *sb) in trylock_super() argument
369 if (down_read_trylock(&sb->s_umount)) { in trylock_super()
370 if (!hlist_unhashed(&sb->s_instances) && in trylock_super()
371 sb->s_root && (sb->s_flags & MS_BORN)) in trylock_super()
373 up_read(&sb->s_umount); in trylock_super()
393 void generic_shutdown_super(struct super_block *sb) in generic_shutdown_super() argument
395 const struct super_operations *sop = sb->s_op; in generic_shutdown_super()
397 if (sb->s_root) { in generic_shutdown_super()
398 shrink_dcache_for_umount(sb); in generic_shutdown_super()
399 sync_filesystem(sb); in generic_shutdown_super()
400 sb->s_flags &= ~MS_ACTIVE; in generic_shutdown_super()
402 fsnotify_unmount_inodes(&sb->s_inodes); in generic_shutdown_super()
404 evict_inodes(sb); in generic_shutdown_super()
406 if (sb->s_dio_done_wq) { in generic_shutdown_super()
407 destroy_workqueue(sb->s_dio_done_wq); in generic_shutdown_super()
408 sb->s_dio_done_wq = NULL; in generic_shutdown_super()
412 sop->put_super(sb); in generic_shutdown_super()
414 if (!list_empty(&sb->s_inodes)) { in generic_shutdown_super()
417 sb->s_id); in generic_shutdown_super()
422 hlist_del_init(&sb->s_instances); in generic_shutdown_super()
424 up_write(&sb->s_umount); in generic_shutdown_super()
490 void drop_super(struct super_block *sb) in drop_super() argument
492 up_read(&sb->s_umount); in drop_super()
493 put_super(sb); in drop_super()
508 struct super_block *sb, *p = NULL; in iterate_supers() local
511 list_for_each_entry(sb, &super_blocks, s_list) { in iterate_supers()
512 if (hlist_unhashed(&sb->s_instances)) in iterate_supers()
514 sb->s_count++; in iterate_supers()
517 down_read(&sb->s_umount); in iterate_supers()
518 if (sb->s_root && (sb->s_flags & MS_BORN)) in iterate_supers()
519 f(sb, arg); in iterate_supers()
520 up_read(&sb->s_umount); in iterate_supers()
525 p = sb; in iterate_supers()
544 struct super_block *sb, *p = NULL; in iterate_supers_type() local
547 hlist_for_each_entry(sb, &type->fs_supers, s_instances) { in iterate_supers_type()
548 sb->s_count++; in iterate_supers_type()
551 down_read(&sb->s_umount); in iterate_supers_type()
552 if (sb->s_root && (sb->s_flags & MS_BORN)) in iterate_supers_type()
553 f(sb, arg); in iterate_supers_type()
554 up_read(&sb->s_umount); in iterate_supers_type()
559 p = sb; in iterate_supers_type()
578 struct super_block *sb; in get_super() local
585 list_for_each_entry(sb, &super_blocks, s_list) { in get_super()
586 if (hlist_unhashed(&sb->s_instances)) in get_super()
588 if (sb->s_bdev == bdev) { in get_super()
589 sb->s_count++; in get_super()
591 down_read(&sb->s_umount); in get_super()
593 if (sb->s_root && (sb->s_flags & MS_BORN)) in get_super()
594 return sb; in get_super()
595 up_read(&sb->s_umount); in get_super()
598 __put_super(sb); in get_super()
641 struct super_block *sb; in get_active_super() local
648 list_for_each_entry(sb, &super_blocks, s_list) { in get_active_super()
649 if (hlist_unhashed(&sb->s_instances)) in get_active_super()
651 if (sb->s_bdev == bdev) { in get_active_super()
652 if (!grab_super(sb)) in get_active_super()
654 up_write(&sb->s_umount); in get_active_super()
655 return sb; in get_active_super()
664 struct super_block *sb; in user_get_super() local
668 list_for_each_entry(sb, &super_blocks, s_list) { in user_get_super()
669 if (hlist_unhashed(&sb->s_instances)) in user_get_super()
671 if (sb->s_dev == dev) { in user_get_super()
672 sb->s_count++; in user_get_super()
674 down_read(&sb->s_umount); in user_get_super()
676 if (sb->s_root && (sb->s_flags & MS_BORN)) in user_get_super()
677 return sb; in user_get_super()
678 up_read(&sb->s_umount); in user_get_super()
681 __put_super(sb); in user_get_super()
698 int do_remount_sb(struct super_block *sb, int flags, void *data, int force) in do_remount_sb() argument
703 if (sb->s_writers.frozen != SB_UNFROZEN) in do_remount_sb()
707 if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev)) in do_remount_sb()
711 remount_ro = (flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY); in do_remount_sb()
714 if (!hlist_empty(&sb->s_pins)) { in do_remount_sb()
715 up_write(&sb->s_umount); in do_remount_sb()
716 group_pin_kill(&sb->s_pins); in do_remount_sb()
717 down_write(&sb->s_umount); in do_remount_sb()
718 if (!sb->s_root) in do_remount_sb()
720 if (sb->s_writers.frozen != SB_UNFROZEN) in do_remount_sb()
722 remount_ro = (flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY); in do_remount_sb()
725 shrink_dcache_sb(sb); in do_remount_sb()
731 sb->s_readonly_remount = 1; in do_remount_sb()
734 retval = sb_prepare_remount_readonly(sb); in do_remount_sb()
740 if (sb->s_op->remount_fs) { in do_remount_sb()
741 retval = sb->s_op->remount_fs(sb, &flags, data); in do_remount_sb()
747 sb->s_type->name, retval); in do_remount_sb()
750 sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK); in do_remount_sb()
753 sb->s_readonly_remount = 0; in do_remount_sb()
763 if (remount_ro && sb->s_bdev) in do_remount_sb()
764 invalidate_bdev(sb->s_bdev); in do_remount_sb()
768 sb->s_readonly_remount = 0; in do_remount_sb()
774 struct super_block *sb, *p = NULL; in do_emergency_remount() local
777 list_for_each_entry(sb, &super_blocks, s_list) { in do_emergency_remount()
778 if (hlist_unhashed(&sb->s_instances)) in do_emergency_remount()
780 sb->s_count++; in do_emergency_remount()
782 down_write(&sb->s_umount); in do_emergency_remount()
783 if (sb->s_root && sb->s_bdev && (sb->s_flags & MS_BORN) && in do_emergency_remount()
784 !(sb->s_flags & MS_RDONLY)) { in do_emergency_remount()
788 do_remount_sb(sb, MS_RDONLY, NULL, 1); in do_emergency_remount()
790 up_write(&sb->s_umount); in do_emergency_remount()
794 p = sb; in do_emergency_remount()
876 void kill_anon_super(struct super_block *sb) in kill_anon_super() argument
878 dev_t dev = sb->s_dev; in kill_anon_super()
879 generic_shutdown_super(sb); in kill_anon_super()
885 void kill_litter_super(struct super_block *sb) in kill_litter_super() argument
887 if (sb->s_root) in kill_litter_super()
888 d_genocide(sb->s_root); in kill_litter_super()
889 kill_anon_super(sb); in kill_litter_super()
894 static int ns_test_super(struct super_block *sb, void *data) in ns_test_super() argument
896 return sb->s_fs_info == data; in ns_test_super()
899 static int ns_set_super(struct super_block *sb, void *data) in ns_set_super() argument
901 sb->s_fs_info = data; in ns_set_super()
902 return set_anon_super(sb, NULL); in ns_set_super()
908 struct super_block *sb; in mount_ns() local
910 sb = sget(fs_type, ns_test_super, ns_set_super, flags, data); in mount_ns()
911 if (IS_ERR(sb)) in mount_ns()
912 return ERR_CAST(sb); in mount_ns()
914 if (!sb->s_root) { in mount_ns()
916 err = fill_super(sb, data, flags & MS_SILENT ? 1 : 0); in mount_ns()
918 deactivate_locked_super(sb); in mount_ns()
922 sb->s_flags |= MS_ACTIVE; in mount_ns()
925 return dget(sb->s_root); in mount_ns()
1026 void kill_block_super(struct super_block *sb) in kill_block_super() argument
1028 struct block_device *bdev = sb->s_bdev; in kill_block_super()
1029 fmode_t mode = sb->s_mode; in kill_block_super()
1032 generic_shutdown_super(sb); in kill_block_super()
1094 struct super_block *sb; in mount_fs() local
1113 sb = root->d_sb; in mount_fs()
1114 BUG_ON(!sb); in mount_fs()
1115 WARN_ON(!sb->s_bdi); in mount_fs()
1116 sb->s_flags |= MS_BORN; in mount_fs()
1118 error = security_sb_kern_mount(sb, flags, secdata); in mount_fs()
1128 WARN((sb->s_maxbytes < 0), "%s set sb->s_maxbytes to " in mount_fs()
1129 "negative value (%lld)\n", type->name, sb->s_maxbytes); in mount_fs()
1131 up_write(&sb->s_umount); in mount_fs()
1136 deactivate_locked_super(sb); in mount_fs()
1147 void __sb_end_write(struct super_block *sb, int level) in __sb_end_write() argument
1149 percpu_counter_dec(&sb->s_writers.counter[level-1]); in __sb_end_write()
1155 if (waitqueue_active(&sb->s_writers.wait)) in __sb_end_write()
1156 wake_up(&sb->s_writers.wait); in __sb_end_write()
1157 rwsem_release(&sb->s_writers.lock_map[level-1], 1, _RET_IP_); in __sb_end_write()
1171 static void acquire_freeze_lock(struct super_block *sb, int level, bool trylock, in acquire_freeze_lock() argument
1178 if (lock_is_held(&sb->s_writers.lock_map[i])) { in acquire_freeze_lock()
1183 rwsem_acquire_read(&sb->s_writers.lock_map[level-1], 0, trylock, ip); in acquire_freeze_lock()
1191 int __sb_start_write(struct super_block *sb, int level, bool wait) in __sb_start_write() argument
1194 if (unlikely(sb->s_writers.frozen >= level)) { in __sb_start_write()
1197 wait_event(sb->s_writers.wait_unfrozen, in __sb_start_write()
1198 sb->s_writers.frozen < level); in __sb_start_write()
1202 acquire_freeze_lock(sb, level, !wait, _RET_IP_); in __sb_start_write()
1204 percpu_counter_inc(&sb->s_writers.counter[level-1]); in __sb_start_write()
1210 if (unlikely(sb->s_writers.frozen >= level)) { in __sb_start_write()
1211 __sb_end_write(sb, level); in __sb_start_write()
1228 static void sb_wait_write(struct super_block *sb, int level) in sb_wait_write() argument
1236 rwsem_acquire(&sb->s_writers.lock_map[level-1], 0, 0, _THIS_IP_); in sb_wait_write()
1237 rwsem_release(&sb->s_writers.lock_map[level-1], 1, _THIS_IP_); in sb_wait_write()
1246 prepare_to_wait(&sb->s_writers.wait, &wait, in sb_wait_write()
1249 writers = percpu_counter_sum(&sb->s_writers.counter[level-1]); in sb_wait_write()
1253 finish_wait(&sb->s_writers.wait, &wait); in sb_wait_write()
1290 int freeze_super(struct super_block *sb) in freeze_super() argument
1294 atomic_inc(&sb->s_active); in freeze_super()
1295 down_write(&sb->s_umount); in freeze_super()
1296 if (sb->s_writers.frozen != SB_UNFROZEN) { in freeze_super()
1297 deactivate_locked_super(sb); in freeze_super()
1301 if (!(sb->s_flags & MS_BORN)) { in freeze_super()
1302 up_write(&sb->s_umount); in freeze_super()
1306 if (sb->s_flags & MS_RDONLY) { in freeze_super()
1308 sb->s_writers.frozen = SB_FREEZE_COMPLETE; in freeze_super()
1309 up_write(&sb->s_umount); in freeze_super()
1314 sb->s_writers.frozen = SB_FREEZE_WRITE; in freeze_super()
1318 up_write(&sb->s_umount); in freeze_super()
1320 sb_wait_write(sb, SB_FREEZE_WRITE); in freeze_super()
1323 down_write(&sb->s_umount); in freeze_super()
1324 sb->s_writers.frozen = SB_FREEZE_PAGEFAULT; in freeze_super()
1327 sb_wait_write(sb, SB_FREEZE_PAGEFAULT); in freeze_super()
1330 sync_filesystem(sb); in freeze_super()
1333 sb->s_writers.frozen = SB_FREEZE_FS; in freeze_super()
1335 sb_wait_write(sb, SB_FREEZE_FS); in freeze_super()
1337 if (sb->s_op->freeze_fs) { in freeze_super()
1338 ret = sb->s_op->freeze_fs(sb); in freeze_super()
1342 sb->s_writers.frozen = SB_UNFROZEN; in freeze_super()
1344 wake_up(&sb->s_writers.wait_unfrozen); in freeze_super()
1345 deactivate_locked_super(sb); in freeze_super()
1353 sb->s_writers.frozen = SB_FREEZE_COMPLETE; in freeze_super()
1354 up_write(&sb->s_umount); in freeze_super()
1365 int thaw_super(struct super_block *sb) in thaw_super() argument
1369 down_write(&sb->s_umount); in thaw_super()
1370 if (sb->s_writers.frozen == SB_UNFROZEN) { in thaw_super()
1371 up_write(&sb->s_umount); in thaw_super()
1375 if (sb->s_flags & MS_RDONLY) in thaw_super()
1378 if (sb->s_op->unfreeze_fs) { in thaw_super()
1379 error = sb->s_op->unfreeze_fs(sb); in thaw_super()
1383 up_write(&sb->s_umount); in thaw_super()
1389 sb->s_writers.frozen = SB_UNFROZEN; in thaw_super()
1391 wake_up(&sb->s_writers.wait_unfrozen); in thaw_super()
1392 deactivate_locked_super(sb); in thaw_super()