On Sat, 31 May 2008 17:20:16 +0200, [email protected] wrote:
>
> +int cramfs_unlink(struct inode *dir, struct dentry *dentry)
> +{
> + struct inode *inode = dentry->d_inode;
> + struct dentry *new;
> +
> + inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
> + drop_nlink(inode);
> + new = d_alloc(dentry->d_parent, &dentry->d_name);
> + d_add(new, NULL);
> +
> + dget(dentry);
How is the negative dentry dropped on umount? Looks like we want a
per-sb list to put them on. Then we can walk it and dput each one at
umount time.
> + return 0;
> +}
Jörn
--
"[One] doesn't need to know [...] how to cause a headache in order
to take an aspirin."
-- Scott Culp, Manager of the Microsoft Security Response Center, 2001
On Sunday 01 June 2008, Jörn Engel wrote:
> On Sat, 31 May 2008 17:20:16 +0200, [email protected] wrote:
> >
> > +int cramfs_unlink(struct inode *dir, struct dentry *dentry)
> > +{
> > + struct inode *inode = dentry->d_inode;
> > + struct dentry *new;
> > +
> > + inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
> > + drop_nlink(inode);
> > + new = d_alloc(dentry->d_parent, &dentry->d_name);
> > + d_add(new, NULL);
> > +
> > + dget(dentry);
>
> How is the negative dentry dropped on umount? Looks like we want a
> per-sb list to put them on. Then we can walk it and dput each one at
> umount time.
Good point. I think ramfs does exactly that, using kill_litter_super.
I haven't tested unmount so far, and should probably do something like
that in cramfs_put_super.
Arnd <><