forked from mirrors/linux
		
	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		(*compat_getsockopt)(struct socket *sock, int level,
 | 
				
			||||||
				      int optname, char __user *optval, int __user *optlen);
 | 
									      int optname, char __user *optval, int __user *optlen);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
						void		(*show_fdinfo)(struct seq_file *m, struct socket *sock);
 | 
				
			||||||
	int		(*sendmsg)   (struct socket *sock, struct msghdr *m,
 | 
						int		(*sendmsg)   (struct socket *sock, struct msghdr *m,
 | 
				
			||||||
				      size_t total_len);
 | 
									      size_t total_len);
 | 
				
			||||||
	/* Notes for implementing recvmsg:
 | 
						/* 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,
 | 
					static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
 | 
				
			||||||
				struct pipe_inode_info *pipe, size_t len,
 | 
									struct pipe_inode_info *pipe, size_t len,
 | 
				
			||||||
				unsigned int flags);
 | 
									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
 | 
					 *	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,
 | 
						.sendpage =	sock_sendpage,
 | 
				
			||||||
	.splice_write = generic_splice_sendpage,
 | 
						.splice_write = generic_splice_sendpage,
 | 
				
			||||||
	.splice_read =	sock_splice_read,
 | 
						.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;
 | 
						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
 | 
					 * Atomic setting of ioctl hooks to avoid race
 | 
				
			||||||
 * with module unload.
 | 
					 * with module unload.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue