Lines Matching full:fc
690 bool mount_capable(struct fs_context *fc) in mount_capable() argument
692 if (!(fc->fs_type->fs_flags & FS_USERNS_MOUNT)) in mount_capable()
695 return ns_capable(fc->user_ns, CAP_SYS_ADMIN); in mount_capable()
700 * @fc: Filesystem context.
707 * Whether or not the requested parameters in @fc are taken into account
713 * (1) the namespace the filesystem context @fc and the extant
716 * (2) the filesystem context @fc has requested that reusing an extant
730 struct super_block *sget_fc(struct fs_context *fc, in sget_fc() argument
736 struct user_namespace *user_ns = fc->global ? &init_user_ns : fc->user_ns; in sget_fc()
745 if (user_ns != &init_user_ns && !(fc->fs_type->fs_flags & FS_USERNS_MOUNT)) { in sget_fc()
746 errorfc(fc, "VFS: Mounting from non-initial user namespace is not allowed"); in sget_fc()
753 hlist_for_each_entry(old, &fc->fs_type->fs_supers, s_instances) { in sget_fc()
754 if (test(old, fc)) in sget_fc()
760 s = alloc_super(fc->fs_type, fc->sb_flags, user_ns); in sget_fc()
766 s->s_fs_info = fc->s_fs_info; in sget_fc()
767 err = set(s, fc); in sget_fc()
774 fc->s_fs_info = NULL; in sget_fc()
775 s->s_type = fc->fs_type; in sget_fc()
776 s->s_iflags |= fc->s_iflags; in sget_fc()
791 if (user_ns != old->s_user_ns || fc->exclusive) { in sget_fc()
794 if (fc->exclusive) in sget_fc()
795 warnfc(fc, "reusing existing filesystem not allowed"); in sget_fc()
797 warnfc(fc, "reusing existing filesystem in another namespace not allowed"); in sget_fc()
1011 * @fc: The superblock and configuration
1015 int reconfigure_super(struct fs_context *fc) in reconfigure_super() argument
1017 struct super_block *sb = fc->root->d_sb; in reconfigure_super()
1021 bool force = fc->sb_flags & SB_FORCE; in reconfigure_super()
1023 if (fc->sb_flags_mask & ~MS_RMT_MASK) in reconfigure_super()
1028 retval = security_sb_remount(sb, fc->security); in reconfigure_super()
1032 if (fc->sb_flags_mask & SB_RDONLY) { in reconfigure_super()
1034 if (!(fc->sb_flags & SB_RDONLY) && sb->s_bdev && in reconfigure_super()
1038 remount_rw = !(fc->sb_flags & SB_RDONLY) && sb_rdonly(sb); in reconfigure_super()
1039 remount_ro = (fc->sb_flags & SB_RDONLY) && !sb_rdonly(sb); in reconfigure_super()
1075 if (fc->ops->reconfigure) { in reconfigure_super()
1076 retval = fc->ops->reconfigure(fc); in reconfigure_super()
1086 WRITE_ONCE(sb->s_flags, ((sb->s_flags & ~fc->sb_flags_mask) | in reconfigure_super()
1087 (fc->sb_flags & fc->sb_flags_mask))); in reconfigure_super()
1110 struct fs_context *fc; in do_emergency_remount_callback() local
1112 fc = fs_context_for_reconfigure(sb->s_root, in do_emergency_remount_callback()
1114 if (!IS_ERR(fc)) { in do_emergency_remount_callback()
1115 if (parse_monolithic_mount_data(fc, NULL) == 0) in do_emergency_remount_callback()
1116 (void)reconfigure_super(fc); in do_emergency_remount_callback()
1117 put_fs_context(fc); in do_emergency_remount_callback()
1295 int set_anon_super_fc(struct super_block *sb, struct fs_context *fc) in set_anon_super_fc() argument
1301 static int test_keyed_super(struct super_block *sb, struct fs_context *fc) in test_keyed_super() argument
1303 return sb->s_fs_info == fc->s_fs_info; in test_keyed_super()
1306 static int test_single_super(struct super_block *s, struct fs_context *fc) in test_single_super() argument
1311 static int vfs_get_super(struct fs_context *fc, in vfs_get_super() argument
1314 struct fs_context *fc)) in vfs_get_super()
1319 sb = sget_fc(fc, test, set_anon_super_fc); in vfs_get_super()
1324 err = fill_super(sb, fc); in vfs_get_super()
1331 fc->root = dget(sb->s_root); in vfs_get_super()
1339 int get_tree_nodev(struct fs_context *fc, in get_tree_nodev() argument
1341 struct fs_context *fc)) in get_tree_nodev()
1343 return vfs_get_super(fc, NULL, fill_super); in get_tree_nodev()
1347 int get_tree_single(struct fs_context *fc, in get_tree_single() argument
1349 struct fs_context *fc)) in get_tree_single()
1351 return vfs_get_super(fc, test_single_super, fill_super); in get_tree_single()
1355 int get_tree_keyed(struct fs_context *fc, in get_tree_keyed() argument
1357 struct fs_context *fc), in get_tree_keyed() argument
1360 fc->s_fs_info = key; in get_tree_keyed()
1361 return vfs_get_super(fc, test_keyed_super, fill_super); in get_tree_keyed()
1371 static int super_s_dev_set(struct super_block *s, struct fs_context *fc) in super_s_dev_set() argument
1373 return set_bdev_super(s, fc->sget_key); in super_s_dev_set()
1376 static int super_s_dev_test(struct super_block *s, struct fs_context *fc) in super_s_dev_test() argument
1379 s->s_dev == *(dev_t *)fc->sget_key; in super_s_dev_test()
1384 * @fc: Filesystem context.
1388 * will be stored in fc->sget_key.
1402 struct super_block *sget_dev(struct fs_context *fc, dev_t dev) in sget_dev() argument
1404 fc->sget_key = &dev; in sget_dev()
1405 return sget_fc(fc, super_s_dev_test, super_s_dev_set); in sget_dev()
1603 struct fs_context *fc) in setup_bdev_super() argument
1611 if (fc) in setup_bdev_super()
1612 errorf(fc, "%s: Can't open blockdev", fc->source); in setup_bdev_super()
1632 if (fc) in setup_bdev_super()
1633 warnf(fc, "%pg: Can't mount, blockdev is frozen", bdev); in setup_bdev_super()
1655 * @fc: The filesystem context holding the parameters
1659 int get_tree_bdev_flags(struct fs_context *fc, in get_tree_bdev_flags() argument
1661 struct fs_context *fc), unsigned int flags) in get_tree_bdev_flags() argument
1667 if (!fc->source) in get_tree_bdev_flags()
1668 return invalf(fc, "No source specified"); in get_tree_bdev_flags()
1670 error = lookup_bdev(fc->source, &dev); in get_tree_bdev_flags()
1673 errorf(fc, "%s: Can't lookup blockdev", fc->source); in get_tree_bdev_flags()
1676 fc->sb_flags |= SB_NOSEC; in get_tree_bdev_flags()
1677 s = sget_dev(fc, dev); in get_tree_bdev_flags()
1683 if ((fc->sb_flags ^ s->s_flags) & SB_RDONLY) { in get_tree_bdev_flags()
1684 warnf(fc, "%pg: Can't mount, would change RO state", s->s_bdev); in get_tree_bdev_flags()
1689 error = setup_bdev_super(s, fc->sb_flags, fc); in get_tree_bdev_flags()
1691 error = fill_super(s, fc); in get_tree_bdev_flags()
1699 BUG_ON(fc->root); in get_tree_bdev_flags()
1700 fc->root = dget(s->s_root); in get_tree_bdev_flags()
1707 * @fc: The filesystem context holding the parameters
1710 int get_tree_bdev(struct fs_context *fc, in get_tree_bdev() argument
1714 return get_tree_bdev_flags(fc, fill_super, 0); in get_tree_bdev()
1734 * @fc: The superblock configuration context.
1738 * used for mounting in @fc->root.
1740 int vfs_get_tree(struct fs_context *fc) in vfs_get_tree() argument
1745 if (fc->root) in vfs_get_tree()
1748 /* Get the mountable root in fc->root, with a ref on the root and a ref in vfs_get_tree()
1751 error = fc->ops->get_tree(fc); in vfs_get_tree()
1755 if (!fc->root) { in vfs_get_tree()
1756 pr_err("Filesystem %s get_tree() didn't set fc->root, returned %i\n", in vfs_get_tree()
1757 fc->fs_type->name, error); in vfs_get_tree()
1764 sb = fc->root->d_sb; in vfs_get_tree()
1776 error = security_sb_set_mnt_opts(sb, fc->security, 0, NULL); in vfs_get_tree()
1778 fc_drop_locked(fc); in vfs_get_tree()
1789 "negative value (%lld)\n", fc->fs_type->name, sb->s_maxbytes); in vfs_get_tree()