Lines Matching refs:s
276 struct super_block *s = container_of(work, struct super_block, in destroy_super_work() local
278 fsnotify_sb_free(s); in destroy_super_work()
279 security_sb_free(s); in destroy_super_work()
280 put_user_ns(s->s_user_ns); in destroy_super_work()
281 kfree(s->s_subtype); in destroy_super_work()
283 percpu_free_rwsem(&s->s_writers.rw_sem[i]); in destroy_super_work()
284 kfree(s); in destroy_super_work()
289 struct super_block *s = container_of(head, struct super_block, rcu); in destroy_super_rcu() local
290 INIT_WORK(&s->destroy_work, destroy_super_work); in destroy_super_rcu()
291 schedule_work(&s->destroy_work); in destroy_super_rcu()
295 static void destroy_unused_super(struct super_block *s) in destroy_unused_super() argument
297 if (!s) in destroy_unused_super()
299 super_unlock_excl(s); in destroy_unused_super()
300 list_lru_destroy(&s->s_dentry_lru); in destroy_unused_super()
301 list_lru_destroy(&s->s_inode_lru); in destroy_unused_super()
302 shrinker_free(s->s_shrink); in destroy_unused_super()
304 destroy_super_work(&s->destroy_work); in destroy_unused_super()
319 struct super_block *s = kzalloc(sizeof(struct super_block), GFP_KERNEL); in alloc_super() local
323 if (!s) in alloc_super()
326 INIT_LIST_HEAD(&s->s_mounts); in alloc_super()
327 s->s_user_ns = get_user_ns(user_ns); in alloc_super()
328 init_rwsem(&s->s_umount); in alloc_super()
329 lockdep_set_class(&s->s_umount, &type->s_umount_key); in alloc_super()
345 down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING); in alloc_super()
347 if (security_sb_alloc(s)) in alloc_super()
351 if (__percpu_init_rwsem(&s->s_writers.rw_sem[i], in alloc_super()
356 s->s_bdi = &noop_backing_dev_info; in alloc_super()
357 s->s_flags = flags; in alloc_super()
358 if (s->s_user_ns != &init_user_ns) in alloc_super()
359 s->s_iflags |= SB_I_NODEV; in alloc_super()
360 INIT_HLIST_NODE(&s->s_instances); in alloc_super()
361 INIT_HLIST_BL_HEAD(&s->s_roots); in alloc_super()
362 mutex_init(&s->s_sync_lock); in alloc_super()
363 INIT_LIST_HEAD(&s->s_inodes); in alloc_super()
364 spin_lock_init(&s->s_inode_list_lock); in alloc_super()
365 INIT_LIST_HEAD(&s->s_inodes_wb); in alloc_super()
366 spin_lock_init(&s->s_inode_wblist_lock); in alloc_super()
368 s->s_count = 1; in alloc_super()
369 atomic_set(&s->s_active, 1); in alloc_super()
370 mutex_init(&s->s_vfs_rename_mutex); in alloc_super()
371 lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key); in alloc_super()
372 init_rwsem(&s->s_dquot.dqio_sem); in alloc_super()
373 s->s_maxbytes = MAX_NON_LFS; in alloc_super()
374 s->s_op = &default_op; in alloc_super()
375 s->s_time_gran = 1000000000; in alloc_super()
376 s->s_time_min = TIME64_MIN; in alloc_super()
377 s->s_time_max = TIME64_MAX; in alloc_super()
379 s->s_shrink = shrinker_alloc(SHRINKER_NUMA_AWARE | SHRINKER_MEMCG_AWARE, in alloc_super()
381 if (!s->s_shrink) in alloc_super()
384 s->s_shrink->scan_objects = super_cache_scan; in alloc_super()
385 s->s_shrink->count_objects = super_cache_count; in alloc_super()
386 s->s_shrink->batch = 1024; in alloc_super()
387 s->s_shrink->private_data = s; in alloc_super()
389 if (list_lru_init_memcg(&s->s_dentry_lru, s->s_shrink)) in alloc_super()
391 if (list_lru_init_memcg(&s->s_inode_lru, s->s_shrink)) in alloc_super()
393 return s; in alloc_super()
396 destroy_unused_super(s); in alloc_super()
405 static void __put_super(struct super_block *s) in __put_super() argument
407 if (!--s->s_count) { in __put_super()
408 list_del_init(&s->s_list); in __put_super()
409 WARN_ON(s->s_dentry_lru.node); in __put_super()
410 WARN_ON(s->s_inode_lru.node); in __put_super()
411 WARN_ON(!list_empty(&s->s_mounts)); in __put_super()
412 call_rcu(&s->rcu, destroy_super_rcu); in __put_super()
469 void deactivate_locked_super(struct super_block *s) in deactivate_locked_super() argument
471 struct file_system_type *fs = s->s_type; in deactivate_locked_super()
472 if (atomic_dec_and_test(&s->s_active)) { in deactivate_locked_super()
473 shrinker_free(s->s_shrink); in deactivate_locked_super()
474 fs->kill_sb(s); in deactivate_locked_super()
476 kill_super_notify(s); in deactivate_locked_super()
483 list_lru_destroy(&s->s_dentry_lru); in deactivate_locked_super()
484 list_lru_destroy(&s->s_inode_lru); in deactivate_locked_super()
487 put_super(s); in deactivate_locked_super()
489 super_unlock_excl(s); in deactivate_locked_super()
503 void deactivate_super(struct super_block *s) in deactivate_super() argument
505 if (!atomic_add_unless(&s->s_active, -1, 1)) { in deactivate_super()
506 __super_lock_excl(s); in deactivate_super()
507 deactivate_locked_super(s); in deactivate_super()
735 struct super_block *s = NULL; in sget_fc() local
759 if (!s) { in sget_fc()
761 s = alloc_super(fc->fs_type, fc->sb_flags, user_ns); in sget_fc()
762 if (!s) in sget_fc()
767 s->s_fs_info = fc->s_fs_info; in sget_fc()
768 err = set(s, fc); in sget_fc()
770 s->s_fs_info = NULL; in sget_fc()
772 destroy_unused_super(s); in sget_fc()
776 s->s_type = fc->fs_type; in sget_fc()
777 s->s_iflags |= fc->s_iflags; in sget_fc()
778 strscpy(s->s_id, s->s_type->name, sizeof(s->s_id)); in sget_fc()
784 list_add_tail(&s->s_list, &super_blocks); in sget_fc()
785 hlist_add_head(&s->s_instances, &s->s_type->fs_supers); in sget_fc()
787 get_filesystem(s->s_type); in sget_fc()
788 shrinker_register(s->s_shrink); in sget_fc()
789 return s; in sget_fc()
794 destroy_unused_super(s); in sget_fc()
803 destroy_unused_super(s); in sget_fc()
823 struct super_block *s = NULL; in sget() local
835 destroy_unused_super(s); in sget()
840 destroy_unused_super(s); in sget()
844 if (!s) { in sget()
846 s = alloc_super(type, flags, user_ns); in sget()
847 if (!s) in sget()
852 err = set(s, data); in sget()
855 destroy_unused_super(s); in sget()
858 s->s_type = type; in sget()
859 strscpy(s->s_id, type->name, sizeof(s->s_id)); in sget()
860 list_add_tail(&s->s_list, &super_blocks); in sget()
861 hlist_add_head(&s->s_instances, &type->fs_supers); in sget()
864 shrinker_register(s->s_shrink); in sget()
865 return s; in sget()
1273 int set_anon_super(struct super_block *s, void *data) in set_anon_super() argument
1275 return get_anon_bdev(&s->s_dev); in set_anon_super()
1307 static int test_single_super(struct super_block *s, struct fs_context *fc) in test_single_super() argument
1366 static int set_bdev_super(struct super_block *s, void *data) in set_bdev_super() argument
1368 s->s_dev = *(dev_t *)data; in set_bdev_super()
1372 static int super_s_dev_set(struct super_block *s, struct fs_context *fc) in super_s_dev_set() argument
1374 return set_bdev_super(s, fc->sget_key); in super_s_dev_set()
1377 static int super_s_dev_test(struct super_block *s, struct fs_context *fc) in super_s_dev_test() argument
1379 return !(s->s_iflags & SB_I_RETIRED) && in super_s_dev_test()
1380 s->s_dev == *(dev_t *)fc->sget_key; in super_s_dev_test()
1664 struct super_block *s; in get_tree_bdev_flags() local
1678 s = sget_dev(fc, dev); in get_tree_bdev_flags()
1679 if (IS_ERR(s)) in get_tree_bdev_flags()
1680 return PTR_ERR(s); in get_tree_bdev_flags()
1682 if (s->s_root) { in get_tree_bdev_flags()
1684 if ((fc->sb_flags ^ s->s_flags) & SB_RDONLY) { in get_tree_bdev_flags()
1685 warnf(fc, "%pg: Can't mount, would change RO state", s->s_bdev); in get_tree_bdev_flags()
1686 deactivate_locked_super(s); in get_tree_bdev_flags()
1690 error = setup_bdev_super(s, fc->sb_flags, fc); in get_tree_bdev_flags()
1692 error = fill_super(s, fc); in get_tree_bdev_flags()
1694 deactivate_locked_super(s); in get_tree_bdev_flags()
1697 s->s_flags |= SB_ACTIVE; in get_tree_bdev_flags()
1701 fc->root = dget(s->s_root); in get_tree_bdev_flags()
1719 static int test_bdev_super(struct super_block *s, void *data) in test_bdev_super() argument
1721 return !(s->s_iflags & SB_I_RETIRED) && s->s_dev == *(dev_t *)data; in test_bdev_super()
1728 struct super_block *s; in mount_bdev() local
1737 s = sget(fs_type, test_bdev_super, set_bdev_super, flags, &dev); in mount_bdev()
1738 if (IS_ERR(s)) in mount_bdev()
1739 return ERR_CAST(s); in mount_bdev()
1741 if (s->s_root) { in mount_bdev()
1742 if ((flags ^ s->s_flags) & SB_RDONLY) { in mount_bdev()
1743 deactivate_locked_super(s); in mount_bdev()
1747 error = setup_bdev_super(s, flags, NULL); in mount_bdev()
1749 error = fill_super(s, data, flags & SB_SILENT ? 1 : 0); in mount_bdev()
1751 deactivate_locked_super(s); in mount_bdev()
1755 s->s_flags |= SB_ACTIVE; in mount_bdev()
1758 return dget(s->s_root); in mount_bdev()
1781 struct super_block *s = sget(fs_type, NULL, set_anon_super, flags, NULL); in mount_nodev() local
1783 if (IS_ERR(s)) in mount_nodev()
1784 return ERR_CAST(s); in mount_nodev()
1786 error = fill_super(s, data, flags & SB_SILENT ? 1 : 0); in mount_nodev()
1788 deactivate_locked_super(s); in mount_nodev()
1791 s->s_flags |= SB_ACTIVE; in mount_nodev()
1792 return dget(s->s_root); in mount_nodev()