From: Benjamin LaHaise <bcrl@linux.intel.com>
Date: Wed, 10 Aug 2005 21:16:04 +0000 (-0700)
Subject: [NET]: Make use of ->private_data in sockfd_lookup
X-Git-Tag: v2.6.14-rc1~1035^2~114
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=07dc3f0718d2c88c3094a0aadeeb4744effc5439;p=users%2Fwilly%2Flinux.git

[NET]: Make use of ->private_data in sockfd_lookup

Please consider the patch below which makes use of file->private_data to
store the pointer to the socket, which avoids touching several unused
cachelines in the dentry and inode in sockfd_lookup.

Signed-off-by: Benjamin LaHaise <bcrl@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/net/socket.c b/net/socket.c
index 6f2a17881972..5f76ab8a1594 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -404,6 +404,7 @@ int sock_map_fd(struct socket *sock)
 		file->f_mode = FMODE_READ | FMODE_WRITE;
 		file->f_flags = O_RDWR;
 		file->f_pos = 0;
+		file->private_data = sock;
 		fd_install(fd, file);
 	}
 
@@ -436,6 +437,9 @@ struct socket *sockfd_lookup(int fd, int *err)
 		return NULL;
 	}
 
+	if (file->f_op == &socket_file_ops)
+		return file->private_data;	/* set in sock_map_fd */
+
 	inode = file->f_dentry->d_inode;
 	if (!S_ISSOCK(inode->i_mode)) {
 		*err = -ENOTSOCK;