Author: glebius
Date: Sun Nov 30 13:40:58 2014
New Revision: 275332
URL: https://svnweb.freebsd.org/changeset/base/275332

Log:
  Merge from projects/sendfile:
  
  Provide pru_ready for AF_LOCAL sockets.  Local sockets sendsdata directly
  to the receive buffer of the peer, thus pru_ready also works on the peer
  socket.
  
  Sponsored by: Netflix
  Sponsored by: Nginx, Inc.

Modified:
  head/sys/kern/uipc_usrreq.c

Modified: head/sys/kern/uipc_usrreq.c
==============================================================================
--- head/sys/kern/uipc_usrreq.c Sun Nov 30 13:28:21 2014        (r275331)
+++ head/sys/kern/uipc_usrreq.c Sun Nov 30 13:40:58 2014        (r275332)
@@ -1048,6 +1048,32 @@ release:
 }
 
 static int
+uipc_ready(struct socket *so, struct mbuf *m, int count)
+{
+       struct unpcb *unp, *unp2;
+       struct socket *so2;
+       int error;
+
+       unp = sotounpcb(so);
+
+       UNP_LINK_RLOCK();
+       unp2 = unp->unp_conn;
+       UNP_PCB_LOCK(unp2);
+       so2 = unp2->unp_socket;
+
+       SOCKBUF_LOCK(&so2->so_rcv);
+       if ((error = sbready(&so2->so_rcv, m, count)) == 0)
+               sorwakeup_locked(so2);
+       else
+               SOCKBUF_UNLOCK(&so2->so_rcv);
+
+       UNP_PCB_UNLOCK(unp2);
+       UNP_LINK_RUNLOCK();
+
+       return (error);
+}
+
+static int
 uipc_sense(struct socket *so, struct stat *sb)
 {
        struct unpcb *unp;
@@ -1161,6 +1187,7 @@ static struct pr_usrreqs uipc_usrreqs_st
        .pru_peeraddr =         uipc_peeraddr,
        .pru_rcvd =             uipc_rcvd,
        .pru_send =             uipc_send,
+       .pru_ready =            uipc_ready,
        .pru_sense =            uipc_sense,
        .pru_shutdown =         uipc_shutdown,
        .pru_sockaddr =         uipc_sockaddr,
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to