mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 21:05:08 +00:00
[ng_socket] Don't take the SOCKBUF_LOCK() twice in the RX data path.
This is just a minor optimization, but it's sensitive. This gives an improvement of 30-50 kpps. Reviewed by: kp, markj, glebius, lutz_donnerhacke.de Approved by: vmaffione (mentor) Sponsored by: vstack.com Differential Revision: https://reviews.freebsd.org/D27382
This commit is contained in:
parent
4dd8db62e9
commit
3326f7e9bb
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=368727
|
@ -987,6 +987,8 @@ ngs_rcvmsg(node_p node, item_p item, hook_p lasthook)
|
|||
m_freem(m);
|
||||
return (ENOBUFS);
|
||||
}
|
||||
|
||||
/* sorwakeup_locked () releases the lock internally. */
|
||||
sorwakeup_locked(so);
|
||||
|
||||
return (error);
|
||||
|
@ -1025,12 +1027,17 @@ ngs_rcvdata(hook_p hook, item_p item)
|
|||
addr->sg_data[addrlen] = '\0';
|
||||
|
||||
/* Try to tell the socket which hook it came in on. */
|
||||
if (sbappendaddr(&so->so_rcv, (struct sockaddr *)addr, m, NULL) == 0) {
|
||||
SOCKBUF_LOCK(&so->so_rcv);
|
||||
if (sbappendaddr_locked(&so->so_rcv, (struct sockaddr *)addr, m,
|
||||
NULL) == 0) {
|
||||
SOCKBUF_UNLOCK(&so->so_rcv);
|
||||
m_freem(m);
|
||||
TRAP_ERROR;
|
||||
return (ENOBUFS);
|
||||
}
|
||||
sorwakeup(so);
|
||||
|
||||
/* sorwakeup_locked () releases the lock internally. */
|
||||
sorwakeup_locked(so);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue