Lines Matching refs:s
140 struct super_block *s = container_of(work, struct super_block, in destroy_super_work() local
145 percpu_free_rwsem(&s->s_writers.rw_sem[i]); in destroy_super_work()
146 kfree(s); in destroy_super_work()
151 struct super_block *s = container_of(head, struct super_block, rcu); in destroy_super_rcu() local
152 INIT_WORK(&s->destroy_work, destroy_super_work); in destroy_super_rcu()
153 schedule_work(&s->destroy_work); in destroy_super_rcu()
162 static void destroy_super(struct super_block *s) in destroy_super() argument
164 list_lru_destroy(&s->s_dentry_lru); in destroy_super()
165 list_lru_destroy(&s->s_inode_lru); in destroy_super()
166 security_sb_free(s); in destroy_super()
167 WARN_ON(!list_empty(&s->s_mounts)); in destroy_super()
168 kfree(s->s_subtype); in destroy_super()
169 kfree(s->s_options); in destroy_super()
170 call_rcu(&s->rcu, destroy_super_rcu); in destroy_super()
183 struct super_block *s = kzalloc(sizeof(struct super_block), GFP_USER); in alloc_super() local
187 if (!s) in alloc_super()
190 INIT_LIST_HEAD(&s->s_mounts); in alloc_super()
192 if (security_sb_alloc(s)) in alloc_super()
196 if (__percpu_init_rwsem(&s->s_writers.rw_sem[i], in alloc_super()
201 init_waitqueue_head(&s->s_writers.wait_unfrozen); in alloc_super()
202 s->s_bdi = &noop_backing_dev_info; in alloc_super()
203 s->s_flags = flags; in alloc_super()
204 INIT_HLIST_NODE(&s->s_instances); in alloc_super()
205 INIT_HLIST_BL_HEAD(&s->s_anon); in alloc_super()
206 mutex_init(&s->s_sync_lock); in alloc_super()
207 INIT_LIST_HEAD(&s->s_inodes); in alloc_super()
208 spin_lock_init(&s->s_inode_list_lock); in alloc_super()
210 if (list_lru_init_memcg(&s->s_dentry_lru)) in alloc_super()
212 if (list_lru_init_memcg(&s->s_inode_lru)) in alloc_super()
215 init_rwsem(&s->s_umount); in alloc_super()
216 lockdep_set_class(&s->s_umount, &type->s_umount_key); in alloc_super()
232 down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING); in alloc_super()
233 s->s_count = 1; in alloc_super()
234 atomic_set(&s->s_active, 1); in alloc_super()
235 mutex_init(&s->s_vfs_rename_mutex); in alloc_super()
236 lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key); in alloc_super()
237 mutex_init(&s->s_dquot.dqio_mutex); in alloc_super()
238 mutex_init(&s->s_dquot.dqonoff_mutex); in alloc_super()
239 s->s_maxbytes = MAX_NON_LFS; in alloc_super()
240 s->s_op = &default_op; in alloc_super()
241 s->s_time_gran = 1000000000; in alloc_super()
242 s->cleancache_poolid = CLEANCACHE_NO_POOL; in alloc_super()
244 s->s_shrink.seeks = DEFAULT_SEEKS; in alloc_super()
245 s->s_shrink.scan_objects = super_cache_scan; in alloc_super()
246 s->s_shrink.count_objects = super_cache_count; in alloc_super()
247 s->s_shrink.batch = 1024; in alloc_super()
248 s->s_shrink.flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE; in alloc_super()
249 return s; in alloc_super()
252 destroy_super(s); in alloc_super()
295 void deactivate_locked_super(struct super_block *s) in deactivate_locked_super() argument
297 struct file_system_type *fs = s->s_type; in deactivate_locked_super()
298 if (atomic_dec_and_test(&s->s_active)) { in deactivate_locked_super()
299 cleancache_invalidate_fs(s); in deactivate_locked_super()
300 unregister_shrinker(&s->s_shrink); in deactivate_locked_super()
301 fs->kill_sb(s); in deactivate_locked_super()
308 list_lru_destroy(&s->s_dentry_lru); in deactivate_locked_super()
309 list_lru_destroy(&s->s_inode_lru); in deactivate_locked_super()
312 put_super(s); in deactivate_locked_super()
314 up_write(&s->s_umount); in deactivate_locked_super()
328 void deactivate_super(struct super_block *s) in deactivate_super() argument
330 if (!atomic_add_unless(&s->s_active, -1, 1)) { in deactivate_super()
331 down_write(&s->s_umount); in deactivate_super()
332 deactivate_locked_super(s); in deactivate_super()
351 static int grab_super(struct super_block *s) __releases(sb_lock) in grab_super() argument
353 s->s_count++; in grab_super()
355 down_write(&s->s_umount); in grab_super()
356 if ((s->s_flags & MS_BORN) && atomic_inc_not_zero(&s->s_active)) { in grab_super()
357 put_super(s); in grab_super()
360 up_write(&s->s_umount); in grab_super()
361 put_super(s); in grab_super()
459 struct super_block *s = NULL; in sget() local
471 if (s) { in sget()
472 up_write(&s->s_umount); in sget()
473 destroy_super(s); in sget()
474 s = NULL; in sget()
479 if (!s) { in sget()
481 s = alloc_super(type, flags); in sget()
482 if (!s) in sget()
487 err = set(s, data); in sget()
490 up_write(&s->s_umount); in sget()
491 destroy_super(s); in sget()
494 s->s_type = type; in sget()
495 strlcpy(s->s_id, type->name, sizeof(s->s_id)); in sget()
496 list_add_tail(&s->s_list, &super_blocks); in sget()
497 hlist_add_head(&s->s_instances, &type->fs_supers); in sget()
500 register_shrinker(&s->s_shrink); in sget()
501 return s; in sget()
636 struct super_block *s = get_super(bdev); in get_super_thawed() local
637 if (!s || s->s_writers.frozen == SB_UNFROZEN) in get_super_thawed()
638 return s; in get_super_thawed()
639 up_read(&s->s_umount); in get_super_thawed()
640 wait_event(s->s_writers.wait_unfrozen, in get_super_thawed()
641 s->s_writers.frozen == SB_UNFROZEN); in get_super_thawed()
642 put_super(s); in get_super_thawed()
885 int set_anon_super(struct super_block *s, void *data) in set_anon_super() argument
887 return get_anon_bdev(&s->s_dev); in set_anon_super()
947 static int set_bdev_super(struct super_block *s, void *data) in set_bdev_super() argument
949 s->s_bdev = data; in set_bdev_super()
950 s->s_dev = s->s_bdev->bd_dev; in set_bdev_super()
956 s->s_bdi = &bdev_get_queue(s->s_bdev)->backing_dev_info; in set_bdev_super()
960 static int test_bdev_super(struct super_block *s, void *data) in test_bdev_super() argument
962 return (void *)s->s_bdev == data; in test_bdev_super()
970 struct super_block *s; in mount_bdev() local
992 s = sget(fs_type, test_bdev_super, set_bdev_super, flags | MS_NOSEC, in mount_bdev()
995 if (IS_ERR(s)) in mount_bdev()
998 if (s->s_root) { in mount_bdev()
999 if ((flags ^ s->s_flags) & MS_RDONLY) { in mount_bdev()
1000 deactivate_locked_super(s); in mount_bdev()
1012 up_write(&s->s_umount); in mount_bdev()
1014 down_write(&s->s_umount); in mount_bdev()
1018 s->s_mode = mode; in mount_bdev()
1019 strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id)); in mount_bdev()
1020 sb_set_blocksize(s, block_size(bdev)); in mount_bdev()
1021 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); in mount_bdev()
1023 deactivate_locked_super(s); in mount_bdev()
1027 s->s_flags |= MS_ACTIVE; in mount_bdev()
1028 bdev->bd_super = s; in mount_bdev()
1031 return dget(s->s_root); in mount_bdev()
1034 error = PTR_ERR(s); in mount_bdev()
1062 struct super_block *s = sget(fs_type, NULL, set_anon_super, flags, NULL); in mount_nodev() local
1064 if (IS_ERR(s)) in mount_nodev()
1065 return ERR_CAST(s); in mount_nodev()
1067 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); in mount_nodev()
1069 deactivate_locked_super(s); in mount_nodev()
1072 s->s_flags |= MS_ACTIVE; in mount_nodev()
1073 return dget(s->s_root); in mount_nodev()
1077 static int compare_single(struct super_block *s, void *p) in compare_single() argument
1086 struct super_block *s; in mount_single() local
1089 s = sget(fs_type, compare_single, set_anon_super, flags, NULL); in mount_single()
1090 if (IS_ERR(s)) in mount_single()
1091 return ERR_CAST(s); in mount_single()
1092 if (!s->s_root) { in mount_single()
1093 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); in mount_single()
1095 deactivate_locked_super(s); in mount_single()
1098 s->s_flags |= MS_ACTIVE; in mount_single()
1100 do_remount_sb(s, flags, data, 0); in mount_single()
1102 return dget(s->s_root); in mount_single()