Browse Source

pass default dentry_operations to mount_pseudo()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Al Viro 14 years ago
parent
commit
c74a1cbb3c
8 changed files with 40 additions and 33 deletions
  1. 4 2
      arch/ia64/kernel/perfmon.c
  2. 1 1
      drivers/mtd/mtdchar.c
  3. 11 10
      fs/anon_inodes.c
  4. 1 1
      fs/block_dev.c
  5. 3 1
      fs/libfs.c
  6. 2 2
      fs/pipe.c
  7. 3 1
      include/linux/fs.h
  8. 15 15
      net/socket.c

+ 4 - 2
arch/ia64/kernel/perfmon.c

@@ -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);

+ 1 - 1
drivers/mtd/mtdchar.c

@@ -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 = {

+ 11 - 10
fs/anon_inodes.c

@@ -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;

+ 1 - 1
fs/block_dev.c

@@ -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 = {

+ 3 - 1
fs/libfs.c

@@ -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);
 
 

+ 2 - 2
fs/pipe.c

@@ -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 = {

+ 3 - 1
include/linux/fs.h

@@ -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)

+ 15 - 15
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;