2007-12-18 07:11:00

by Zhanhua

[permalink] [raw]
Subject: About mounting the sysfs

Hi all,
Currently, I'm studying the code of the sysfs. But I got the
following questions:

1. What is the d_alloc_root used for? Actually, the question should
be: why we have to call d_alloc_root. I think the root already has its
dentry, why we have to allocate another while we mounting a file
system?

2. Why we call d_alloc_root to allocate a dentry for the mount point
while the usual mount point of sysfs is defined by the user (something
like /sysfs but not /). See below:
root = d_alloc_root(inode);
if (!root) {
pr_debug("%s: could not get root dentry!\n",__FUNCTION__);
iput(inode);
return -ENOMEM;
}
root->d_fsdata = &sysfs_root;
sb->s_root = root;

does this means settting the sysfs' mount point to "/" but not "/sysfs".

Thanks.

--Zhanhua


2007-12-18 12:39:38

by Jan Engelhardt

[permalink] [raw]
Subject: Re: About mounting the sysfs


On Dec 18 2007 15:10, wit wrote:
>
>1. What is the d_alloc_root used for? Actually, the question should
>be: why we have to call d_alloc_root.

>I think the root already has its dentry,

It does not.

>why we have to allocate another while we mounting a file
>system?
>
>2. Why we call d_alloc_root to allocate a dentry for the mount point
>while the usual mount point of sysfs is defined by the user (something
>like /sysfs but not /).

/sys is a dentry that belongs to the / vfsmount, but we need a
/ that belongs to the <whatever you are going to mount> vfsmount.

> See below:
> root = d_alloc_root(inode);
> if (!root) {
> pr_debug("%s: could not get root dentry!\n",__FUNCTION__);
> iput(inode);
> return -ENOMEM;
> }
> root->d_fsdata = &sysfs_root;
> sb->s_root = root;
>
>does this means settting the sysfs' mount point to "/" but not "/sysfs".

2007-12-18 15:05:58

by Zhanhua

[permalink] [raw]
Subject: Re: About mounting the sysfs

2007/12/18, Jan Engelhardt <[email protected]>:
>
> On Dec 18 2007 15:10, wit wrote:
> >
> >1. What is the d_alloc_root used for? Actually, the question should
> >be: why we have to call d_alloc_root.
>
> >I think the root already has its dentry,
>
> It does not.
There's no dentry for the "/"? I mean the rootfs.

>
> >why we have to allocate another while we mounting a file
> >system?
> >
> >2. Why we call d_alloc_root to allocate a dentry for the mount point
> >while the usual mount point of sysfs is defined by the user (something
> >like /sysfs but not /).
>
> /sys is a dentry that belongs to the / vfsmount, but we need a
> / that belongs to the <whatever you are going to mount> vfsmount.

Why we need such a vfsmount (for the "/", not the rootfs)? And where
we store the mount point info (path) when mount_root, s_root and the
mnt_mountpoint are all points to the "/" which is allocated by
d_alloc_root? Or do we have to store such info? Why?

>
> > See below:
> > root = d_alloc_root(inode);
> > if (!root) {
> > pr_debug("%s: could not get root dentry!\n",__FUNCTION__);
> > iput(inode);
> > return -ENOMEM;
> > }
> > root->d_fsdata = &sysfs_root;
> > sb->s_root = root;
> >
> >does this means settting the sysfs' mount point to "/" but not "/sysfs".
>