mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	net: Allow to show socket-specific information in /proc/[pid]/fdinfo/[fd]
This adds .show_fdinfo to socket_file_ops, so protocols will be able to print their specific data in fdinfo. Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									6b8350a4b0
								
							
						
					
					
						commit
						b4653342b1
					
				
					 2 changed files with 13 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -171,6 +171,7 @@ struct proto_ops {
 | 
			
		|||
	int		(*compat_getsockopt)(struct socket *sock, int level,
 | 
			
		||||
				      int optname, char __user *optval, int __user *optlen);
 | 
			
		||||
#endif
 | 
			
		||||
	void		(*show_fdinfo)(struct seq_file *m, struct socket *sock);
 | 
			
		||||
	int		(*sendmsg)   (struct socket *sock, struct msghdr *m,
 | 
			
		||||
				      size_t total_len);
 | 
			
		||||
	/* Notes for implementing recvmsg:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								net/socket.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								net/socket.c
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -128,6 +128,7 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,
 | 
			
		|||
static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
 | 
			
		||||
				struct pipe_inode_info *pipe, size_t len,
 | 
			
		||||
				unsigned int flags);
 | 
			
		||||
static void sock_show_fdinfo(struct seq_file *m, struct file *f);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *	Socket files have a set of 'special' operations as well as the generic file ones. These don't appear
 | 
			
		||||
| 
						 | 
				
			
			@ -150,6 +151,9 @@ static const struct file_operations socket_file_ops = {
 | 
			
		|||
	.sendpage =	sock_sendpage,
 | 
			
		||||
	.splice_write = generic_splice_sendpage,
 | 
			
		||||
	.splice_read =	sock_splice_read,
 | 
			
		||||
#ifdef CONFIG_PROC_FS
 | 
			
		||||
	.show_fdinfo =	sock_show_fdinfo,
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -993,6 +997,14 @@ static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from)
 | 
			
		|||
	return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void sock_show_fdinfo(struct seq_file *m, struct file *f)
 | 
			
		||||
{
 | 
			
		||||
	struct socket *sock = f->private_data;
 | 
			
		||||
 | 
			
		||||
	if (sock->ops->show_fdinfo)
 | 
			
		||||
		sock->ops->show_fdinfo(m, sock);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Atomic setting of ioctl hooks to avoid race
 | 
			
		||||
 * with module unload.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue