Date: Sat, 2 May 2020 22:56:23 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r360572 - in head/sys: kern sys Message-ID: <202005022256.042MuNa3047999@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: glebius Date: Sat May 2 22:56:22 2020 New Revision: 360572 URL: https://svnweb.freebsd.org/changeset/base/360572 Log: Get rid of the mbuf self-pointing pointer. Reviewed by: gallatin Differential Revision: https://reviews.freebsd.org/D24598 Modified: head/sys/kern/uipc_ktls.c head/sys/sys/mbuf.h Modified: head/sys/kern/uipc_ktls.c ============================================================================== --- head/sys/kern/uipc_ktls.c Sat May 2 22:49:14 2020 (r360571) +++ head/sys/kern/uipc_ktls.c Sat May 2 22:56:22 2020 (r360572) @@ -1436,7 +1436,7 @@ ktls_enqueue_to_free(struct mbuf_ext_pgs *pgs) bool running; /* Mark it for freeing. */ - pgs->mbuf = NULL; + pgs->flags |= EPG_FLAG_2FREE; wq = &ktls_wq[pgs->tls->wq_index]; mtx_lock(&wq->mtx); STAILQ_INSERT_TAIL(&wq->head, pgs, stailq); @@ -1463,7 +1463,6 @@ ktls_enqueue(struct mbuf *m, struct socket *so, int pa KASSERT(pgs->tls->mode == TCP_TLS_MODE_SW, ("!SW TLS mbuf")); pgs->enc_cnt = page_count; - pgs->mbuf = m; /* * Save a pointer to the socket. The caller is responsible @@ -1496,12 +1495,11 @@ ktls_encrypt(struct mbuf_ext_pgs *pgs) so = pgs->so; tls = pgs->tls; - top = pgs->mbuf; + top = __containerof(pgs, struct mbuf, m_ext_pgs); KASSERT(tls != NULL, ("tls = NULL, top = %p, pgs = %p\n", top, pgs)); KASSERT(so != NULL, ("so = NULL, top = %p, pgs = %p\n", top, pgs)); #ifdef INVARIANTS pgs->so = NULL; - pgs->mbuf = NULL; #endif total_pages = pgs->enc_cnt; npages = 0; @@ -1654,14 +1652,14 @@ ktls_work_thread(void *ctx) mtx_unlock(&wq->mtx); STAILQ_FOREACH_SAFE(p, &local_head, stailq, n) { - if (p->mbuf != NULL) { - ktls_encrypt(p); - counter_u64_add(ktls_cnt_on, -1); - } else { + if (p->flags & EPG_FLAG_2FREE) { tls = p->tls; ktls_free(tls); m = __containerof(p, struct mbuf, m_ext_pgs); uma_zfree(zone_mbuf, m); + } else { + ktls_encrypt(p); + counter_u64_add(ktls_cnt_on, -1); } } } Modified: head/sys/sys/mbuf.h ============================================================================== --- head/sys/sys/mbuf.h Sat May 2 22:49:14 2020 (r360571) +++ head/sys/sys/mbuf.h Sat May 2 22:56:22 2020 (r360572) @@ -365,13 +365,13 @@ struct mbuf { uint16_t last_pg_len; uint8_t flags; #define EPG_FLAG_ANON 0x1 /* Data can be encrypted in place. */ +#define EPG_FLAG_2FREE 0x2 /* Scheduled for free. */ uint8_t record_type; uint8_t spare[2]; int enc_cnt; struct ktls_session *tls; struct socket *so; uint64_t seqno; - struct mbuf *mbuf; STAILQ_ENTRY(mbuf_ext_pgs) stailq; } m_ext_pgs; };
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202005022256.042MuNa3047999>