Subject: Polling on sockets in kernel space and struct file

From: Martin Sustrik <[email-masked]>
Date: Wed, 08 Dec 2010 15:33:59 +0100

Hi all,

As part of implementing a new experimental protocol family, we are 
trying to create a socket in kernel. This seems to be easy, just use 
sock_create_kern(). However, the socket returned by this function does 
not have associated file structure; thus it cannot be polled on using 
poll_initwait() and friends.

We have tried to create the appropriate struct file using sock_map_fd(), 
but this has two problems:

1) We do not want our internal socket to be visible in the process 
context, i.e. it should not have a file descriptor.

2) During process exit, we get a kernel BUG from iput() in fs/inode.c:1260.

We then tried another approach using anon_inode_getfile() to get a 
struct file, but this still produces the problem 2) above.

Any help/advice on how to proceed would be appreciated; for reference 
our work in progress can be seen at

http://github.com/sustrik/linux-2.6/blob/sp-v2.6.36/net/sp/af_sp.c

Thanks,

Martin