From: Ashish Khurange <ashishk@it.iitb.ac.in>
To: linux-fsdevel@vger.kernel.org
Subject: get vfsmount from dentry
Date: Sun, 12 Mar 2006 19:14:27 +0530 [thread overview]
Message-ID: <441425BB.6030604@it.iitb.ac.in> (raw)
Hi,
I'm trying to develop a fmon (file monitor) patch. For that I'm trying
to find complete pathname of the file/directory being changed. If you
have dentry of a file and a corresponding vfsmount struct, I can find
out its entire pathname using following code. Which works exactly the
way I want.
static char * mirror_path (struct dentry *dentry, struct vfsmount
*vfsmnt, char *buffer, int buflen)
{
char * end = buffer+buflen;
char * retval;
int namelen;
*--end = '\0';
buflen--;
if (buflen < 1)
goto Elong;
/* Get '/' right */
retval = end-1;
*retval = '/';
for (;;) {
struct dentry * parent;
if (dentry == vfsmnt->mnt_root || IS_ROOT(dentry)) {
/* Global root? */
spin_lock(&vfsmount_lock);
if (vfsmnt->mnt_parent == vfsmnt) {
spin_unlock(&vfsmount_lock);
break;
}
dentry = vfsmnt->mnt_mountpoint;
vfsmnt = vfsmnt->mnt_parent;
spin_unlock(&vfsmount_lock);
continue;
}
parent = dentry->d_parent;
prefetch(parent);
namelen = dentry->d_name.len;
buflen -= namelen + 1;
if (buflen < 0)
goto Elong;
end -= namelen;
memcpy(end, dentry->d_name.name, namelen);
*--end = '/';
retval = end;
dentry = parent;
}
namelen = dentry->d_name.len;
buflen -= namelen;
if (buflen < 0)
goto Elong;
retval -= namelen-1; /* hit the slash */
memcpy(retval, dentry->d_name.name, namelen);
return retval;
Elong:
return NULL;
}
Now the only problem is in many functions in the filesystem code, I have
access only to the dentry and not to its vfsmount. I can do one thing I
can change the function definition and pass corresponding vfsmount as a
parameter to the function, but this will lead to lot of changes.
Is there any way by which I can found the vfsmount structure of a file
represented by dentry structure?
Regards,
- Ashish
next reply other threads:[~2006-03-12 13:44 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-12 13:44 Ashish Khurange [this message]
2006-03-12 13:55 ` get vfsmount from dentry Al Viro
2006-03-12 17:20 ` Ashish Khurange
2006-03-12 17:41 ` Al Viro
2006-03-12 18:00 ` Ashish Khurange
2006-03-12 18:23 ` Shaya Potter
2006-03-12 18:54 ` Ashish Khurange
2006-03-12 19:13 ` Al Viro
2006-03-12 20:34 ` Ashish Khurange
2006-03-12 20:45 ` Shaya Potter
2006-03-13 7:24 ` Jan Hudec
2006-03-12 18:24 ` Al Viro
2006-03-12 19:10 ` Jamie Lokier
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=441425BB.6030604@it.iitb.ac.in \
--to=ashishk@it.iitb.ac.in \
--cc=linux-fsdevel@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).