pass default dentry_operations to mount_pseudo()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
f772c4a6a3
commit
c74a1cbb3c
|
@ -617,11 +617,14 @@ pfm_get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
|
||||||
return get_unmapped_area(file, addr, len, pgoff, flags);
|
return get_unmapped_area(file, addr, len, pgoff, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* forward declaration */
|
||||||
|
static static const struct dentry_operations pfmfs_dentry_operations;
|
||||||
|
|
||||||
static struct dentry *
|
static struct dentry *
|
||||||
pfmfs_mount(struct file_system_type *fs_type, int flags, const char *dev_name, void *data)
|
pfmfs_mount(struct file_system_type *fs_type, int flags, const char *dev_name, void *data)
|
||||||
{
|
{
|
||||||
return mount_pseudo(fs_type, "pfm:", NULL, PFMFS_MAGIC);
|
return mount_pseudo(fs_type, "pfm:", NULL, &pfmfs_dentry_operations,
|
||||||
|
PFMFS_MAGIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct file_system_type pfm_fs_type = {
|
static struct file_system_type pfm_fs_type = {
|
||||||
|
@ -2232,7 +2235,6 @@ pfm_alloc_file(pfm_context_t *ctx)
|
||||||
}
|
}
|
||||||
path.mnt = mntget(pfmfs_mnt);
|
path.mnt = mntget(pfmfs_mnt);
|
||||||
|
|
||||||
d_set_d_op(path.dentry, &pfmfs_dentry_operations);
|
|
||||||
d_add(path.dentry, inode);
|
d_add(path.dentry, inode);
|
||||||
|
|
||||||
file = alloc_file(&path, FMODE_READ, &pfm_file_ops);
|
file = alloc_file(&path, FMODE_READ, &pfm_file_ops);
|
||||||
|
|
|
@ -1134,7 +1134,7 @@ static const struct file_operations mtd_fops = {
|
||||||
static struct dentry *mtd_inodefs_mount(struct file_system_type *fs_type,
|
static struct dentry *mtd_inodefs_mount(struct file_system_type *fs_type,
|
||||||
int flags, const char *dev_name, void *data)
|
int flags, const char *dev_name, void *data)
|
||||||
{
|
{
|
||||||
return mount_pseudo(fs_type, "mtd_inode:", NULL, MTD_INODE_FS_MAGIC);
|
return mount_pseudo(fs_type, "mtd_inode:", NULL, NULL, MTD_INODE_FS_MAGIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct file_system_type mtd_inodefs_type = {
|
static struct file_system_type mtd_inodefs_type = {
|
||||||
|
|
|
@ -26,12 +26,6 @@ static struct vfsmount *anon_inode_mnt __read_mostly;
|
||||||
static struct inode *anon_inode_inode;
|
static struct inode *anon_inode_inode;
|
||||||
static const struct file_operations anon_inode_fops;
|
static const struct file_operations anon_inode_fops;
|
||||||
|
|
||||||
static struct dentry *anon_inodefs_mount(struct file_system_type *fs_type,
|
|
||||||
int flags, const char *dev_name, void *data)
|
|
||||||
{
|
|
||||||
return mount_pseudo(fs_type, "anon_inode:", NULL, ANON_INODE_FS_MAGIC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* anon_inodefs_dname() is called from d_path().
|
* anon_inodefs_dname() is called from d_path().
|
||||||
*/
|
*/
|
||||||
|
@ -41,14 +35,22 @@ static char *anon_inodefs_dname(struct dentry *dentry, char *buffer, int buflen)
|
||||||
dentry->d_name.name);
|
dentry->d_name.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
return mount_pseudo(fs_type, "anon_inode:", NULL,
|
||||||
|
&anon_inodefs_dentry_operations, ANON_INODE_FS_MAGIC);
|
||||||
|
}
|
||||||
|
|
||||||
static struct file_system_type anon_inode_fs_type = {
|
static struct file_system_type anon_inode_fs_type = {
|
||||||
.name = "anon_inodefs",
|
.name = "anon_inodefs",
|
||||||
.mount = anon_inodefs_mount,
|
.mount = anon_inodefs_mount,
|
||||||
.kill_sb = kill_anon_super,
|
.kill_sb = kill_anon_super,
|
||||||
};
|
};
|
||||||
static const struct dentry_operations anon_inodefs_dentry_operations = {
|
|
||||||
.d_dname = anon_inodefs_dname,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* nop .set_page_dirty method so that people can use .page_mkwrite on
|
* nop .set_page_dirty method so that people can use .page_mkwrite on
|
||||||
|
@ -113,7 +115,6 @@ struct file *anon_inode_getfile(const char *name,
|
||||||
*/
|
*/
|
||||||
ihold(anon_inode_inode);
|
ihold(anon_inode_inode);
|
||||||
|
|
||||||
d_set_d_op(path.dentry, &anon_inodefs_dentry_operations);
|
|
||||||
d_instantiate(path.dentry, anon_inode_inode);
|
d_instantiate(path.dentry, anon_inode_inode);
|
||||||
|
|
||||||
error = -ENFILE;
|
error = -ENFILE;
|
||||||
|
|
|
@ -473,7 +473,7 @@ static const struct super_operations bdev_sops = {
|
||||||
static struct dentry *bd_mount(struct file_system_type *fs_type,
|
static struct dentry *bd_mount(struct file_system_type *fs_type,
|
||||||
int flags, const char *dev_name, void *data)
|
int flags, const char *dev_name, void *data)
|
||||||
{
|
{
|
||||||
return mount_pseudo(fs_type, "bdev:", &bdev_sops, 0x62646576);
|
return mount_pseudo(fs_type, "bdev:", &bdev_sops, NULL, 0x62646576);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct file_system_type bd_type = {
|
static struct file_system_type bd_type = {
|
||||||
|
|
|
@ -217,7 +217,8 @@ static const struct super_operations simple_super_operations = {
|
||||||
* will never be mountable)
|
* will never be mountable)
|
||||||
*/
|
*/
|
||||||
struct dentry *mount_pseudo(struct file_system_type *fs_type, char *name,
|
struct dentry *mount_pseudo(struct file_system_type *fs_type, char *name,
|
||||||
const struct super_operations *ops, unsigned long magic)
|
const struct super_operations *ops,
|
||||||
|
const struct dentry_operations *dops, unsigned long magic)
|
||||||
{
|
{
|
||||||
struct super_block *s = sget(fs_type, NULL, set_anon_super, NULL);
|
struct super_block *s = sget(fs_type, NULL, set_anon_super, NULL);
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
|
@ -254,6 +255,7 @@ struct dentry *mount_pseudo(struct file_system_type *fs_type, char *name,
|
||||||
dentry->d_parent = dentry;
|
dentry->d_parent = dentry;
|
||||||
d_instantiate(dentry, root);
|
d_instantiate(dentry, root);
|
||||||
s->s_root = dentry;
|
s->s_root = dentry;
|
||||||
|
s->s_d_op = dops;
|
||||||
s->s_flags |= MS_ACTIVE;
|
s->s_flags |= MS_ACTIVE;
|
||||||
return dget(s->s_root);
|
return dget(s->s_root);
|
||||||
|
|
||||||
|
|
|
@ -1004,7 +1004,6 @@ struct file *create_write_pipe(int flags)
|
||||||
goto err_inode;
|
goto err_inode;
|
||||||
path.mnt = mntget(pipe_mnt);
|
path.mnt = mntget(pipe_mnt);
|
||||||
|
|
||||||
d_set_d_op(path.dentry, &pipefs_dentry_operations);
|
|
||||||
d_instantiate(path.dentry, inode);
|
d_instantiate(path.dentry, inode);
|
||||||
|
|
||||||
err = -ENFILE;
|
err = -ENFILE;
|
||||||
|
@ -1266,7 +1265,8 @@ static const struct super_operations pipefs_ops = {
|
||||||
static struct dentry *pipefs_mount(struct file_system_type *fs_type,
|
static struct dentry *pipefs_mount(struct file_system_type *fs_type,
|
||||||
int flags, const char *dev_name, void *data)
|
int flags, const char *dev_name, void *data)
|
||||||
{
|
{
|
||||||
return mount_pseudo(fs_type, "pipe:", &pipefs_ops, PIPEFS_MAGIC);
|
return mount_pseudo(fs_type, "pipe:", &pipefs_ops,
|
||||||
|
&pipefs_dentry_operations, PIPEFS_MAGIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct file_system_type pipe_fs_type = {
|
static struct file_system_type pipe_fs_type = {
|
||||||
|
|
|
@ -1835,7 +1835,9 @@ struct super_block *sget(struct file_system_type *type,
|
||||||
int (*set)(struct super_block *,void *),
|
int (*set)(struct super_block *,void *),
|
||||||
void *data);
|
void *data);
|
||||||
extern struct dentry *mount_pseudo(struct file_system_type *, char *,
|
extern struct dentry *mount_pseudo(struct file_system_type *, char *,
|
||||||
const struct super_operations *ops, unsigned long);
|
const struct super_operations *ops,
|
||||||
|
const struct dentry_operations *dops,
|
||||||
|
unsigned long);
|
||||||
extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
|
extern void simple_set_mnt(struct vfsmount *mnt, struct super_block *sb);
|
||||||
|
|
||||||
static inline void sb_mark_dirty(struct super_block *sb)
|
static inline void sb_mark_dirty(struct super_block *sb)
|
||||||
|
|
30
net/socket.c
30
net/socket.c
|
@ -306,20 +306,6 @@ static const struct super_operations sockfs_ops = {
|
||||||
.statfs = simple_statfs,
|
.statfs = simple_statfs,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct dentry *sockfs_mount(struct file_system_type *fs_type,
|
|
||||||
int flags, const char *dev_name, void *data)
|
|
||||||
{
|
|
||||||
return mount_pseudo(fs_type, "socket:", &sockfs_ops, SOCKFS_MAGIC);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct vfsmount *sock_mnt __read_mostly;
|
|
||||||
|
|
||||||
static struct file_system_type sock_fs_type = {
|
|
||||||
.name = "sockfs",
|
|
||||||
.mount = sockfs_mount,
|
|
||||||
.kill_sb = kill_anon_super,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sockfs_dname() is called from d_path().
|
* sockfs_dname() is called from d_path().
|
||||||
*/
|
*/
|
||||||
|
@ -333,6 +319,21 @@ static const struct dentry_operations sockfs_dentry_operations = {
|
||||||
.d_dname = sockfs_dname,
|
.d_dname = sockfs_dname,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct dentry *sockfs_mount(struct file_system_type *fs_type,
|
||||||
|
int flags, const char *dev_name, void *data)
|
||||||
|
{
|
||||||
|
return mount_pseudo(fs_type, "socket:", &sockfs_ops,
|
||||||
|
&sockfs_dentry_operations, SOCKFS_MAGIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct vfsmount *sock_mnt __read_mostly;
|
||||||
|
|
||||||
|
static struct file_system_type sock_fs_type = {
|
||||||
|
.name = "sockfs",
|
||||||
|
.mount = sockfs_mount,
|
||||||
|
.kill_sb = kill_anon_super,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Obtains the first available file descriptor and sets it up for use.
|
* Obtains the first available file descriptor and sets it up for use.
|
||||||
*
|
*
|
||||||
|
@ -368,7 +369,6 @@ static int sock_alloc_file(struct socket *sock, struct file **f, int flags)
|
||||||
}
|
}
|
||||||
path.mnt = mntget(sock_mnt);
|
path.mnt = mntget(sock_mnt);
|
||||||
|
|
||||||
d_set_d_op(path.dentry, &sockfs_dentry_operations);
|
|
||||||
d_instantiate(path.dentry, SOCK_INODE(sock));
|
d_instantiate(path.dentry, SOCK_INODE(sock));
|
||||||
SOCK_INODE(sock)->i_fop = &socket_file_ops;
|
SOCK_INODE(sock)->i_fop = &socket_file_ops;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue