From: Eric Sandeen <sandeen@redhat.com>
To: Lukas Czerner <lczerner@redhat.com>
Cc: linux-ext4@vger.kernel.org, tytso@mit.edu, rwheeler@redhat.com,
adilger@dilger.ca
Subject: Re: [PATCH 6/6] Add interface to advertise ext4 features in sysfs
Date: Mon, 10 Jan 2011 17:08:01 -0600 [thread overview]
Message-ID: <4D2B9151.7060007@redhat.com> (raw)
In-Reply-To: <1284568568-13637-7-git-send-email-lczerner@redhat.com>
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@redhat.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:
next prev parent reply other threads:[~2011-01-10 23:08 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-15 16:36 [PATCH 0/6 v3] Lazy itable initialization for Ext4 Lukas Czerner
2010-09-15 16:36 ` [PATCH 1/6] Add helper function for blkdev_issue_zeroout Lukas Czerner
2010-09-15 20:33 ` Mike Snitzer
2010-09-15 16:36 ` [PATCH 2/6] Add inititable/noinititable mount options for ext4 Lukas Czerner
2010-09-15 16:36 ` [PATCH 3/6] Add inode table initialization code for Ext4 Lukas Czerner
2010-09-15 16:46 ` Lukas Czerner
2010-09-15 16:36 ` [PATCH 4/6] Use sb_issue_zeroout in setup_new_group_blocks Lukas Czerner
2010-09-15 16:36 ` [PATCH 5/6] Use sb_issue_discard in ext4_ext_zeroout Lukas Czerner
2010-09-15 20:19 ` Mike Snitzer
2010-09-15 16:36 ` [PATCH 6/6] Add interface to advertise ext4 features in sysfs Lukas Czerner
2011-01-10 23:08 ` Eric Sandeen [this message]
2011-01-11 12:55 ` Lukas Czerner
-- strict thread matches above, loose matches on Subject: below --
2010-09-16 12:47 [PATCH 0/6 v4] Lazy itable initialization for Ext4 Lukas Czerner
2010-09-16 12:47 ` [PATCH 6/6] Add interface to advertise ext4 features in sysfs Lukas Czerner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D2B9151.7060007@redhat.com \
--to=sandeen@redhat.com \
--cc=adilger@dilger.ca \
--cc=lczerner@redhat.com \
--cc=linux-ext4@vger.kernel.org \
--cc=rwheeler@redhat.com \
--cc=tytso@mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.