lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 10 Jan 2011 17:08:01 -0600
From:	Eric Sandeen <sandeen@...hat.com>
To:	Lukas Czerner <lczerner@...hat.com>
CC:	linux-ext4@...r.kernel.org, tytso@....edu, rwheeler@...hat.com,
	adilger@...ger.ca
Subject: Re: [PATCH 6/6] Add interface to advertise ext4 features in sysfs

On 09/15/2010 11:36 AM, Lukas Czerner wrote:
> User-space should have the opportunity to check what features doest ext4
> support in each particular copy. This adds easy interface by creating new
> "features" directory in sys/fs/ext4/. In that directory files
> advertising feature names can be created.
> 
> Add lazy_itable_init to the feature list.

This seems to break unloading/reloading in .37; near as I can
tell /sys/fs/ext4 never gets unregistered on module unload.

-Eric

> Signed-off-by: Lukas Czerner <lczerner@...hat.com>
> ---
>  fs/ext4/ext4.h  |    5 +++++
>  fs/ext4/super.c |   50 +++++++++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 54 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> index 0df3977..9ecac2e 100644
> --- a/fs/ext4/ext4.h
> +++ b/fs/ext4/ext4.h
> @@ -1502,6 +1502,11 @@ struct ext4_li_request {
>  	unsigned long		lr_next_sched;
>  };
>  
> +struct ext4_features {
> +	struct kobject f_kobj;
> +	struct completion f_kobj_unregister;
> +};
> +
>  /*
>   * Function prototypes
>   */
> diff --git a/fs/ext4/super.c b/fs/ext4/super.c
> index 3e285eb..b817eba 100644
> --- a/fs/ext4/super.c
> +++ b/fs/ext4/super.c
> @@ -57,6 +57,7 @@ struct proc_dir_entry *ext4_proc_root;
>  static struct kset *ext4_kset;
>  struct ext4_lazy_init *ext4_li_info;
>  struct mutex ext4_li_mtx;
> +struct ext4_features *ext4_feat;
>  
>  static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
>  			     unsigned long journal_devnum);
> @@ -2349,6 +2350,7 @@ static struct ext4_attr ext4_attr_##_name = {			\
>  #define EXT4_ATTR(name, mode, show, store) \
>  static struct ext4_attr ext4_attr_##name = __ATTR(name, mode, show, store)
>  
> +#define EXT4_INFO_ATTR(name) EXT4_ATTR(name, 0444, NULL, NULL)
>  #define EXT4_RO_ATTR(name) EXT4_ATTR(name, 0444, name##_show, NULL)
>  #define EXT4_RW_ATTR(name) EXT4_ATTR(name, 0644, name##_show, name##_store)
>  #define EXT4_RW_ATTR_SBI_UI(name, elname)	\
> @@ -2385,6 +2387,14 @@ static struct attribute *ext4_attrs[] = {
>  	NULL,
>  };
>  
> +/* Features this copy of ext4 supports */
> +EXT4_INFO_ATTR(lazy_itable_init);
> +
> +static struct attribute *ext4_feat_attrs[] = {
> +	ATTR_LIST(lazy_itable_init),
> +	NULL,
> +};
> +
>  static ssize_t ext4_attr_show(struct kobject *kobj,
>  			      struct attribute *attr, char *buf)
>  {
> @@ -2413,7 +2423,6 @@ static void ext4_sb_release(struct kobject *kobj)
>  	complete(&sbi->s_kobj_unregister);
>  }
>  
> -
>  static const struct sysfs_ops ext4_attr_ops = {
>  	.show	= ext4_attr_show,
>  	.store	= ext4_attr_store,
> @@ -2425,6 +2434,17 @@ static struct kobj_type ext4_ktype = {
>  	.release	= ext4_sb_release,
>  };
>  
> +static void ext4_feat_release(struct kobject *kobj)
> +{
> +	complete(&ext4_feat->f_kobj_unregister);
> +}
> +
> +static struct kobj_type ext4_feat_ktype = {
> +	.default_attrs	= ext4_feat_attrs,
> +	.sysfs_ops	= &ext4_attr_ops,
> +	.release	= ext4_feat_release,
> +};
> +
>  /*
>   * Check whether this filesystem can be mounted based on
>   * the features present and the RDONLY/RDWR mount requested.
> @@ -4581,6 +4601,30 @@ static struct file_system_type ext4_fs_type = {
>  	.fs_flags	= FS_REQUIRES_DEV,
>  };
>  
> +int __init ext4_init_feat_adverts(void)
> +{
> +	struct ext4_features *ef;
> +	int ret = -ENOMEM;
> +
> +	ef = kzalloc(sizeof(struct ext4_features), GFP_KERNEL);
> +	if (!ef)
> +		goto out;
> +
> +	ef->f_kobj.kset = ext4_kset;
> +	init_completion(&ef->f_kobj_unregister);
> +	ret = kobject_init_and_add(&ef->f_kobj, &ext4_feat_ktype, NULL,
> +				   "features");
> +	if (ret) {
> +		kfree(ef);
> +		goto out;
> +	}
> +
> +	ext4_feat = ef;
> +	ret = 0;
> +out:
> +	return ret;
> +}
> +
>  static int __init init_ext4_fs(void)
>  {
>  	int err;
> @@ -4593,6 +4637,9 @@ static int __init init_ext4_fs(void)
>  	if (!ext4_kset)
>  		goto out4;
>  	ext4_proc_root = proc_mkdir("fs/ext4", NULL);
> +
> +	err = ext4_init_feat_adverts();
> +
>  	err = init_ext4_mballoc();
>  	if (err)
>  		goto out3;
> @@ -4621,6 +4668,7 @@ out1:
>  out2:
>  	exit_ext4_mballoc();
>  out3:
> +	kfree(ext4_feat);
>  	remove_proc_entry("fs/ext4", NULL);
>  	kset_unregister(ext4_kset);
>  out4:

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ