[lkml]   [2007]   [Mar]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [patch] epoll use a single inode ...
Eric Dumazet a écrit :
> I would definitly *love* saving dentries for pipes (and sockets too),
> but how are you going to get the inode ?
> pipes()/sockets() can use read()/write()/rw_verify_area() and thus need
> file->f_path.dentry->d_inode (so each pipe needs a separate dentry)
> Are you suggesting adding a new "struct file_operations" member to get
> the inode ?
> Or re-intoducing an inode pointer in struct file ?

Crazy ideas : (some readers are going to kill me)

1) Use the low order bit of f_path.dentry to say : this pointer is not a
pointer to a dentry but the inode pointer (with the low order bit set to 1)


2) file->f_path.dentry set to NULL for this special files (so that we dont
need to dput() and cache line ping pong the common dentry each time we
__fput() a pipe/socket.

Same trick could be used for file->f_path.mnt, because there is a big SMP
cache line ping/pong to maintain a mnt_count on pipe/sockets mountpoint while
these file systems cannot be un-mounted)

If dentry is NULL, we get the inode pointer from an overlay of struct
file_ra_state f_ra; (because for this special files readahead is unused)

This adds some conditional branches of course, but being able to save ram and
better use cpu caches might be worth them.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2007-03-07 08:19    [W:0.061 / U:1.572 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site