Lines Matching refs:sb

40 static int thaw_super_locked(struct super_block *sb);
61 struct super_block *sb; in super_cache_scan() local
68 sb = container_of(shrink, struct super_block, s_shrink); in super_cache_scan()
77 if (!trylock_super(sb)) in super_cache_scan()
80 if (sb->s_op->nr_cached_objects) in super_cache_scan()
81 fs_objects = sb->s_op->nr_cached_objects(sb, sc); in super_cache_scan()
83 inodes = list_lru_shrink_count(&sb->s_inode_lru, sc); in super_cache_scan()
84 dentries = list_lru_shrink_count(&sb->s_dentry_lru, sc); in super_cache_scan()
102 freed = prune_dcache_sb(sb, sc); in super_cache_scan()
104 freed += prune_icache_sb(sb, sc); in super_cache_scan()
108 freed += sb->s_op->free_cached_objects(sb, sc); in super_cache_scan()
111 up_read(&sb->s_umount); in super_cache_scan()
118 struct super_block *sb; in super_cache_count() local
121 sb = container_of(shrink, struct super_block, s_shrink); in super_cache_count()
137 if (!(sb->s_flags & SB_BORN)) in super_cache_count()
141 if (sb->s_op && sb->s_op->nr_cached_objects) in super_cache_count()
142 total_objects = sb->s_op->nr_cached_objects(sb, sc); in super_cache_count()
144 total_objects += list_lru_shrink_count(&sb->s_dentry_lru, sc); in super_cache_count()
145 total_objects += list_lru_shrink_count(&sb->s_inode_lru, sc); in super_cache_count()
304 static void put_super(struct super_block *sb) in put_super() argument
307 __put_super(sb); in put_super()
410 bool trylock_super(struct super_block *sb) in trylock_super() argument
412 if (down_read_trylock(&sb->s_umount)) { in trylock_super()
413 if (!hlist_unhashed(&sb->s_instances) && in trylock_super()
414 sb->s_root && (sb->s_flags & SB_BORN)) in trylock_super()
416 up_read(&sb->s_umount); in trylock_super()
436 void generic_shutdown_super(struct super_block *sb) in generic_shutdown_super() argument
438 const struct super_operations *sop = sb->s_op; in generic_shutdown_super()
440 if (sb->s_root) { in generic_shutdown_super()
441 shrink_dcache_for_umount(sb); in generic_shutdown_super()
442 sync_filesystem(sb); in generic_shutdown_super()
443 sb->s_flags &= ~SB_ACTIVE; in generic_shutdown_super()
445 fsnotify_unmount_inodes(sb); in generic_shutdown_super()
448 evict_inodes(sb); in generic_shutdown_super()
450 if (sb->s_dio_done_wq) { in generic_shutdown_super()
451 destroy_workqueue(sb->s_dio_done_wq); in generic_shutdown_super()
452 sb->s_dio_done_wq = NULL; in generic_shutdown_super()
456 sop->put_super(sb); in generic_shutdown_super()
458 if (!list_empty(&sb->s_inodes)) { in generic_shutdown_super()
461 sb->s_id); in generic_shutdown_super()
466 hlist_del_init(&sb->s_instances); in generic_shutdown_super()
468 up_write(&sb->s_umount); in generic_shutdown_super()
469 if (sb->s_bdi != &noop_backing_dev_info) { in generic_shutdown_super()
470 bdi_put(sb->s_bdi); in generic_shutdown_super()
471 sb->s_bdi = &noop_backing_dev_info; in generic_shutdown_super()
575 void drop_super(struct super_block *sb) in drop_super() argument
577 up_read(&sb->s_umount); in drop_super()
578 put_super(sb); in drop_super()
583 void drop_super_exclusive(struct super_block *sb) in drop_super_exclusive() argument
585 up_write(&sb->s_umount); in drop_super_exclusive()
586 put_super(sb); in drop_super_exclusive()
592 struct super_block *sb, *p = NULL; in __iterate_supers() local
595 list_for_each_entry(sb, &super_blocks, s_list) { in __iterate_supers()
596 if (hlist_unhashed(&sb->s_instances)) in __iterate_supers()
598 sb->s_count++; in __iterate_supers()
601 f(sb); in __iterate_supers()
606 p = sb; in __iterate_supers()
622 struct super_block *sb, *p = NULL; in iterate_supers() local
625 list_for_each_entry(sb, &super_blocks, s_list) { in iterate_supers()
626 if (hlist_unhashed(&sb->s_instances)) in iterate_supers()
628 sb->s_count++; in iterate_supers()
631 down_read(&sb->s_umount); in iterate_supers()
632 if (sb->s_root && (sb->s_flags & SB_BORN)) in iterate_supers()
633 f(sb, arg); in iterate_supers()
634 up_read(&sb->s_umount); in iterate_supers()
639 p = sb; in iterate_supers()
658 struct super_block *sb, *p = NULL; in iterate_supers_type() local
661 hlist_for_each_entry(sb, &type->fs_supers, s_instances) { in iterate_supers_type()
662 sb->s_count++; in iterate_supers_type()
665 down_read(&sb->s_umount); in iterate_supers_type()
666 if (sb->s_root && (sb->s_flags & SB_BORN)) in iterate_supers_type()
667 f(sb, arg); in iterate_supers_type()
668 up_read(&sb->s_umount); in iterate_supers_type()
673 p = sb; in iterate_supers_type()
684 struct super_block *sb; in __get_super() local
691 list_for_each_entry(sb, &super_blocks, s_list) { in __get_super()
692 if (hlist_unhashed(&sb->s_instances)) in __get_super()
694 if (sb->s_bdev == bdev) { in __get_super()
695 sb->s_count++; in __get_super()
698 down_read(&sb->s_umount); in __get_super()
700 down_write(&sb->s_umount); in __get_super()
702 if (sb->s_root && (sb->s_flags & SB_BORN)) in __get_super()
703 return sb; in __get_super()
705 up_read(&sb->s_umount); in __get_super()
707 up_write(&sb->s_umount); in __get_super()
710 __put_super(sb); in __get_super()
788 struct super_block *sb; in get_active_super() local
795 list_for_each_entry(sb, &super_blocks, s_list) { in get_active_super()
796 if (hlist_unhashed(&sb->s_instances)) in get_active_super()
798 if (sb->s_bdev == bdev) { in get_active_super()
799 if (!grab_super(sb)) in get_active_super()
801 up_write(&sb->s_umount); in get_active_super()
802 return sb; in get_active_super()
811 struct super_block *sb; in user_get_super() local
815 list_for_each_entry(sb, &super_blocks, s_list) { in user_get_super()
816 if (hlist_unhashed(&sb->s_instances)) in user_get_super()
818 if (sb->s_dev == dev) { in user_get_super()
819 sb->s_count++; in user_get_super()
821 down_read(&sb->s_umount); in user_get_super()
823 if (sb->s_root && (sb->s_flags & SB_BORN)) in user_get_super()
824 return sb; in user_get_super()
825 up_read(&sb->s_umount); in user_get_super()
828 __put_super(sb); in user_get_super()
845 int do_remount_sb(struct super_block *sb, int sb_flags, void *data, int force) in do_remount_sb() argument
850 if (sb->s_writers.frozen != SB_UNFROZEN) in do_remount_sb()
854 if (!(sb_flags & SB_RDONLY) && bdev_read_only(sb->s_bdev)) in do_remount_sb()
858 remount_ro = (sb_flags & SB_RDONLY) && !sb_rdonly(sb); in do_remount_sb()
861 if (!hlist_empty(&sb->s_pins)) { in do_remount_sb()
862 up_write(&sb->s_umount); in do_remount_sb()
863 group_pin_kill(&sb->s_pins); in do_remount_sb()
864 down_write(&sb->s_umount); in do_remount_sb()
865 if (!sb->s_root) in do_remount_sb()
867 if (sb->s_writers.frozen != SB_UNFROZEN) in do_remount_sb()
869 remount_ro = (sb_flags & SB_RDONLY) && !sb_rdonly(sb); in do_remount_sb()
872 shrink_dcache_sb(sb); in do_remount_sb()
878 sb->s_readonly_remount = 1; in do_remount_sb()
881 retval = sb_prepare_remount_readonly(sb); in do_remount_sb()
887 if (sb->s_op->remount_fs) { in do_remount_sb()
888 retval = sb->s_op->remount_fs(sb, &sb_flags, data); in do_remount_sb()
894 sb->s_type->name, retval); in do_remount_sb()
897 sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (sb_flags & MS_RMT_MASK); in do_remount_sb()
900 sb->s_readonly_remount = 0; in do_remount_sb()
910 if (remount_ro && sb->s_bdev) in do_remount_sb()
911 invalidate_bdev(sb->s_bdev); in do_remount_sb()
915 sb->s_readonly_remount = 0; in do_remount_sb()
919 static void do_emergency_remount_callback(struct super_block *sb) in do_emergency_remount_callback() argument
921 down_write(&sb->s_umount); in do_emergency_remount_callback()
922 if (sb->s_root && sb->s_bdev && (sb->s_flags & SB_BORN) && in do_emergency_remount_callback()
923 !sb_rdonly(sb)) { in do_emergency_remount_callback()
927 do_remount_sb(sb, SB_RDONLY, NULL, 1); in do_emergency_remount_callback()
929 up_write(&sb->s_umount); in do_emergency_remount_callback()
950 static void do_thaw_all_callback(struct super_block *sb) in do_thaw_all_callback() argument
952 down_write(&sb->s_umount); in do_thaw_all_callback()
953 if (sb->s_root && sb->s_flags & SB_BORN) { in do_thaw_all_callback()
954 emergency_thaw_bdev(sb); in do_thaw_all_callback()
955 thaw_super_locked(sb); in do_thaw_all_callback()
957 up_write(&sb->s_umount); in do_thaw_all_callback()
1029 void kill_anon_super(struct super_block *sb) in kill_anon_super() argument
1031 dev_t dev = sb->s_dev; in kill_anon_super()
1032 generic_shutdown_super(sb); in kill_anon_super()
1037 void kill_litter_super(struct super_block *sb) in kill_litter_super() argument
1039 if (sb->s_root) in kill_litter_super()
1040 d_genocide(sb->s_root); in kill_litter_super()
1041 kill_anon_super(sb); in kill_litter_super()
1045 static int ns_test_super(struct super_block *sb, void *data) in ns_test_super() argument
1047 return sb->s_fs_info == data; in ns_test_super()
1050 static int ns_set_super(struct super_block *sb, void *data) in ns_set_super() argument
1052 sb->s_fs_info = data; in ns_set_super()
1053 return set_anon_super(sb, NULL); in ns_set_super()
1060 struct super_block *sb; in mount_ns() local
1068 sb = sget_userns(fs_type, ns_test_super, ns_set_super, flags, in mount_ns()
1070 if (IS_ERR(sb)) in mount_ns()
1071 return ERR_CAST(sb); in mount_ns()
1073 if (!sb->s_root) { in mount_ns()
1075 err = fill_super(sb, data, flags & SB_SILENT ? 1 : 0); in mount_ns()
1077 deactivate_locked_super(sb); in mount_ns()
1081 sb->s_flags |= SB_ACTIVE; in mount_ns()
1084 return dget(sb->s_root); in mount_ns()
1179 void kill_block_super(struct super_block *sb) in kill_block_super() argument
1181 struct block_device *bdev = sb->s_bdev; in kill_block_super()
1182 fmode_t mode = sb->s_mode; in kill_block_super()
1185 generic_shutdown_super(sb); in kill_block_super()
1247 struct super_block *sb; in mount_fs() local
1266 sb = root->d_sb; in mount_fs()
1267 BUG_ON(!sb); in mount_fs()
1268 WARN_ON(!sb->s_bdi); in mount_fs()
1277 sb->s_flags |= SB_BORN; in mount_fs()
1279 error = security_sb_kern_mount(sb, flags, secdata); in mount_fs()
1289 WARN((sb->s_maxbytes < 0), "%s set sb->s_maxbytes to " in mount_fs()
1290 "negative value (%lld)\n", type->name, sb->s_maxbytes); in mount_fs()
1292 up_write(&sb->s_umount); in mount_fs()
1297 deactivate_locked_super(sb); in mount_fs()
1308 int super_setup_bdi_name(struct super_block *sb, char *fmt, ...) in super_setup_bdi_name() argument
1318 bdi->name = sb->s_type->name; in super_setup_bdi_name()
1327 WARN_ON(sb->s_bdi != &noop_backing_dev_info); in super_setup_bdi_name()
1328 sb->s_bdi = bdi; in super_setup_bdi_name()
1338 int super_setup_bdi(struct super_block *sb) in super_setup_bdi() argument
1342 return super_setup_bdi_name(sb, "%.28s-%ld", sb->s_type->name, in super_setup_bdi()
1351 void __sb_end_write(struct super_block *sb, int level) in __sb_end_write() argument
1353 percpu_up_read(sb->s_writers.rw_sem + level-1); in __sb_end_write()
1361 int __sb_start_write(struct super_block *sb, int level, bool wait) in __sb_start_write() argument
1380 if (percpu_rwsem_is_held(sb->s_writers.rw_sem + i)) { in __sb_start_write()
1387 percpu_down_read(sb->s_writers.rw_sem + level-1); in __sb_start_write()
1389 ret = percpu_down_read_trylock(sb->s_writers.rw_sem + level-1); in __sb_start_write()
1404 static void sb_wait_write(struct super_block *sb, int level) in sb_wait_write() argument
1406 percpu_down_write(sb->s_writers.rw_sem + level-1); in sb_wait_write()
1413 static void lockdep_sb_freeze_release(struct super_block *sb) in lockdep_sb_freeze_release() argument
1418 percpu_rwsem_release(sb->s_writers.rw_sem + level, 0, _THIS_IP_); in lockdep_sb_freeze_release()
1424 static void lockdep_sb_freeze_acquire(struct super_block *sb) in lockdep_sb_freeze_acquire() argument
1429 percpu_rwsem_acquire(sb->s_writers.rw_sem + level, 0, _THIS_IP_); in lockdep_sb_freeze_acquire()
1432 static void sb_freeze_unlock(struct super_block *sb) in sb_freeze_unlock() argument
1437 percpu_up_write(sb->s_writers.rw_sem + level); in sb_freeze_unlock()
1473 int freeze_super(struct super_block *sb) in freeze_super() argument
1477 atomic_inc(&sb->s_active); in freeze_super()
1478 down_write(&sb->s_umount); in freeze_super()
1479 if (sb->s_writers.frozen != SB_UNFROZEN) { in freeze_super()
1480 deactivate_locked_super(sb); in freeze_super()
1484 if (!(sb->s_flags & SB_BORN)) { in freeze_super()
1485 up_write(&sb->s_umount); in freeze_super()
1489 if (sb_rdonly(sb)) { in freeze_super()
1491 sb->s_writers.frozen = SB_FREEZE_COMPLETE; in freeze_super()
1492 up_write(&sb->s_umount); in freeze_super()
1496 sb->s_writers.frozen = SB_FREEZE_WRITE; in freeze_super()
1498 up_write(&sb->s_umount); in freeze_super()
1499 sb_wait_write(sb, SB_FREEZE_WRITE); in freeze_super()
1500 down_write(&sb->s_umount); in freeze_super()
1503 sb->s_writers.frozen = SB_FREEZE_PAGEFAULT; in freeze_super()
1504 sb_wait_write(sb, SB_FREEZE_PAGEFAULT); in freeze_super()
1507 sync_filesystem(sb); in freeze_super()
1510 sb->s_writers.frozen = SB_FREEZE_FS; in freeze_super()
1511 sb_wait_write(sb, SB_FREEZE_FS); in freeze_super()
1513 if (sb->s_op->freeze_fs) { in freeze_super()
1514 ret = sb->s_op->freeze_fs(sb); in freeze_super()
1518 sb->s_writers.frozen = SB_UNFROZEN; in freeze_super()
1519 sb_freeze_unlock(sb); in freeze_super()
1520 wake_up(&sb->s_writers.wait_unfrozen); in freeze_super()
1521 deactivate_locked_super(sb); in freeze_super()
1529 sb->s_writers.frozen = SB_FREEZE_COMPLETE; in freeze_super()
1530 lockdep_sb_freeze_release(sb); in freeze_super()
1531 up_write(&sb->s_umount); in freeze_super()
1542 static int thaw_super_locked(struct super_block *sb) in thaw_super_locked() argument
1546 if (sb->s_writers.frozen != SB_FREEZE_COMPLETE) { in thaw_super_locked()
1547 up_write(&sb->s_umount); in thaw_super_locked()
1551 if (sb_rdonly(sb)) { in thaw_super_locked()
1552 sb->s_writers.frozen = SB_UNFROZEN; in thaw_super_locked()
1556 lockdep_sb_freeze_acquire(sb); in thaw_super_locked()
1558 if (sb->s_op->unfreeze_fs) { in thaw_super_locked()
1559 error = sb->s_op->unfreeze_fs(sb); in thaw_super_locked()
1563 lockdep_sb_freeze_release(sb); in thaw_super_locked()
1564 up_write(&sb->s_umount); in thaw_super_locked()
1569 sb->s_writers.frozen = SB_UNFROZEN; in thaw_super_locked()
1570 sb_freeze_unlock(sb); in thaw_super_locked()
1572 wake_up(&sb->s_writers.wait_unfrozen); in thaw_super_locked()
1573 deactivate_locked_super(sb); in thaw_super_locked()
1577 int thaw_super(struct super_block *sb) in thaw_super() argument
1579 down_write(&sb->s_umount); in thaw_super()
1580 return thaw_super_locked(sb); in thaw_super()