From: Shailabh <nagar@watson.ibm.com>
To: linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: Help on automatic population of directories
Date: Fri, 05 Mar 2004 11:55:09 -0500 [thread overview]
Message-ID: <4048B0ED.1010702@watson.ibm.com> (raw)
Hi,
I'm writing a ram-based filesystem. I want the filesystem to
automatically create a few files inside every directory that a user creates.
I'm trying to do this within the mkdir dir_inode op of the fs
using code which looks like this:
>>>>>>>>>>>>>>>>>>
/* rcfs_mknod and rcfs_get_inode are replicas of corresponding code from
fs/ramfs/inode.c */
static int
rcfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
{
struct inode * inode = rcfs_get_inode(dir->i_sb, mode, dev);
int error = -ENOSPC, i=0;
if (inode) {
if (dir->i_mode & S_ISGID) {
inode->i_gid = dir->i_gid;
if (S_ISDIR(mode))
inode->i_mode |= S_ISGID;
}
d_instantiate(dentry, inode);
dget(dentry); /* Extra count - pin the dentry in core */
error = 0;
}
return error;
}
static int rcfs_mkdir(struct inode * dir, struct dentry * dentry, int mode)
{
int retval = rcfs_mknod(dir, dentry, mode | S_IFDIR, 0);
/* rcfs_mknod is a complete replica of
fs/ramfs/inode.c:ramfs_mknod */
if (!retval)
dir->i_nlink++;
/* Do something here to create some "magic" files in this
directory before returning to the user */
return retval;
}
<<<<<<<<<<<<<<<<<<<<<<<<<<
Q1: is there sufficient info in the dir/dentry variables for a file to
be created within rcfs_mkdir (at the comment point) ? If so, what would
be the best way to do this ?
Q2: How can one find the vfsmnt given the dentry of a directory that has
just been created ?
I was thinking of using d_path() to lookup the complete path of the
just-created directory and then calling a modified version of sys_mknod
on the resulting string. Probably not the best way of doing this but it
was simpler to understand :-) But I'm having trouble determining the
vfsmnt from the dentry returned from rcfs_mknod - I tried using
current->namespace->root and also current->fs->rootmnt with no success -
dpath returns blank or garbage as the resulting string and not
"/rcfs/hello/" which is what I expect when directory hello is being created.
I'm new to filesystem development and still not completely clear about
the relationships between mount points, dentries etc....Any pointers on
useful functions would be much appreciated !
Thanks,
Shailabh
next reply other threads:[~2004-03-05 16:55 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-03-05 16:55 Shailabh [this message]
2004-03-06 20:51 ` Help on automatic population of directories Jan Hudec
2004-03-08 20:32 ` Shailabh Nagar
2004-03-09 8:22 ` Jan Hudec
2004-03-08 6:14 ` Maneesh Soni
2004-03-08 20:38 ` Shailabh Nagar
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=4048B0ED.1010702@watson.ibm.com \
--to=nagar@watson.ibm.com \
--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).