Re: Pass "socket *" to sballoc/sbfree & co
On 24/07/21(Sat) 11:43, Martin Pieuchot wrote: > Diff below adds an extra argument, a pointer to the socket corresponding > to the buffer given to: sballoc(), sbfree(), sbcompress(), sbcheck() and > sbdroprecord(). > > This pointer will be used to assert for or grab a per-socket lock. > > There is no functional change in this diff. Its goal is to simplify the > review (and possible revert) of the change introducing `so_mtx' [0]. > > Note that this diff includes the removal of sbinsertoob() sent > previously. Updated diff now that sbinsertoob() has been removed. > [0] https://marc.info/?l=openbsd-tech=162685565421248=2 ok? Index: kern/uipc_socket.c === RCS file: /cvs/src/sys/kern/uipc_socket.c,v retrieving revision 1.263 diff -u -p -r1.263 uipc_socket.c --- kern/uipc_socket.c 28 May 2021 16:24:53 - 1.263 +++ kern/uipc_socket.c 25 Jul 2021 14:14:28 - @@ -860,7 +860,7 @@ dontblock: *paddr = m_copym(m, 0, m->m_len, M_NOWAIT); m = m->m_next; } else { - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); if (paddr) { *paddr = m; so->so_rcv.sb_mb = m->m_next; @@ -884,7 +884,7 @@ dontblock: *controlp = m_copym(m, 0, m->m_len, M_NOWAIT); m = m->m_next; } else { - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); so->so_rcv.sb_mb = m->m_next; m->m_nextpkt = m->m_next = NULL; cm = m; @@ -984,7 +984,7 @@ dontblock: orig_resid = 0; } else { nextrecord = m->m_nextpkt; - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); if (mp) { *mp = m; mp = >m_next; @@ -1065,7 +1065,7 @@ dontblock: if (m && pr->pr_flags & PR_ATOMIC) { flags |= MSG_TRUNC; if ((flags & MSG_PEEK) == 0) - (void) sbdroprecord(>so_rcv); + (void) sbdroprecord(so, >so_rcv); } if ((flags & MSG_PEEK) == 0) { if (m == NULL) { @@ -1452,7 +1452,7 @@ somove(struct socket *so, int wait) while (m && m->m_type == MT_CONTROL) m = m->m_next; if (m == NULL) { - sbdroprecord(>so_rcv); + sbdroprecord(so, >so_rcv); if (so->so_proto->pr_flags & PR_WANTRCVD && so->so_pcb) (so->so_proto->pr_usrreq)(so, PRU_RCVD, NULL, NULL, NULL, NULL); @@ -1492,7 +1492,7 @@ somove(struct socket *so, int wait) * that the whole first record can be processed. */ m = so->so_rcv.sb_mb; - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); so->so_rcv.sb_mb = m_free(m); sbsync(>so_rcv, nextrecord); } @@ -1502,7 +1502,7 @@ somove(struct socket *so, int wait) */ m = so->so_rcv.sb_mb; while (m && m->m_type == MT_CONTROL) { - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); so->so_rcv.sb_mb = m_free(m); m = so->so_rcv.sb_mb; sbsync(>so_rcv, nextrecord); @@ -1541,7 +1541,7 @@ somove(struct socket *so, int wait) so->so_rcv.sb_datacc -= size; } else { *mp = so->so_rcv.sb_mb; - sbfree(>so_rcv, *mp); + sbfree(so, >so_rcv, *mp); so->so_rcv.sb_mb = (*mp)->m_next; sbsync(>so_rcv, nextrecord); } @@ -1550,7 +1550,7 @@ somove(struct socket *so, int wait) SBLASTRECORDCHK(>so_rcv, "somove 3"); SBLASTMBUFCHK(>so_rcv, "somove 3"); - SBCHECK(>so_rcv); + SBCHECK(so, >so_rcv); if (m == NULL) goto release; m->m_nextpkt = NULL; Index: kern/uipc_socket2.c === RCS file: /cvs/src/sys/kern/uipc_socket2.c,v retrieving revision 1.112 diff -u -p -r1.112 uipc_socket2.c --- kern/uipc_socket2.c 25 Jul 2021 14:13:47 - 1.112 +++ kern/uipc_socket2.c 25 Jul 2021 14:14:28 - @@ -654,7 +654,7 @@ sbappend(struct socket *so, struct sockb */ sb->sb_lastrecord = m; } - sbcompress(sb, m, n); + sbcompress(so, sb, m, n); SBLASTRECORDCHK(sb, "sbappend 2"); } @@ -673,7 +673,7 @@ sbappendstream(struct socket *so, struct
Pass "socket *" to sballoc/sbfree & co
Diff below adds an extra argument, a pointer to the socket corresponding to the buffer given to: sballoc(), sbfree(), sbcompress(), sbcheck() and sbdroprecord(). This pointer will be used to assert for or grab a per-socket lock. There is no functional change in this diff. Its goal is to simplify the review (and possible revert) of the change introducing `so_mtx' [0]. Note that this diff includes the removal of sbinsertoob() sent previously. ok? [0] https://marc.info/?l=openbsd-tech=162685565421248=2 Index: kern/uipc_socket.c === RCS file: /cvs/src/sys/kern/uipc_socket.c,v retrieving revision 1.263 diff -u -p -r1.263 uipc_socket.c --- kern/uipc_socket.c 28 May 2021 16:24:53 - 1.263 +++ kern/uipc_socket.c 24 Jul 2021 09:32:10 - @@ -860,7 +860,7 @@ dontblock: *paddr = m_copym(m, 0, m->m_len, M_NOWAIT); m = m->m_next; } else { - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); if (paddr) { *paddr = m; so->so_rcv.sb_mb = m->m_next; @@ -884,7 +884,7 @@ dontblock: *controlp = m_copym(m, 0, m->m_len, M_NOWAIT); m = m->m_next; } else { - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); so->so_rcv.sb_mb = m->m_next; m->m_nextpkt = m->m_next = NULL; cm = m; @@ -984,7 +984,7 @@ dontblock: orig_resid = 0; } else { nextrecord = m->m_nextpkt; - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); if (mp) { *mp = m; mp = >m_next; @@ -1065,7 +1065,7 @@ dontblock: if (m && pr->pr_flags & PR_ATOMIC) { flags |= MSG_TRUNC; if ((flags & MSG_PEEK) == 0) - (void) sbdroprecord(>so_rcv); + (void) sbdroprecord(so, >so_rcv); } if ((flags & MSG_PEEK) == 0) { if (m == NULL) { @@ -1452,7 +1452,7 @@ somove(struct socket *so, int wait) while (m && m->m_type == MT_CONTROL) m = m->m_next; if (m == NULL) { - sbdroprecord(>so_rcv); + sbdroprecord(so, >so_rcv); if (so->so_proto->pr_flags & PR_WANTRCVD && so->so_pcb) (so->so_proto->pr_usrreq)(so, PRU_RCVD, NULL, NULL, NULL, NULL); @@ -1492,7 +1492,7 @@ somove(struct socket *so, int wait) * that the whole first record can be processed. */ m = so->so_rcv.sb_mb; - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); so->so_rcv.sb_mb = m_free(m); sbsync(>so_rcv, nextrecord); } @@ -1502,7 +1502,7 @@ somove(struct socket *so, int wait) */ m = so->so_rcv.sb_mb; while (m && m->m_type == MT_CONTROL) { - sbfree(>so_rcv, m); + sbfree(so, >so_rcv, m); so->so_rcv.sb_mb = m_free(m); m = so->so_rcv.sb_mb; sbsync(>so_rcv, nextrecord); @@ -1541,7 +1541,7 @@ somove(struct socket *so, int wait) so->so_rcv.sb_datacc -= size; } else { *mp = so->so_rcv.sb_mb; - sbfree(>so_rcv, *mp); + sbfree(so, >so_rcv, *mp); so->so_rcv.sb_mb = (*mp)->m_next; sbsync(>so_rcv, nextrecord); } @@ -1550,7 +1550,7 @@ somove(struct socket *so, int wait) SBLASTRECORDCHK(>so_rcv, "somove 3"); SBLASTMBUFCHK(>so_rcv, "somove 3"); - SBCHECK(>so_rcv); + SBCHECK(so, >so_rcv); if (m == NULL) goto release; m->m_nextpkt = NULL; Index: kern/uipc_socket2.c === RCS file: /cvs/src/sys/kern/uipc_socket2.c,v retrieving revision 1.111 diff -u -p -r1.111 uipc_socket2.c --- kern/uipc_socket2.c 7 Jun 2021 09:10:32 - 1.111 +++ kern/uipc_socket2.c 24 Jul 2021 09:34:21 - @@ -654,7 +654,7 @@ sbappend(struct socket *so, struct sockb */ sb->sb_lastrecord = m; } - sbcompress(sb, m, n); + sbcompress(so, sb, m, n); SBLASTRECORDCHK(sb, "sbappend 2"); } @@ -673,7 +673,7 @@ sbappendstream(struct socket *so, struct SBLASTMBUFCHK(sb, __func__); - sbcompress(sb, m, sb->sb_mbtail); + sbcompress(so, sb, m, sb->sb_mbtail);