Subject: Re: funlink() for fun!
To: Matthias Buelow <mkb@mukappabeta.de>
From: Greg A. Woods <woods@weird.com>
List: tech-kern
Date: 07/12/2003 04:54:01
[ On Saturday, July 12, 2003 at 03:53:44 (+0200), Matthias Buelow wrote: ]
> Subject: Re: funlink() for fun!
>
> I addition, the only proper semantics for an funlink() system call I
> could see would be to set the reference counter in the inode to zero,

No, not zero -- just decremented by one (assuming the proper directory
entry can be found).

> close/invalidate the file and all descriptors to it and have the
> kernel

No, absolutely NOT!  unlink() doesn't to this for VERY good reasons, and
funlink() could not do so either.

> some external process or fsck at reboot remove all references
> from directories.

as I say in my other reply this is impossible to do safely without
locking the whole filesystem (or unmounting it or going to single-user
mode and assuming the admin is clueful).

Forcing the user of funlink() to suffer through an internal ftw() and
still risk a failure if the link count is not exactly one is one thing,
but forcing the whole system to do without a filesystem for the time it
takes to fsck it would be ludicrous.

>  It would indeed delete the file, not a
> directory entry, which is literally what the caller requested.

That's completely wrong given how I've described funlink().

-- 
								Greg A. Woods

+1 416 218-0098;            <g.a.woods@ieee.org>;           <woods@robohack.ca>
Planix, Inc. <woods@planix.com>; VE3TCP; Secrets of the Weird <woods@weird.com>