Subject: Re: [RFC, PATCH] dont insert sockets/pipes dentries into dentry_hashtable.

From: Eric Dumazet <[email-masked]>
Date: Wed, 01 Nov 2006 09:21:06 +0100

David Miller a écrit :
> From: Eric Dumazet <[email-masked]>
> Date: Tue, 31 Oct 2006 19:48:48 +0100
> 
>> We currently insert sockets/pipes dentries into the global dentry
>> hashtable.  This is *useless* because there is currently no way
>> these entries can be used for a lookup(). (/proc/xxx/fd/xxx uses a
>> different mechanism)
> 
> It turns out that while procfs uses a different "mechanism", those
> procfs symlinks do point to the real socket dentry, so when you
> readlink() on it you do d_path() on the real socket dentry.
> 
> If you unhash these things, I'm pretty sure you'll see an ugly
> "(deleted)" at the end of the symlink string for /proc/$pid/fd/$X
> files that are sockets or something like that.

No no, my patch takes care of that.

You still see the right link for pipes and sockets on /proc/$pid/fd/XXX

And " (deleted)" is correctly added to deleted files.

> 
> Al Viro just suggested a way around this to me:
> 
> 1) Just mark the dentry HASHED by hand in the dentry flags, but don't
>    actually hash it.
> 
> 2) Create a special dentry->d_deleted method for sockets that returns
>    0 and clears by hand the HASHED flag bit in the dentry (see what
>    dput() does when this happens).
> 
> It's an abuse but it will work.
> 
Why hack when a proper thing can be done ?