From nobody Sat Feb 01 09:02:03 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4YlRbH5450z5mb8G; Sat, 01 Feb 2025 09:02:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YlRbH3Jbvz40wZ; Sat, 01 Feb 2025 09:02:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738400523; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VlPqzPmlRzQB6yjCN4bjnHEn7DWhtrs+vTOGCTtKch4=; b=W78GihJSvJrO6RWMqXlxfa6By1J2JK7KAJ5rC/wzZ9qjVfc0gzQMOpkhNulzkmuPWoDTIC b6WUXakxSRd2M3b70RvdrV6xTyXIALulCzi3p/tFJEtH5y3a+h3uCfA4og8Ywz82zAlI1B s9epjBZ1bmPCTeMqPBxxepkWQusr2JyGdk32YzDBDYLPKxgbxpwY93g+Hhsn/rdVVSDIqR vYv6txO2ZSYsFrpvL6xyHjgBF8a5D+3e8R+14bmG4T+VL4eprzEfTzUlUlzqJRXuI65Wow NG/6r6M8SlZRj7TpTWF4U3F5FwZDhN7xerTt+W5ZUYeacL6EFqB6ItOB6GzbGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738400523; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VlPqzPmlRzQB6yjCN4bjnHEn7DWhtrs+vTOGCTtKch4=; b=PzwfzBU9/EfBXs/VMCamhceyxakYRo7lKLz24sGXecc62yDghRZcyYGomcWiCdn51a19hX S5wtX2WMxK2XA2ERFocB/OK1sF+Djt8DOzY+JP8PHn5Aj1cEKDfVVPgmisKx/0X4S7bx4U dwEAmFNpqjH8xFjPTygJXIf3ZmNrPUMaJL7rT0rMwLmp08DHB6pWOV/WlfAI5gLer6Ybuj UjI46AungXAwwGsELwoPttduW9XRXofQfk+arWvgjBJZK86paRpHlwz7e6oTECG/lLtYr0 d5d4jQVlS4Echnm3EdQ+dCjHJJt+UU2Cc8V8HzvwxUI0TJrhrizr+V7hL8ocqg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1738400523; a=rsa-sha256; cv=none; b=BlK5lEFu2Q+w5KGtjy5UnVWxk3QKtx0qq+xyj+q6k4DUBwTQX76H+mEMferQOJvJijCnWD NMVY0sIKgofJ5oy5ZqdOMAADVlD5NAhZYgajsP6xfOlq/HGlWUHINtk5AEaPd7OrYicdK3 SrmxCoV4+tbuwQdQbBPUjzph8RIrexRfQXLlj85g5CXU5IPvDouprD2NDDvVqnGzXKXtKb vTYXgzblww/A4uGidL6L5L+Tju1Ccszfu5PIniUIRbnmpe8nsqvE70Uszd6EKDiGW4F1ls qelO/1mXOmnWeybd7ZTVP20PYTCRxoniNEuV1VZAJIJ0YJ64NRYljKiiGnxaKQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4YlRbH2wDzzxN7; Sat, 01 Feb 2025 09:02:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 511923uf047758; Sat, 1 Feb 2025 09:02:03 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 511923gW047755; Sat, 1 Feb 2025 09:02:03 GMT (envelope-from git) Date: Sat, 1 Feb 2025 09:02:03 GMT Message-Id: <202502010902.511923gW047755@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 5418b1ebdfa0 - main - xdr: provide x_putmbuf method for xdrmem List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5418b1ebdfa0c6118894ce0e91115c3c13f3850d Auto-Submitted: auto-generated The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=5418b1ebdfa0c6118894ce0e91115c3c13f3850d commit 5418b1ebdfa0c6118894ce0e91115c3c13f3850d Author: Gleb Smirnoff AuthorDate: 2025-02-01 01:01:53 +0000 Commit: Gleb Smirnoff CommitDate: 2025-02-01 09:00:25 +0000 xdr: provide x_putmbuf method for xdrmem It has slightly different semantic than same method for xdrmbuf. The mbuf data is copied and caller is responsible to keep or free the original mbuf. Reviewed by: rmacklem, markj Differential Revision: https://reviews.freebsd.org/D48548 --- sys/xdr/xdr_mem.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/sys/xdr/xdr_mem.c b/sys/xdr/xdr_mem.c index 65a74836b7b3..fbab893a995d 100644 --- a/sys/xdr/xdr_mem.c +++ b/sys/xdr/xdr_mem.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -55,6 +56,7 @@ static bool_t xdrmem_getlong_unaligned(XDR *, long *); static bool_t xdrmem_putlong_unaligned(XDR *, const long *); static bool_t xdrmem_getbytes(XDR *, char *, u_int); static bool_t xdrmem_putbytes(XDR *, const char *, u_int); +static bool_t xdrmem_putmbuf(XDR *, struct mbuf *); /* XXX: w/64-bit pointers, u_int not enough! */ static u_int xdrmem_getpos(XDR *); static bool_t xdrmem_setpos(XDR *, u_int); @@ -67,6 +69,7 @@ static const struct xdr_ops xdrmem_ops_aligned = { .x_putlong = xdrmem_putlong_aligned, .x_getbytes = xdrmem_getbytes, .x_putbytes = xdrmem_putbytes, + .x_putmbuf = xdrmem_putmbuf, .x_getpostn = xdrmem_getpos, .x_setpostn = xdrmem_setpos, .x_inline = xdrmem_inline_aligned, @@ -79,6 +82,7 @@ static const struct xdr_ops xdrmem_ops_unaligned = { .x_putlong = xdrmem_putlong_unaligned, .x_getbytes = xdrmem_getbytes, .x_putbytes = xdrmem_putbytes, + .x_putmbuf = xdrmem_putmbuf, .x_getpostn = xdrmem_getpos, .x_setpostn = xdrmem_setpos, .x_inline = xdrmem_inline_unaligned, @@ -184,6 +188,27 @@ xdrmem_putbytes(XDR *xdrs, const char *addr, u_int len) return (TRUE); } +/* + * Append mbuf. May fail if not enough space. Caller owns the mbuf. + */ +static bool_t +xdrmem_putmbuf(XDR *xdrs, struct mbuf *m) +{ + u_int len; + + if (__predict_false(m == NULL)) + return (TRUE); + + len = m_length(m, NULL); + + if (__predict_false(xdrs->x_handy < len)) + return (FALSE); + xdrs->x_handy -= len; + m_copydata(m, 0, len, xdrs->x_private); + xdrs->x_private = (char *)xdrs->x_private + len; + return (TRUE); +} + static u_int xdrmem_getpos(XDR *xdrs) {