Re: FS: hardlinks on directories

Helge Hafting
2003-08-05T22:01:27Z

On Tue, Aug 05, 2003 at 03:03:51PM +0200, Stephan von Krawczynski wrote:
> On Tue, 05 Aug 2003 14:51:46 +0200
> Helge Hafting <helgehaf@aitel.hist.no> wrote:
>
> > Even more fun is when you have a directory loop like this:
> >
> > mkdir A
> > cd A
> > mkdir B
> > cd B
> > make hard link C back to A
> >
> > cd ../..
> > rmdir A
> >
> > You now removed A from your home directory, but the
> > directory itself did not disappear because it had
> > another hard link from C in B.
>
> How about a truly simple idea:
>
> rmdir A says "directory in use" and is rejected
>
Then anybody can prevent you from removing your obsolete directories
by creating links to them. Existing hard link don't have
such problems.

> Which means you simply cannot remove the first directory entry before not all
> other links to it are removed. This implies only two things:
> 1) you have to know who was first.

This requires fs modifications. I.e. a new fs

> 2) you have to be able to find out where the links are.
This is trivial but io intensive - by searching the entire directory
tree. Doable in userspace, a nastry DOS opportunity if in the kernel.

Another option is to store pointers to all directory entries
in the inode, but that means much more complicated "mv", "rmdir"
and "mkdir". Remember, it shouldn't merely "work" but also scale
well on io-intensive SMP machines. Complicated operations tend
to need more locking in case several processes (on different
processors) try to modify the same directory simultaneously.

>
> Both sound solvable.
>
Anything is possible, but in this case - why bother?
Do you have a specific use in mind, or is it
just a "cool" thing? People have thought about directory
links long before linux, tried it, and found other solutions
for their tasks.

Helge Hafting