ACK: [PATCH][linux-lts-utopic] sysfs: Create mountpoints with sysfs_create_mount_point

Brad Figg brad.figg at canonical.com
Thu Aug 20 17:07:30 UTC 2015


On Thu, Aug 20, 2015 at 09:52:30AM -0700, Seth Forshee wrote:
> From: "Eric W. Biederman" <ebiederm at xmission.com>
> 
> This allows for better documentation in the code and
> it allows for a simpler and fully correct version of
> fs_fully_visible to be written.
> 
> The mount points converted and their filesystems are:
> /sys/hypervisor/s390/       s390_hypfs
> /sys/kernel/config/         configfs
> /sys/kernel/debug/          debugfs
> /sys/firmware/efi/efivars/  efivarfs
> /sys/fs/fuse/connections/   fusectl
> /sys/fs/pstore/             pstore
> /sys/kernel/tracing/        tracefs
> /sys/fs/cgroup/             cgroup
> /sys/kernel/security/       securityfs
> /sys/fs/selinux/            selinuxfs
> /sys/fs/smackfs/            smackfs
> 
> Cc: stable at vger.kernel.org
> Acked-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
> Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>
> (backported from commit 7236c85e1be51a9e25ba0f6e087a66ca89605a49)
> BugLink: http://bugs.launchpad.net/bugs/1487125
> Signed-off-by: Seth Forshee <seth.forshee at canonical.com>
> ---
>  arch/s390/hypfs/inode.c      | 12 ++++--------
>  drivers/firmware/efi/efi.c   |  6 ++----
>  fs/configfs/mount.c          | 10 ++++------
>  fs/debugfs/inode.c           | 11 ++++-------
>  fs/fuse/inode.c              |  9 +++------
>  fs/pstore/inode.c            | 12 ++++--------
>  kernel/cgroup.c              | 10 ++++------
>  security/inode.c             | 10 ++++------
>  security/selinux/selinuxfs.c | 11 +++++------
>  security/smack/smackfs.c     |  8 ++++----
>  10 files changed, 38 insertions(+), 61 deletions(-)
> 
> diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c
> index c952b98..e86bbf1 100644
> --- a/arch/s390/hypfs/inode.c
> +++ b/arch/s390/hypfs/inode.c
> @@ -461,8 +461,6 @@ static const struct super_operations hypfs_s_ops = {
>  	.show_options	= hypfs_show_options,
>  };
>  
> -static struct kobject *s390_kobj;
> -
>  static int __init hypfs_init(void)
>  {
>  	int rc;
> @@ -482,18 +480,16 @@ static int __init hypfs_init(void)
>  		rc = -ENODATA;
>  		goto fail_hypfs_vm_exit;
>  	}
> -	s390_kobj = kobject_create_and_add("s390", hypervisor_kobj);
> -	if (!s390_kobj) {
> -		rc = -ENOMEM;
> +	rc = sysfs_create_mount_point(hypervisor_kobj, "s390");
> +	if (rc)
>  		goto fail_hypfs_sprp_exit;
> -	}
>  	rc = register_filesystem(&hypfs_type);
>  	if (rc)
>  		goto fail_filesystem;
>  	return 0;
>  
>  fail_filesystem:
> -	kobject_put(s390_kobj);
> +	sysfs_remove_mount_point(hypervisor_kobj, "s390");
>  fail_hypfs_sprp_exit:
>  	hypfs_sprp_exit();
>  fail_hypfs_vm_exit:
> @@ -509,7 +505,7 @@ fail_dbfs_exit:
>  static void __exit hypfs_exit(void)
>  {
>  	unregister_filesystem(&hypfs_type);
> -	kobject_put(s390_kobj);
> +	sysfs_remove_mount_point(hypervisor_kobj, "s390");
>  	hypfs_sprp_exit();
>  	hypfs_vm_exit();
>  	hypfs_diag_exit();
> diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
> index dc79346..583ef8d 100644
> --- a/drivers/firmware/efi/efi.c
> +++ b/drivers/firmware/efi/efi.c
> @@ -41,7 +41,6 @@ struct efi __read_mostly efi = {
>  EXPORT_SYMBOL(efi);
>  
>  static struct kobject *efi_kobj;
> -static struct kobject *efivars_kobj;
>  
>  /*
>   * Let's not leave out systab information that snuck into
> @@ -174,10 +173,9 @@ static int __init efisubsys_init(void)
>  		goto err_remove_group;
>  
>  	/* and the standard mountpoint for efivarfs */
> -	efivars_kobj = kobject_create_and_add("efivars", efi_kobj);
> -	if (!efivars_kobj) {
> +	error = sysfs_create_mount_point(efi_kobj, "efivars");
> +	if (error) {
>  		pr_err("efivars: Subsystem registration failed.\n");
> -		error = -ENOMEM;
>  		goto err_remove_group;
>  	}
>  
> diff --git a/fs/configfs/mount.c b/fs/configfs/mount.c
> index f6c2858..e9aa820 100644
> --- a/fs/configfs/mount.c
> +++ b/fs/configfs/mount.c
> @@ -129,8 +129,6 @@ void configfs_release_fs(void)
>  }
>  
>  
> -static struct kobject *config_kobj;
> -
>  static int __init configfs_init(void)
>  {
>  	int err = -ENOMEM;
> @@ -141,8 +139,8 @@ static int __init configfs_init(void)
>  	if (!configfs_dir_cachep)
>  		goto out;
>  
> -	config_kobj = kobject_create_and_add("config", kernel_kobj);
> -	if (!config_kobj)
> +	err = sysfs_create_mount_point(kernel_kobj, "config");
> +	if (err)
>  		goto out2;
>  
>  	err = configfs_inode_init();
> @@ -158,7 +156,7 @@ out4:
>  	pr_err("Unable to register filesystem!\n");
>  	configfs_inode_exit();
>  out3:
> -	kobject_put(config_kobj);
> +	sysfs_remove_mount_point(kernel_kobj, "config");
>  out2:
>  	kmem_cache_destroy(configfs_dir_cachep);
>  	configfs_dir_cachep = NULL;
> @@ -169,7 +167,7 @@ out:
>  static void __exit configfs_exit(void)
>  {
>  	unregister_filesystem(&configfs_fs_type);
> -	kobject_put(config_kobj);
> +	sysfs_remove_mount_point(kernel_kobj, "config");
>  	kmem_cache_destroy(configfs_dir_cachep);
>  	configfs_dir_cachep = NULL;
>  	configfs_inode_exit();
> diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
> index 0c6ba4e..75c865b 100644
> --- a/fs/debugfs/inode.c
> +++ b/fs/debugfs/inode.c
> @@ -668,20 +668,17 @@ bool debugfs_initialized(void)
>  }
>  EXPORT_SYMBOL_GPL(debugfs_initialized);
>  
> -
> -static struct kobject *debug_kobj;
> -
>  static int __init debugfs_init(void)
>  {
>  	int retval;
>  
> -	debug_kobj = kobject_create_and_add("debug", kernel_kobj);
> -	if (!debug_kobj)
> -		return -EINVAL;
> +	retval = sysfs_create_mount_point(kernel_kobj, "debug");
> +	if (retval)
> +		return retval;
>  
>  	retval = register_filesystem(&debug_fs_type);
>  	if (retval)
> -		kobject_put(debug_kobj);
> +		sysfs_remove_mount_point(kernel_kobj, "debug");
>  	else
>  		debugfs_registered = true;
>  
> diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
> index 9e3f6cf..6abafb1 100644
> --- a/fs/fuse/inode.c
> +++ b/fs/fuse/inode.c
> @@ -1261,7 +1261,6 @@ static void fuse_fs_cleanup(void)
>  }
>  
>  static struct kobject *fuse_kobj;
> -static struct kobject *connections_kobj;
>  
>  static int fuse_sysfs_init(void)
>  {
> @@ -1273,11 +1272,9 @@ static int fuse_sysfs_init(void)
>  		goto out_err;
>  	}
>  
> -	connections_kobj = kobject_create_and_add("connections", fuse_kobj);
> -	if (!connections_kobj) {
> -		err = -ENOMEM;
> +	err = sysfs_create_mount_point(fuse_kobj, "connections");
> +	if (err)
>  		goto out_fuse_unregister;
> -	}
>  
>  	return 0;
>  
> @@ -1289,7 +1286,7 @@ static int fuse_sysfs_init(void)
>  
>  static void fuse_sysfs_cleanup(void)
>  {
> -	kobject_put(connections_kobj);
> +	sysfs_remove_mount_point(fuse_kobj, "connections");
>  	kobject_put(fuse_kobj);
>  }
>  
> diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c
> index fafb7a0..3b172f6 100644
> --- a/fs/pstore/inode.c
> +++ b/fs/pstore/inode.c
> @@ -430,22 +430,18 @@ static struct file_system_type pstore_fs_type = {
>  	.kill_sb	= pstore_kill_sb,
>  };
>  
> -static struct kobject *pstore_kobj;
> -
>  static int __init init_pstore_fs(void)
>  {
> -	int err = 0;
> +	int err;
>  
>  	/* Create a convenient mount point for people to access pstore */
> -	pstore_kobj = kobject_create_and_add("pstore", fs_kobj);
> -	if (!pstore_kobj) {
> -		err = -ENOMEM;
> +	err = sysfs_create_mount_point(fs_kobj, "pstore");
> +	if (err)
>  		goto out;
> -	}
>  
>  	err = register_filesystem(&pstore_fs_type);
>  	if (err < 0)
> -		kobject_put(pstore_kobj);
> +		sysfs_remove_mount_point(fs_kobj, "pstore");
>  
>  out:
>  	return err;
> diff --git a/kernel/cgroup.c b/kernel/cgroup.c
> index 0a46b2a..44fadfb 100644
> --- a/kernel/cgroup.c
> +++ b/kernel/cgroup.c
> @@ -1848,8 +1848,6 @@ static struct file_system_type cgroup_fs_type = {
>  	.kill_sb = cgroup_kill_sb,
>  };
>  
> -static struct kobject *cgroup_kobj;
> -
>  /**
>   * task_cgroup_path - cgroup path of a task in the first cgroup hierarchy
>   * @task: target task
> @@ -4822,13 +4820,13 @@ int __init cgroup_init(void)
>  		}
>  	}
>  
> -	cgroup_kobj = kobject_create_and_add("cgroup", fs_kobj);
> -	if (!cgroup_kobj)
> -		return -ENOMEM;
> +	err = sysfs_create_mount_point(fs_kobj, "cgroup");
> +	if (err)
> +		return err;
>  
>  	err = register_filesystem(&cgroup_fs_type);
>  	if (err < 0) {
> -		kobject_put(cgroup_kobj);
> +		sysfs_remove_mount_point(fs_kobj, "cgroup");
>  		return err;
>  	}
>  
> diff --git a/security/inode.c b/security/inode.c
> index 43ce6e1..617c7ce 100644
> --- a/security/inode.c
> +++ b/security/inode.c
> @@ -215,19 +215,17 @@ void securityfs_remove(struct dentry *dentry)
>  }
>  EXPORT_SYMBOL_GPL(securityfs_remove);
>  
> -static struct kobject *security_kobj;
> -
>  static int __init securityfs_init(void)
>  {
>  	int retval;
>  
> -	security_kobj = kobject_create_and_add("security", kernel_kobj);
> -	if (!security_kobj)
> -		return -EINVAL;
> +	retval = sysfs_create_mount_point(kernel_kobj, "security");
> +	if (retval)
> +		return retval;
>  
>  	retval = register_filesystem(&fs_type);
>  	if (retval)
> -		kobject_put(security_kobj);
> +		sysfs_remove_mount_point(kernel_kobj, "security");
>  	return retval;
>  }
>  
> diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
> index 138949a..181fcd3 100644
> --- a/security/selinux/selinuxfs.c
> +++ b/security/selinux/selinuxfs.c
> @@ -1899,7 +1899,6 @@ static struct file_system_type sel_fs_type = {
>  };
>  
>  struct vfsmount *selinuxfs_mount;
> -static struct kobject *selinuxfs_kobj;
>  
>  static int __init init_sel_fs(void)
>  {
> @@ -1908,13 +1907,13 @@ static int __init init_sel_fs(void)
>  	if (!selinux_enabled)
>  		return 0;
>  
> -	selinuxfs_kobj = kobject_create_and_add("selinux", fs_kobj);
> -	if (!selinuxfs_kobj)
> -		return -ENOMEM;
> +	err = sysfs_create_mount_point(fs_kobj, "selinux");
> +	if (err)
> +		return err;
>  
>  	err = register_filesystem(&sel_fs_type);
>  	if (err) {
> -		kobject_put(selinuxfs_kobj);
> +		sysfs_remove_mount_point(fs_kobj, "selinux");
>  		return err;
>  	}
>  
> @@ -1933,7 +1932,7 @@ __initcall(init_sel_fs);
>  #ifdef CONFIG_SECURITY_SELINUX_DISABLE
>  void exit_sel_fs(void)
>  {
> -	kobject_put(selinuxfs_kobj);
> +	sysfs_remove_mount_point(fs_kobj, "selinux");
>  	kern_unmount(selinuxfs_mount);
>  	unregister_filesystem(&sel_fs_type);
>  }
> diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
> index 32b2488..8608fd7 100644
> --- a/security/smack/smackfs.c
> +++ b/security/smack/smackfs.c
> @@ -2136,16 +2136,16 @@ static const struct file_operations smk_revoke_subj_ops = {
>  	.llseek		= generic_file_llseek,
>  };
>  
> -static struct kset *smackfs_kset;
>  /**
>   * smk_init_sysfs - initialize /sys/fs/smackfs
>   *
>   */
>  static int smk_init_sysfs(void)
>  {
> -	smackfs_kset = kset_create_and_add("smackfs", NULL, fs_kobj);
> -	if (!smackfs_kset)
> -		return -ENOMEM;
> +	int err;
> +	err = sysfs_create_mount_point(fs_kobj, "smackfs");
> +	if (err)
> +		return err;
>  	return 0;
>  }
>  
> -- 
> 2.5.0
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team

This has been tested by Seth to address the issue.

-- 
Brad Figg brad.figg at canonical.com http://www.canonical.com




More information about the kernel-team mailing list