Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[NET]: Use file->private_data to get socket pointer.

Avoid touching file->f_dentry on sockets, since file->private_data
directly gives us the socket pointer.

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Eric Dumazet and committed by
David S. Miller
b69aee04 4706df3d

+13 -15
+2 -4
net/packet/af_packet.c
··· 1535 1535 static void packet_mm_open(struct vm_area_struct *vma) 1536 1536 { 1537 1537 struct file *file = vma->vm_file; 1538 - struct inode *inode = file->f_dentry->d_inode; 1539 - struct socket * sock = SOCKET_I(inode); 1538 + struct socket * sock = file->private_data; 1540 1539 struct sock *sk = sock->sk; 1541 1540 1542 1541 if (sk) ··· 1545 1546 static void packet_mm_close(struct vm_area_struct *vma) 1546 1547 { 1547 1548 struct file *file = vma->vm_file; 1548 - struct inode *inode = file->f_dentry->d_inode; 1549 - struct socket * sock = SOCKET_I(inode); 1549 + struct socket * sock = file->private_data; 1550 1550 struct sock *sk = sock->sk; 1551 1551 1552 1552 if (sk)
+11 -11
net/socket.c
··· 667 667 } 668 668 iocb->private = x; 669 669 x->kiocb = iocb; 670 - sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode); 670 + sock = iocb->ki_filp->private_data; 671 671 672 672 x->async_msg.msg_name = NULL; 673 673 x->async_msg.msg_namelen = 0; ··· 709 709 } 710 710 iocb->private = x; 711 711 x->kiocb = iocb; 712 - sock = SOCKET_I(iocb->ki_filp->f_dentry->d_inode); 712 + sock = iocb->ki_filp->private_data; 713 713 714 714 x->async_msg.msg_name = NULL; 715 715 x->async_msg.msg_namelen = 0; ··· 732 732 struct socket *sock; 733 733 int flags; 734 734 735 - sock = SOCKET_I(file->f_dentry->d_inode); 735 + sock = file->private_data; 736 736 737 737 flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT; 738 738 if (more) ··· 741 741 return sock->ops->sendpage(sock, page, offset, size, flags); 742 742 } 743 743 744 - static int sock_readv_writev(int type, struct inode * inode, 744 + static int sock_readv_writev(int type, 745 745 struct file * file, const struct iovec * iov, 746 746 long count, size_t size) 747 747 { 748 748 struct msghdr msg; 749 749 struct socket *sock; 750 750 751 - sock = SOCKET_I(inode); 751 + sock = file->private_data; 752 752 753 753 msg.msg_name = NULL; 754 754 msg.msg_namelen = 0; ··· 775 775 int i; 776 776 for (i = 0 ; i < count ; i++) 777 777 tot_len += vector[i].iov_len; 778 - return sock_readv_writev(VERIFY_WRITE, file->f_dentry->d_inode, 778 + return sock_readv_writev(VERIFY_WRITE, 779 779 file, vector, count, tot_len); 780 780 } 781 781 ··· 786 786 int i; 787 787 for (i = 0 ; i < count ; i++) 788 788 tot_len += vector[i].iov_len; 789 - return sock_readv_writev(VERIFY_READ, file->f_dentry->d_inode, 789 + return sock_readv_writev(VERIFY_READ, 790 790 file, vector, count, tot_len); 791 791 } 792 792 ··· 840 840 void __user *argp = (void __user *)arg; 841 841 int pid, err; 842 842 843 - sock = SOCKET_I(file->f_dentry->d_inode); 843 + sock = file->private_data; 844 844 if (cmd >= SIOCDEVPRIVATE && cmd <= (SIOCDEVPRIVATE + 15)) { 845 845 err = dev_ioctl(cmd, argp); 846 846 } else ··· 939 939 /* 940 940 * We can't return errors to poll, so it's either yes or no. 941 941 */ 942 - sock = SOCKET_I(file->f_dentry->d_inode); 942 + sock = file->private_data; 943 943 return sock->ops->poll(file, sock, wait); 944 944 } 945 945 946 946 static int sock_mmap(struct file * file, struct vm_area_struct * vma) 947 947 { 948 - struct socket *sock = SOCKET_I(file->f_dentry->d_inode); 948 + struct socket *sock = file->private_data; 949 949 950 950 return sock->ops->mmap(file, sock, vma); 951 951 } ··· 995 995 return -ENOMEM; 996 996 } 997 997 998 - sock = SOCKET_I(filp->f_dentry->d_inode); 998 + sock = filp->private_data; 999 999 1000 1000 if ((sk=sock->sk) == NULL) { 1001 1001 kfree(fna);