2008-06-01 16:54:56

by Jörn Engel

[permalink] [raw]
Subject: Re: [RFC 3/7] cramfs: allow unlinking of files

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


2008-06-01 21:29:19

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [RFC 3/7] cramfs: allow unlinking of files

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 <><