• Home
  • Raw
  • Download

Lines Matching refs:s

150 	struct super_block *s = container_of(work, struct super_block,  in destroy_super_work()  local
155 percpu_free_rwsem(&s->s_writers.rw_sem[i]); in destroy_super_work()
156 kfree(s); in destroy_super_work()
161 struct super_block *s = container_of(head, struct super_block, rcu); in destroy_super_rcu() local
162 INIT_WORK(&s->destroy_work, destroy_super_work); in destroy_super_rcu()
163 schedule_work(&s->destroy_work); in destroy_super_rcu()
172 static void destroy_super(struct super_block *s) in destroy_super() argument
174 list_lru_destroy(&s->s_dentry_lru); in destroy_super()
175 list_lru_destroy(&s->s_inode_lru); in destroy_super()
176 security_sb_free(s); in destroy_super()
177 WARN_ON(!list_empty(&s->s_mounts)); in destroy_super()
178 kfree(s->s_subtype); in destroy_super()
179 kfree(s->s_options); in destroy_super()
180 call_rcu(&s->rcu, destroy_super_rcu); in destroy_super()
193 struct super_block *s = kzalloc(sizeof(struct super_block), GFP_USER); in alloc_super() local
197 if (!s) in alloc_super()
200 INIT_LIST_HEAD(&s->s_mounts); in alloc_super()
202 if (security_sb_alloc(s)) in alloc_super()
206 if (__percpu_init_rwsem(&s->s_writers.rw_sem[i], in alloc_super()
211 init_waitqueue_head(&s->s_writers.wait_unfrozen); in alloc_super()
212 s->s_bdi = &noop_backing_dev_info; in alloc_super()
213 s->s_flags = flags; in alloc_super()
214 INIT_HLIST_NODE(&s->s_instances); in alloc_super()
215 INIT_HLIST_BL_HEAD(&s->s_anon); in alloc_super()
216 mutex_init(&s->s_sync_lock); in alloc_super()
217 INIT_LIST_HEAD(&s->s_inodes); in alloc_super()
218 spin_lock_init(&s->s_inode_list_lock); in alloc_super()
220 if (list_lru_init_memcg(&s->s_dentry_lru)) in alloc_super()
222 if (list_lru_init_memcg(&s->s_inode_lru)) in alloc_super()
225 init_rwsem(&s->s_umount); in alloc_super()
226 lockdep_set_class(&s->s_umount, &type->s_umount_key); in alloc_super()
242 down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING); in alloc_super()
243 s->s_count = 1; in alloc_super()
244 atomic_set(&s->s_active, 1); in alloc_super()
245 mutex_init(&s->s_vfs_rename_mutex); in alloc_super()
246 lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key); in alloc_super()
247 mutex_init(&s->s_dquot.dqio_mutex); in alloc_super()
248 mutex_init(&s->s_dquot.dqonoff_mutex); in alloc_super()
249 s->s_maxbytes = MAX_NON_LFS; in alloc_super()
250 s->s_op = &default_op; in alloc_super()
251 s->s_time_gran = 1000000000; in alloc_super()
252 s->cleancache_poolid = CLEANCACHE_NO_POOL; in alloc_super()
254 s->s_shrink.seeks = DEFAULT_SEEKS; in alloc_super()
255 s->s_shrink.scan_objects = super_cache_scan; in alloc_super()
256 s->s_shrink.count_objects = super_cache_count; in alloc_super()
257 s->s_shrink.batch = 1024; in alloc_super()
258 s->s_shrink.flags = SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE; in alloc_super()
259 return s; in alloc_super()
262 destroy_super(s); in alloc_super()
305 void deactivate_locked_super(struct super_block *s) in deactivate_locked_super() argument
307 struct file_system_type *fs = s->s_type; in deactivate_locked_super()
308 if (atomic_dec_and_test(&s->s_active)) { in deactivate_locked_super()
309 cleancache_invalidate_fs(s); in deactivate_locked_super()
310 unregister_shrinker(&s->s_shrink); in deactivate_locked_super()
311 fs->kill_sb(s); in deactivate_locked_super()
318 list_lru_destroy(&s->s_dentry_lru); in deactivate_locked_super()
319 list_lru_destroy(&s->s_inode_lru); in deactivate_locked_super()
322 put_super(s); in deactivate_locked_super()
324 up_write(&s->s_umount); in deactivate_locked_super()
338 void deactivate_super(struct super_block *s) in deactivate_super() argument
340 if (!atomic_add_unless(&s->s_active, -1, 1)) { in deactivate_super()
341 down_write(&s->s_umount); in deactivate_super()
342 deactivate_locked_super(s); in deactivate_super()
361 static int grab_super(struct super_block *s) __releases(sb_lock) in grab_super() argument
363 s->s_count++; in grab_super()
365 down_write(&s->s_umount); in grab_super()
366 if ((s->s_flags & MS_BORN) && atomic_inc_not_zero(&s->s_active)) { in grab_super()
367 put_super(s); in grab_super()
370 up_write(&s->s_umount); in grab_super()
371 put_super(s); in grab_super()
469 struct super_block *s = NULL; in sget() local
481 if (s) { in sget()
482 up_write(&s->s_umount); in sget()
483 destroy_super(s); in sget()
484 s = NULL; in sget()
489 if (!s) { in sget()
491 s = alloc_super(type, flags); in sget()
492 if (!s) in sget()
497 err = set(s, data); in sget()
500 up_write(&s->s_umount); in sget()
501 destroy_super(s); in sget()
504 s->s_type = type; in sget()
505 strlcpy(s->s_id, type->name, sizeof(s->s_id)); in sget()
506 list_add_tail(&s->s_list, &super_blocks); in sget()
507 hlist_add_head(&s->s_instances, &type->fs_supers); in sget()
510 err = register_shrinker(&s->s_shrink); in sget()
512 deactivate_locked_super(s); in sget()
513 s = ERR_PTR(err); in sget()
515 return s; in sget()
650 struct super_block *s = get_super(bdev); in get_super_thawed() local
651 if (!s || s->s_writers.frozen == SB_UNFROZEN) in get_super_thawed()
652 return s; in get_super_thawed()
653 up_read(&s->s_umount); in get_super_thawed()
654 wait_event(s->s_writers.wait_unfrozen, in get_super_thawed()
655 s->s_writers.frozen == SB_UNFROZEN); in get_super_thawed()
656 put_super(s); in get_super_thawed()
914 int set_anon_super(struct super_block *s, void *data) in set_anon_super() argument
916 return get_anon_bdev(&s->s_dev); in set_anon_super()
976 static int set_bdev_super(struct super_block *s, void *data) in set_bdev_super() argument
978 s->s_bdev = data; in set_bdev_super()
979 s->s_dev = s->s_bdev->bd_dev; in set_bdev_super()
985 s->s_bdi = &bdev_get_queue(s->s_bdev)->backing_dev_info; in set_bdev_super()
989 static int test_bdev_super(struct super_block *s, void *data) in test_bdev_super() argument
991 return (void *)s->s_bdev == data; in test_bdev_super()
999 struct super_block *s; in mount_bdev() local
1021 s = sget(fs_type, test_bdev_super, set_bdev_super, flags | MS_NOSEC, in mount_bdev()
1024 if (IS_ERR(s)) in mount_bdev()
1027 if (s->s_root) { in mount_bdev()
1028 if ((flags ^ s->s_flags) & MS_RDONLY) { in mount_bdev()
1029 deactivate_locked_super(s); in mount_bdev()
1041 up_write(&s->s_umount); in mount_bdev()
1043 down_write(&s->s_umount); in mount_bdev()
1047 s->s_mode = mode; in mount_bdev()
1048 strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id)); in mount_bdev()
1049 sb_set_blocksize(s, block_size(bdev)); in mount_bdev()
1050 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); in mount_bdev()
1052 deactivate_locked_super(s); in mount_bdev()
1056 s->s_flags |= MS_ACTIVE; in mount_bdev()
1057 bdev->bd_super = s; in mount_bdev()
1060 return dget(s->s_root); in mount_bdev()
1063 error = PTR_ERR(s); in mount_bdev()
1091 struct super_block *s = sget(fs_type, NULL, set_anon_super, flags, NULL); in mount_nodev() local
1093 if (IS_ERR(s)) in mount_nodev()
1094 return ERR_CAST(s); in mount_nodev()
1096 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); in mount_nodev()
1098 deactivate_locked_super(s); in mount_nodev()
1101 s->s_flags |= MS_ACTIVE; in mount_nodev()
1102 return dget(s->s_root); in mount_nodev()
1106 static int compare_single(struct super_block *s, void *p) in compare_single() argument
1115 struct super_block *s; in mount_single() local
1118 s = sget(fs_type, compare_single, set_anon_super, flags, NULL); in mount_single()
1119 if (IS_ERR(s)) in mount_single()
1120 return ERR_CAST(s); in mount_single()
1121 if (!s->s_root) { in mount_single()
1122 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); in mount_single()
1124 deactivate_locked_super(s); in mount_single()
1127 s->s_flags |= MS_ACTIVE; in mount_single()
1129 do_remount_sb(s, flags, data, 0); in mount_single()
1131 return dget(s->s_root); in mount_single()