You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
Merge branch 'work.mount0' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs mount updates from Al Viro: "The first part of mount updates. Convert filesystems to use the new mount API" * 'work.mount0' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (63 commits) mnt_init(): call shmem_init() unconditionally constify ksys_mount() string arguments don't bother with registering rootfs init_rootfs(): don't bother with init_ramfs_fs() vfs: Convert smackfs to use the new mount API vfs: Convert selinuxfs to use the new mount API vfs: Convert securityfs to use the new mount API vfs: Convert apparmorfs to use the new mount API vfs: Convert openpromfs to use the new mount API vfs: Convert xenfs to use the new mount API vfs: Convert gadgetfs to use the new mount API vfs: Convert oprofilefs to use the new mount API vfs: Convert ibmasmfs to use the new mount API vfs: Convert qib_fs/ipathfs to use the new mount API vfs: Convert efivarfs to use the new mount API vfs: Convert configfs to use the new mount API vfs: Convert binfmt_misc to use the new mount API convenience helper: get_tree_single() convenience helper get_tree_nodev() vfs: Kill sget_userns() ...
This commit is contained in:
@@ -39,6 +39,7 @@
|
||||
#include <linux/smp.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/capability.h>
|
||||
#include <linux/rcupdate.h>
|
||||
@@ -600,17 +601,19 @@ pfm_unprotect_ctx_ctxsw(pfm_context_t *x, unsigned long f)
|
||||
/* forward declaration */
|
||||
static const struct dentry_operations pfmfs_dentry_operations;
|
||||
|
||||
static struct dentry *
|
||||
pfmfs_mount(struct file_system_type *fs_type, int flags, const char *dev_name, void *data)
|
||||
static int pfmfs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
return mount_pseudo(fs_type, "pfm:", NULL, &pfmfs_dentry_operations,
|
||||
PFMFS_MAGIC);
|
||||
struct pseudo_fs_context *ctx = init_pseudo(fc, PFMFS_MAGIC);
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
ctx->dops = &pfmfs_dentry_operations;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_system_type pfm_fs_type = {
|
||||
.name = "pfmfs",
|
||||
.mount = pfmfs_mount,
|
||||
.kill_sb = kill_anon_super,
|
||||
.name = "pfmfs",
|
||||
.init_fs_context = pfmfs_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
MODULE_ALIAS_FS("pfmfs");
|
||||
|
||||
|
||||
@@ -2104,8 +2104,7 @@ static int rdt_init_fs_context(struct fs_context *fc)
|
||||
ctx->kfc.magic = RDTGROUP_SUPER_MAGIC;
|
||||
fc->fs_private = &ctx->kfc;
|
||||
fc->ops = &rdt_fs_context_ops;
|
||||
if (fc->user_ns)
|
||||
put_user_ns(fc->user_ns);
|
||||
put_user_ns(fc->user_ns);
|
||||
fc->user_ns = get_user_ns(&init_user_ns);
|
||||
fc->global = true;
|
||||
return 0;
|
||||
|
||||
@@ -357,8 +357,7 @@ int devtmpfs_mount(const char *mntdir)
|
||||
if (!thread)
|
||||
return 0;
|
||||
|
||||
err = ksys_mount("devtmpfs", (char *)mntdir, "devtmpfs", MS_SILENT,
|
||||
NULL);
|
||||
err = ksys_mount("devtmpfs", mntdir, "devtmpfs", MS_SILENT, NULL);
|
||||
if (err)
|
||||
printk(KERN_INFO "devtmpfs: error mounting %i\n", err);
|
||||
else
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
#include <linux/magic.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/pfn_t.h>
|
||||
@@ -469,16 +470,19 @@ static const struct super_operations dax_sops = {
|
||||
.drop_inode = generic_delete_inode,
|
||||
};
|
||||
|
||||
static struct dentry *dax_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data)
|
||||
static int dax_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
return mount_pseudo(fs_type, "dax:", &dax_sops, NULL, DAXFS_MAGIC);
|
||||
struct pseudo_fs_context *ctx = init_pseudo(fc, DAXFS_MAGIC);
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
ctx->ops = &dax_sops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_system_type dax_fs_type = {
|
||||
.name = "dax",
|
||||
.mount = dax_mount,
|
||||
.kill_sb = kill_anon_super,
|
||||
.name = "dax",
|
||||
.init_fs_context = dax_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
static int dax_test(struct inode *inode, void *data)
|
||||
@@ -665,10 +669,6 @@ static int dax_fs_init(void)
|
||||
if (!dax_cache)
|
||||
return -ENOMEM;
|
||||
|
||||
rc = register_filesystem(&dax_fs_type);
|
||||
if (rc)
|
||||
goto err_register_fs;
|
||||
|
||||
dax_mnt = kern_mount(&dax_fs_type);
|
||||
if (IS_ERR(dax_mnt)) {
|
||||
rc = PTR_ERR(dax_mnt);
|
||||
@@ -679,8 +679,6 @@ static int dax_fs_init(void)
|
||||
return 0;
|
||||
|
||||
err_mount:
|
||||
unregister_filesystem(&dax_fs_type);
|
||||
err_register_fs:
|
||||
kmem_cache_destroy(dax_cache);
|
||||
|
||||
return rc;
|
||||
@@ -689,7 +687,6 @@ static int dax_fs_init(void)
|
||||
static void dax_fs_exit(void)
|
||||
{
|
||||
kern_unmount(dax_mnt);
|
||||
unregister_filesystem(&dax_fs_type);
|
||||
kmem_cache_destroy(dax_cache);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <linux/reservation.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
|
||||
#include <uapi/linux/dma-buf.h>
|
||||
#include <uapi/linux/magic.h>
|
||||
@@ -59,16 +60,20 @@ static const struct dentry_operations dma_buf_dentry_ops = {
|
||||
|
||||
static struct vfsmount *dma_buf_mnt;
|
||||
|
||||
static struct dentry *dma_buf_fs_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *name, void *data)
|
||||
static int dma_buf_fs_init_context(struct fs_context *fc)
|
||||
{
|
||||
return mount_pseudo(fs_type, "dmabuf:", NULL, &dma_buf_dentry_ops,
|
||||
DMA_BUF_MAGIC);
|
||||
struct pseudo_fs_context *ctx;
|
||||
|
||||
ctx = init_pseudo(fc, DMA_BUF_MAGIC);
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
ctx->dops = &dma_buf_dentry_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_system_type dma_buf_fs_type = {
|
||||
.name = "dmabuf",
|
||||
.mount = dma_buf_fs_mount,
|
||||
.init_fs_context = dma_buf_fs_init_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/srcu.h>
|
||||
|
||||
@@ -535,28 +536,15 @@ EXPORT_SYMBOL(drm_dev_unplug);
|
||||
static int drm_fs_cnt;
|
||||
static struct vfsmount *drm_fs_mnt;
|
||||
|
||||
static const struct dentry_operations drm_fs_dops = {
|
||||
.d_dname = simple_dname,
|
||||
};
|
||||
|
||||
static const struct super_operations drm_fs_sops = {
|
||||
.statfs = simple_statfs,
|
||||
};
|
||||
|
||||
static struct dentry *drm_fs_mount(struct file_system_type *fs_type, int flags,
|
||||
const char *dev_name, void *data)
|
||||
static int drm_fs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
return mount_pseudo(fs_type,
|
||||
"drm:",
|
||||
&drm_fs_sops,
|
||||
&drm_fs_dops,
|
||||
0x010203ff);
|
||||
return init_pseudo(fc, 0x010203ff) ? 0 : -ENOMEM;
|
||||
}
|
||||
|
||||
static struct file_system_type drm_fs_type = {
|
||||
.name = "drm",
|
||||
.owner = THIS_MODULE,
|
||||
.mount = drm_fs_mount,
|
||||
.init_fs_context = drm_fs_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/fs_context.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/init.h>
|
||||
@@ -506,7 +507,7 @@ bail:
|
||||
* after device init. The direct add_cntr_files() call handles adding
|
||||
* them from the init code, when the fs is already mounted.
|
||||
*/
|
||||
static int qibfs_fill_super(struct super_block *sb, void *data, int silent)
|
||||
static int qibfs_fill_super(struct super_block *sb, struct fs_context *fc)
|
||||
{
|
||||
struct qib_devdata *dd;
|
||||
unsigned long index;
|
||||
@@ -534,17 +535,24 @@ bail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct dentry *qibfs_mount(struct file_system_type *fs_type, int flags,
|
||||
const char *dev_name, void *data)
|
||||
static int qibfs_get_tree(struct fs_context *fc)
|
||||
{
|
||||
struct dentry *ret;
|
||||
|
||||
ret = mount_single(fs_type, flags, data, qibfs_fill_super);
|
||||
if (!IS_ERR(ret))
|
||||
qib_super = ret->d_sb;
|
||||
int ret = get_tree_single(fc, qibfs_fill_super);
|
||||
if (ret == 0)
|
||||
qib_super = fc->root->d_sb;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct fs_context_operations qibfs_context_ops = {
|
||||
.get_tree = qibfs_get_tree,
|
||||
};
|
||||
|
||||
static int qibfs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
fc->ops = &qibfs_context_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void qibfs_kill_super(struct super_block *s)
|
||||
{
|
||||
kill_litter_super(s);
|
||||
@@ -583,7 +591,7 @@ int qibfs_remove(struct qib_devdata *dd)
|
||||
static struct file_system_type qibfs_fs_type = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "ipathfs",
|
||||
.mount = qibfs_mount,
|
||||
.init_fs_context = qibfs_init_fs_context,
|
||||
.kill_sb = qibfs_kill_super,
|
||||
};
|
||||
MODULE_ALIAS_FS("ipathfs");
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <misc/cxl.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
#include <linux/sched/mm.h>
|
||||
#include <linux/mmu_context.h>
|
||||
|
||||
@@ -33,21 +34,15 @@
|
||||
static int cxl_fs_cnt;
|
||||
static struct vfsmount *cxl_vfs_mount;
|
||||
|
||||
static const struct dentry_operations cxl_fs_dops = {
|
||||
.d_dname = simple_dname,
|
||||
};
|
||||
|
||||
static struct dentry *cxl_fs_mount(struct file_system_type *fs_type, int flags,
|
||||
const char *dev_name, void *data)
|
||||
static int cxl_fs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
return mount_pseudo(fs_type, "cxl:", NULL, &cxl_fs_dops,
|
||||
CXL_PSEUDO_FS_MAGIC);
|
||||
return init_pseudo(fc, CXL_PSEUDO_FS_MAGIC) ? 0 : -ENOMEM;
|
||||
}
|
||||
|
||||
static struct file_system_type cxl_fs_type = {
|
||||
.name = "cxl",
|
||||
.owner = THIS_MODULE,
|
||||
.mount = cxl_fs_mount,
|
||||
.init_fs_context = cxl_fs_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/fs_context.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/uaccess.h>
|
||||
@@ -74,13 +75,21 @@ static LIST_HEAD(service_processors);
|
||||
|
||||
static struct inode *ibmasmfs_make_inode(struct super_block *sb, int mode);
|
||||
static void ibmasmfs_create_files (struct super_block *sb);
|
||||
static int ibmasmfs_fill_super (struct super_block *sb, void *data, int silent);
|
||||
static int ibmasmfs_fill_super(struct super_block *sb, struct fs_context *fc);
|
||||
|
||||
|
||||
static struct dentry *ibmasmfs_mount(struct file_system_type *fst,
|
||||
int flags, const char *name, void *data)
|
||||
static int ibmasmfs_get_tree(struct fs_context *fc)
|
||||
{
|
||||
return mount_single(fst, flags, data, ibmasmfs_fill_super);
|
||||
return get_tree_single(fc, ibmasmfs_fill_super);
|
||||
}
|
||||
|
||||
static const struct fs_context_operations ibmasmfs_context_ops = {
|
||||
.get_tree = ibmasmfs_get_tree,
|
||||
};
|
||||
|
||||
static int ibmasmfs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
fc->ops = &ibmasmfs_context_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct super_operations ibmasmfs_s_ops = {
|
||||
@@ -93,12 +102,12 @@ static const struct file_operations *ibmasmfs_dir_ops = &simple_dir_operations;
|
||||
static struct file_system_type ibmasmfs_type = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "ibmasmfs",
|
||||
.mount = ibmasmfs_mount,
|
||||
.init_fs_context = ibmasmfs_init_fs_context,
|
||||
.kill_sb = kill_litter_super,
|
||||
};
|
||||
MODULE_ALIAS_FS("ibmasmfs");
|
||||
|
||||
static int ibmasmfs_fill_super (struct super_block *sb, void *data, int silent)
|
||||
static int ibmasmfs_fill_super(struct super_block *sb, struct fs_context *fc)
|
||||
{
|
||||
struct inode *root;
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
#include <linux/balloon_compaction.h>
|
||||
#include <linux/vmw_vmci_defs.h>
|
||||
#include <linux/vmw_vmci_api.h>
|
||||
@@ -1728,22 +1729,15 @@ static inline void vmballoon_debugfs_exit(struct vmballoon *b)
|
||||
|
||||
#ifdef CONFIG_BALLOON_COMPACTION
|
||||
|
||||
static struct dentry *vmballoon_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name,
|
||||
void *data)
|
||||
static int vmballoon_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
static const struct dentry_operations ops = {
|
||||
.d_dname = simple_dname,
|
||||
};
|
||||
|
||||
return mount_pseudo(fs_type, "balloon-vmware:", NULL, &ops,
|
||||
BALLOON_VMW_MAGIC);
|
||||
return init_pseudo(fc, BALLOON_VMW_MAGIC) ? 0 : -ENOMEM;
|
||||
}
|
||||
|
||||
static struct file_system_type vmballoon_fs = {
|
||||
.name = "balloon-vmware",
|
||||
.mount = vmballoon_mount,
|
||||
.kill_sb = kill_anon_super,
|
||||
.name = "balloon-vmware",
|
||||
.init_fs_context = vmballoon_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
static struct vfsmount *vmballoon_mnt;
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/oprofile.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/fs_context.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
@@ -238,7 +239,7 @@ struct dentry *oprofilefs_mkdir(struct dentry *parent, char const *name)
|
||||
}
|
||||
|
||||
|
||||
static int oprofilefs_fill_super(struct super_block *sb, void *data, int silent)
|
||||
static int oprofilefs_fill_super(struct super_block *sb, struct fs_context *fc)
|
||||
{
|
||||
struct inode *root_inode;
|
||||
|
||||
@@ -263,18 +264,25 @@ static int oprofilefs_fill_super(struct super_block *sb, void *data, int silent)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static struct dentry *oprofilefs_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data)
|
||||
static int oprofilefs_get_tree(struct fs_context *fc)
|
||||
{
|
||||
return mount_single(fs_type, flags, data, oprofilefs_fill_super);
|
||||
return get_tree_single(fc, oprofilefs_fill_super);
|
||||
}
|
||||
|
||||
static const struct fs_context_operations oprofilefs_context_ops = {
|
||||
.get_tree = oprofilefs_get_tree,
|
||||
};
|
||||
|
||||
static int oprofilefs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
fc->ops = &oprofilefs_context_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_system_type oprofilefs_type = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "oprofilefs",
|
||||
.mount = oprofilefs_mount,
|
||||
.init_fs_context = oprofilefs_init_fs_context,
|
||||
.kill_sb = kill_litter_super,
|
||||
};
|
||||
MODULE_ALIAS_FS("oprofilefs");
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <linux/idr.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/sched/signal.h>
|
||||
|
||||
@@ -31,31 +32,15 @@
|
||||
static int ocxlflash_fs_cnt;
|
||||
static struct vfsmount *ocxlflash_vfs_mount;
|
||||
|
||||
static const struct dentry_operations ocxlflash_fs_dops = {
|
||||
.d_dname = simple_dname,
|
||||
};
|
||||
|
||||
/*
|
||||
* ocxlflash_fs_mount() - mount the pseudo-filesystem
|
||||
* @fs_type: File system type.
|
||||
* @flags: Flags for the filesystem.
|
||||
* @dev_name: Device name associated with the filesystem.
|
||||
* @data: Data pointer.
|
||||
*
|
||||
* Return: pointer to the directory entry structure
|
||||
*/
|
||||
static struct dentry *ocxlflash_fs_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name,
|
||||
void *data)
|
||||
static int ocxlflash_fs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
return mount_pseudo(fs_type, "ocxlflash:", NULL, &ocxlflash_fs_dops,
|
||||
OCXLFLASH_FS_MAGIC);
|
||||
return init_pseudo(fc, OCXLFLASH_FS_MAGIC) ? 0 : -ENOMEM;
|
||||
}
|
||||
|
||||
static struct file_system_type ocxlflash_fs_type = {
|
||||
.name = "ocxlflash",
|
||||
.owner = THIS_MODULE,
|
||||
.mount = ocxlflash_fs_mount,
|
||||
.init_fs_context = ocxlflash_fs_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/fs_context.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/uts.h>
|
||||
#include <linux/wait.h>
|
||||
@@ -1990,7 +1991,7 @@ static const struct super_operations gadget_fs_operations = {
|
||||
};
|
||||
|
||||
static int
|
||||
gadgetfs_fill_super (struct super_block *sb, void *opts, int silent)
|
||||
gadgetfs_fill_super (struct super_block *sb, struct fs_context *fc)
|
||||
{
|
||||
struct inode *inode;
|
||||
struct dev_data *dev;
|
||||
@@ -2044,11 +2045,19 @@ Enomem:
|
||||
}
|
||||
|
||||
/* "mount -t gadgetfs path /dev/gadget" ends up here */
|
||||
static struct dentry *
|
||||
gadgetfs_mount (struct file_system_type *t, int flags,
|
||||
const char *path, void *opts)
|
||||
static int gadgetfs_get_tree(struct fs_context *fc)
|
||||
{
|
||||
return mount_single (t, flags, opts, gadgetfs_fill_super);
|
||||
return get_tree_single(fc, gadgetfs_fill_super);
|
||||
}
|
||||
|
||||
static const struct fs_context_operations gadgetfs_context_ops = {
|
||||
.get_tree = gadgetfs_get_tree,
|
||||
};
|
||||
|
||||
static int gadgetfs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
fc->ops = &gadgetfs_context_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -2068,7 +2077,7 @@ gadgetfs_kill_sb (struct super_block *sb)
|
||||
static struct file_system_type gadgetfs_type = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = shortname,
|
||||
.mount = gadgetfs_mount,
|
||||
.init_fs_context = gadgetfs_init_fs_context,
|
||||
.kill_sb = gadgetfs_kill_sb,
|
||||
};
|
||||
MODULE_ALIAS_FS("gadgetfs");
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <linux/mm.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/magic.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
|
||||
/*
|
||||
* Balloon device works in 4K page units. So each page is pointed to by
|
||||
@@ -745,20 +746,14 @@ static int virtballoon_migratepage(struct balloon_dev_info *vb_dev_info,
|
||||
return MIGRATEPAGE_SUCCESS;
|
||||
}
|
||||
|
||||
static struct dentry *balloon_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data)
|
||||
static int balloon_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
static const struct dentry_operations ops = {
|
||||
.d_dname = simple_dname,
|
||||
};
|
||||
|
||||
return mount_pseudo(fs_type, "balloon-kvm:", NULL, &ops,
|
||||
BALLOON_KVM_MAGIC);
|
||||
return init_pseudo(fc, BALLOON_KVM_MAGIC) ? 0 : -ENOMEM;
|
||||
}
|
||||
|
||||
static struct file_system_type balloon_fs = {
|
||||
.name = "balloon-kvm",
|
||||
.mount = balloon_mount,
|
||||
.init_fs_context = balloon_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/errno.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/fs_context.h>
|
||||
#include <linux/magic.h>
|
||||
|
||||
#include <xen/xen.h>
|
||||
@@ -43,7 +44,7 @@ static const struct file_operations capabilities_file_ops = {
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
static int xenfs_fill_super(struct super_block *sb, void *data, int silent)
|
||||
static int xenfs_fill_super(struct super_block *sb, struct fs_context *fc)
|
||||
{
|
||||
static const struct tree_descr xenfs_files[] = {
|
||||
[2] = { "xenbus", &xen_xenbus_fops, S_IRUSR|S_IWUSR },
|
||||
@@ -68,17 +69,25 @@ static int xenfs_fill_super(struct super_block *sb, void *data, int silent)
|
||||
xen_initial_domain() ? xenfs_init_files : xenfs_files);
|
||||
}
|
||||
|
||||
static struct dentry *xenfs_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name,
|
||||
void *data)
|
||||
static int xenfs_get_tree(struct fs_context *fc)
|
||||
{
|
||||
return mount_single(fs_type, flags, data, xenfs_fill_super);
|
||||
return get_tree_single(fc, xenfs_fill_super);
|
||||
}
|
||||
|
||||
static const struct fs_context_operations xenfs_context_ops = {
|
||||
.get_tree = xenfs_get_tree,
|
||||
};
|
||||
|
||||
static int xenfs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
fc->ops = &xenfs_context_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_system_type xenfs_type = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "xenfs",
|
||||
.mount = xenfs_mount,
|
||||
.init_fs_context = xenfs_init_fs_context,
|
||||
.kill_sb = kill_litter_super,
|
||||
};
|
||||
MODULE_ALIAS_FS("xenfs");
|
||||
|
||||
16
fs/aio.c
16
fs/aio.c
@@ -42,6 +42,7 @@
|
||||
#include <linux/ramfs.h>
|
||||
#include <linux/percpu-refcount.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
|
||||
#include <asm/kmap_types.h>
|
||||
#include <linux/uaccess.h>
|
||||
@@ -249,15 +250,12 @@ static struct file *aio_private_file(struct kioctx *ctx, loff_t nr_pages)
|
||||
return file;
|
||||
}
|
||||
|
||||
static struct dentry *aio_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data)
|
||||
static int aio_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
struct dentry *root = mount_pseudo(fs_type, "aio:", NULL, NULL,
|
||||
AIO_RING_MAGIC);
|
||||
|
||||
if (!IS_ERR(root))
|
||||
root->d_sb->s_iflags |= SB_I_NOEXEC;
|
||||
return root;
|
||||
if (!init_pseudo(fc, AIO_RING_MAGIC))
|
||||
return -ENOMEM;
|
||||
fc->s_iflags |= SB_I_NOEXEC;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* aio_setup
|
||||
@@ -268,7 +266,7 @@ static int __init aio_setup(void)
|
||||
{
|
||||
static struct file_system_type aio_fs = {
|
||||
.name = "aio",
|
||||
.mount = aio_mount,
|
||||
.init_fs_context = aio_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
aio_mnt = kern_mount(&aio_fs);
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/magic.h>
|
||||
#include <linux/anon_inodes.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
@@ -39,16 +40,18 @@ static const struct dentry_operations anon_inodefs_dentry_operations = {
|
||||
.d_dname = anon_inodefs_dname,
|
||||
};
|
||||
|
||||
static struct dentry *anon_inodefs_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data)
|
||||
static int anon_inodefs_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
return mount_pseudo(fs_type, "anon_inode:", NULL,
|
||||
&anon_inodefs_dentry_operations, ANON_INODE_FS_MAGIC);
|
||||
struct pseudo_fs_context *ctx = init_pseudo(fc, ANON_INODE_FS_MAGIC);
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
ctx->dops = &anon_inodefs_dentry_operations;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_system_type anon_inode_fs_type = {
|
||||
.name = "anon_inodefs",
|
||||
.mount = anon_inodefs_mount,
|
||||
.init_fs_context = anon_inodefs_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/fs_context.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/uaccess.h>
|
||||
@@ -821,7 +822,7 @@ static const struct super_operations s_ops = {
|
||||
.evict_inode = bm_evict_inode,
|
||||
};
|
||||
|
||||
static int bm_fill_super(struct super_block *sb, void *data, int silent)
|
||||
static int bm_fill_super(struct super_block *sb, struct fs_context *fc)
|
||||
{
|
||||
int err;
|
||||
static const struct tree_descr bm_files[] = {
|
||||
@@ -836,10 +837,19 @@ static int bm_fill_super(struct super_block *sb, void *data, int silent)
|
||||
return err;
|
||||
}
|
||||
|
||||
static struct dentry *bm_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data)
|
||||
static int bm_get_tree(struct fs_context *fc)
|
||||
{
|
||||
return mount_single(fs_type, flags, data, bm_fill_super);
|
||||
return get_tree_single(fc, bm_fill_super);
|
||||
}
|
||||
|
||||
static const struct fs_context_operations bm_context_ops = {
|
||||
.get_tree = bm_get_tree,
|
||||
};
|
||||
|
||||
static int bm_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
fc->ops = &bm_context_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct linux_binfmt misc_format = {
|
||||
@@ -850,7 +860,7 @@ static struct linux_binfmt misc_format = {
|
||||
static struct file_system_type bm_fs_type = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "binfmt_misc",
|
||||
.mount = bm_mount,
|
||||
.init_fs_context = bm_init_fs_context,
|
||||
.kill_sb = kill_litter_super,
|
||||
};
|
||||
MODULE_ALIAS_FS("binfmt_misc");
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <linux/writeback.h>
|
||||
#include <linux/mpage.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
#include <linux/uio.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/log2.h>
|
||||
@@ -821,19 +822,19 @@ static const struct super_operations bdev_sops = {
|
||||
.evict_inode = bdev_evict_inode,
|
||||
};
|
||||
|
||||
static struct dentry *bd_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data)
|
||||
static int bd_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
struct dentry *dent;
|
||||
dent = mount_pseudo(fs_type, "bdev:", &bdev_sops, NULL, BDEVFS_MAGIC);
|
||||
if (!IS_ERR(dent))
|
||||
dent->d_sb->s_iflags |= SB_I_CGROUPWB;
|
||||
return dent;
|
||||
struct pseudo_fs_context *ctx = init_pseudo(fc, BDEVFS_MAGIC);
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
fc->s_iflags |= SB_I_CGROUPWB;
|
||||
ctx->ops = &bdev_sops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_system_type bd_type = {
|
||||
.name = "bdev",
|
||||
.mount = bd_mount,
|
||||
.init_fs_context = bd_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <linux/mount.h>
|
||||
#include <linux/pseudo_fs.h>
|
||||
#include <linux/magic.h>
|
||||
#include "btrfs-tests.h"
|
||||
#include "../ctree.h"
|
||||
@@ -32,17 +33,19 @@ static const struct super_operations btrfs_test_super_ops = {
|
||||
.destroy_inode = btrfs_test_destroy_inode,
|
||||
};
|
||||
|
||||
static struct dentry *btrfs_test_mount(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name,
|
||||
void *data)
|
||||
|
||||
static int btrfs_test_init_fs_context(struct fs_context *fc)
|
||||
{
|
||||
return mount_pseudo(fs_type, "btrfs_test:", &btrfs_test_super_ops,
|
||||
NULL, BTRFS_TEST_MAGIC);
|
||||
struct pseudo_fs_context *ctx = init_pseudo(fc, BTRFS_TEST_MAGIC);
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
ctx->ops = &btrfs_test_super_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_system_type test_type = {
|
||||
.name = "btrfs_test_fs",
|
||||
.mount = btrfs_test_mount,
|
||||
.init_fs_context = btrfs_test_init_fs_context,
|
||||
.kill_sb = kill_anon_super,
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user