diff mbox

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

Message ID 1440089550-4671-2-git-send-email-seth.forshee@canonical.com
State New
Headers show

Commit Message

Seth Forshee Aug. 20, 2015, 4:52 p.m. UTC
From: "Eric W. Biederman" <ebiederm@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@vger.kernel.org
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
(backported from commit 7236c85e1be51a9e25ba0f6e087a66ca89605a49)
BugLink: http://bugs.launchpad.net/bugs/1487125
Signed-off-by: Seth Forshee <seth.forshee@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(-)

Comments

Brad Figg Aug. 20, 2015, 5:07 p.m. UTC | #1
On Thu, Aug 20, 2015 at 09:52:30AM -0700, Seth Forshee wrote:
> From: "Eric W. Biederman" <ebiederm@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@vger.kernel.org
> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
> (backported from commit 7236c85e1be51a9e25ba0f6e087a66ca89605a49)
> BugLink: http://bugs.launchpad.net/bugs/1487125
> Signed-off-by: Seth Forshee <seth.forshee@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@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team

This has been tested by Seth to address the issue.
Stefan Bader Aug. 20, 2015, 5:11 p.m. UTC | #2
Based on it being cc stable and in other releases and tested
Luis Henriques Aug. 20, 2015, 5:21 p.m. UTC | #3
On Thu, Aug 20, 2015 at 09:52:30AM -0700, Seth Forshee wrote:
> From: "Eric W. Biederman" <ebiederm@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@vger.kernel.org
> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
> (backported from commit 7236c85e1be51a9e25ba0f6e087a66ca89605a49)

Just a minor comment: looks like the SHA1 should be
f9bb48825a6b5d02f4cabcc78967c75db903dcdc instead.

And thanks Seth, I'll queue this for the 3.16 stable as well.

Cheers,
--
Luís

> BugLink: http://bugs.launchpad.net/bugs/1487125
> Signed-off-by: Seth Forshee <seth.forshee@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@lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
Seth Forshee Aug. 20, 2015, 5:22 p.m. UTC | #4
On Thu, Aug 20, 2015 at 06:21:13PM +0100, Luis Henriques wrote:
> On Thu, Aug 20, 2015 at 09:52:30AM -0700, Seth Forshee wrote:
> > From: "Eric W. Biederman" <ebiederm@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@vger.kernel.org
> > Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> > Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
> > (backported from commit 7236c85e1be51a9e25ba0f6e087a66ca89605a49)
> 
> Just a minor comment: looks like the SHA1 should be
> f9bb48825a6b5d02f4cabcc78967c75db903dcdc instead.

Yes, that's the right one. Sorry, copied the wrong hash (should have let
git do it for me but I forgot initially and didn't want to redo the
backport).
diff mbox

Patch

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