[Devel] Re: [PATCH 20/25] sysfs: Rename Support multiple superblocks
Eric W. Biederman
ebiederm at xmission.com
Wed Aug 8 09:35:38 PDT 2007
Tejun Heo <htejun at gmail.com> writes:
> Yeah, I think using -ENOENT is better; otherwise, my little head feels
> like exploding. :-)
Ok. I think I know the feeling.
> More importantly, sysfs_get_dentry() seems like it
> would deference ERR_PTR() value. No?
I'm confused where you are referring to but I will try answer
this.
__sysfs_get_dentry always returns a dentry or NULL if it can't
find the dentry.
I have quoted my final version of sysfs_get_dentry below for discussion.
> struct dentry *sysfs_get_dentry(struct super_block *sb, struct sysfs_dirent *sd)
> {
> struct sysfs_dirent *cur;
> struct dentry *parent_dentry, *dentry;
>
> /* Bail if this sd won't show up in this superblock */
> if (sd->s_parent && sd->s_parent->s_flags & SYSFS_FLAG_TAGGED) {
> const void *tag;
> tag = sysfs_lookup_tag(sd->s_parent, sb);
> if (sd->s_tag.tag != tag)
> return NULL;
> }
This is the only location where could return NULL the early check
if this operation is possible.
> /* Find the first parent which has valid dentry.
> */
> dentry = NULL;
> cur = sd;
> while (!(dentry = __sysfs_get_dentry(sb, cur))) {
> if (cur->s_flags & SYSFS_FLAG_REMOVED) {
> dentry = ERR_PTR(-ENOENT);
> break;
> }
> cur = cur->s_parent;
> }
Here we depend on the fact that sysfs_root is pointed to
by sb->s_root so we know it will always have a dentry.
> /* from the found dentry, look up depth times */
> while (dentry->d_fsdata != sd) {
> /* Find the first ancestor I have not looked up */
> cur = sd;
> while (cur->s_parent != dentry->d_fsdata)
> cur = cur->s_parent;
>
> /* look it up */
> parent_dentry = dentry;
> dentry = sysfs_add_dentry(parent_dentry, cur);
> dput(parent_dentry);
>
> if (IS_ERR(dentry))
> break;
> }
> return dentry;
> }
Eric
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list