Message ID | 1534475441-15543-5-git-send-email-jsimmons@infradead.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | lustre: fixes for sysfs handling | expand |
On Thu, Aug 16 2018, James Simmons wrote: > The only user of ll_sb in struct ll_sb_info is used to query the > name locate in the file_system_type. We can get that information > from using the super block located in struct path instead. This > enables us to use struct ll_sb_info directly for every sysfs or > debugfs entry. > .... > @@ -215,7 +216,7 @@ static ssize_t fstype_show(struct kobject *kobj, struct attribute *attr, > struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info, > ll_kobj); > > - return sprintf(buf, "%s\n", sbi->ll_sb->s_type->name); > + return sprintf(buf, "%s\n", sbi->ll_mnt.mnt->mnt_sb->s_type->name); ll_mnt ??? What is that, why is it a better thing to keep than ll_sb. (looks at code). The code takes a copy of a vfsmnt and a dentry (a path) without increasing the refcount on either??? Why did someone think that was a sane thing to do? Have you plans to get rid of ll_mnt too (I hope)?? Thanks, NeilBrown > } > LUSTRE_RO_ATTR(fstype); > > -- > 1.8.3.1
> On Thu, Aug 16 2018, James Simmons wrote: > > > The only user of ll_sb in struct ll_sb_info is used to query the > > name locate in the file_system_type. We can get that information > > from using the super block located in struct path instead. This > > enables us to use struct ll_sb_info directly for every sysfs or > > debugfs entry. > > > .... > > > @@ -215,7 +216,7 @@ static ssize_t fstype_show(struct kobject *kobj, struct attribute *attr, > > struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info, > > ll_kobj); > > > > - return sprintf(buf, "%s\n", sbi->ll_sb->s_type->name); > > + return sprintf(buf, "%s\n", sbi->ll_mnt.mnt->mnt_sb->s_type->name); > > ll_mnt ??? What is that, why is it a better thing to keep than ll_sb. > (looks at code). At first I was thinking that the name was of the format $FSNAME-$UUID but now that I look at what its requesting that is not the case. The 'name' returned looks to be always "lustre". Yet for some reason its does this long winded way to get this info. Andreas or Oleg is their a reason for this? > The code takes a copy of a vfsmnt and a dentry (a path) without > increasing the refcount on either??? Why did someone think that was a > sane thing to do? > Have you plans to get rid of ll_mnt too (I hope)?? That would be Rahul. The patch is : http://review.whamcloud.com/20061 and the details are at https://jira.whamcloud.com/browse/LU-1882. Some time ago Al Viro and Oleg discussed this. That is under ticket https://jira.whamcloud.com/browse/LU-10824 So the answer is yes their are plans but no one has looked at fixing this.
On Aug 17, 2018, at 18:35, James Simmons <jsimmons@infradead.org> wrote: > >> >> On Thu, Aug 16 2018, James Simmons wrote: >> >>> The only user of ll_sb in struct ll_sb_info is used to query the >>> name locate in the file_system_type. We can get that information >>> from using the super block located in struct path instead. This >>> enables us to use struct ll_sb_info directly for every sysfs or >>> debugfs entry. >>> >> .... >> >>> @@ -215,7 +216,7 @@ static ssize_t fstype_show(struct kobject *kobj, struct attribute *attr, >>> struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info, >>> ll_kobj); >>> >>> - return sprintf(buf, "%s\n", sbi->ll_sb->s_type->name); >>> + return sprintf(buf, "%s\n", sbi->ll_mnt.mnt->mnt_sb->s_type->name); >> >> ll_mnt ??? What is that, why is it a better thing to keep than ll_sb. >> (looks at code). > > At first I was thinking that the name was of the format $FSNAME-$UUID but > now that I look at what its requesting that is not the case. The 'name' > returned looks to be always "lustre". Yet for some reason its does this > long winded way to get this info. Andreas or Oleg is their a reason for > this? In the ancient past the filesystem type was named either "llite" or "lustre", so this was used to print the filesystem type consistently. It has been "lustre" for quite a while now. I recently discussed with you about changing the server-side mounts to use "lustre-mdt" and "lustre-ost", but I don't think this applies to this code here. Cheers, Andreas --- Andreas Dilger Principal Lustre Architect Whamcloud
diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h b/drivers/staging/lustre/lustre/llite/llite_internal.h index 2719bc53..92dc05d 100644 --- a/drivers/staging/lustre/lustre/llite/llite_internal.h +++ b/drivers/staging/lustre/lustre/llite/llite_internal.h @@ -524,7 +524,6 @@ struct ll_sb_info { __kernel_fsid_t ll_fsid; struct kobject ll_kobj; /* sysfs object */ - struct super_block *ll_sb; /* struct super_block (for sysfs code)*/ struct completion ll_kobj_unregister; }; diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c index d16f5d1..d352287 100644 --- a/drivers/staging/lustre/lustre/llite/llite_lib.c +++ b/drivers/staging/lustre/lustre/llite/llite_lib.c @@ -62,7 +62,7 @@ #define log2(n) ffz(~(n)) #endif -static struct ll_sb_info *ll_init_sbi(struct super_block *sb) +static struct ll_sb_info *ll_init_sbi(void) { struct ll_sb_info *sbi = NULL; unsigned long pages; @@ -129,8 +129,6 @@ static struct ll_sb_info *ll_init_sbi(struct super_block *sb) INIT_LIST_HEAD(&sbi->ll_squash.rsi_nosquash_nids); init_rwsem(&sbi->ll_squash.rsi_sem); - sbi->ll_sb = sb; - return sbi; } @@ -912,7 +910,7 @@ int ll_fill_super(struct super_block *sb) try_module_get(THIS_MODULE); /* client additional sb info */ - sbi = ll_init_sbi(sb); + sbi = ll_init_sbi(); lsi->lsi_llsbi = sbi; if (!sbi) { module_put(THIS_MODULE); diff --git a/drivers/staging/lustre/lustre/llite/lproc_llite.c b/drivers/staging/lustre/lustre/llite/lproc_llite.c index a9ad328..8e418ba 100644 --- a/drivers/staging/lustre/lustre/llite/lproc_llite.c +++ b/drivers/staging/lustre/lustre/llite/lproc_llite.c @@ -33,6 +33,7 @@ #define DEBUG_SUBSYSTEM S_LLITE #include <lprocfs_status.h> +#include <linux/mount.h> #include <linux/seq_file.h> #include <obd_support.h> @@ -215,7 +216,7 @@ static ssize_t fstype_show(struct kobject *kobj, struct attribute *attr, struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info, ll_kobj); - return sprintf(buf, "%s\n", sbi->ll_sb->s_type->name); + return sprintf(buf, "%s\n", sbi->ll_mnt.mnt->mnt_sb->s_type->name); } LUSTRE_RO_ATTR(fstype);