FreeBSD: Use the new freeuio() helper to free dynamically allocated UIOs (#16300)

This freeuio() interface was introduced to FreeBSD recently.  For now
it simply calls free(), so this change has no effect.  However, this
may not always be true, and in CheriBSD this change is required.

Signed-off-by: Mark Johnston <markj@FreeBSD.org>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Reviewed-by: Brooks Davis <brooks.davis@sri.com>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
This commit is contained in:
Mark Johnston 2024-07-11 18:52:51 -05:00 committed by GitHub
parent 156a64161b
commit a10faf5ce6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -45,6 +45,16 @@
#include <sys/vnode.h> #include <sys/vnode.h>
#include <sys/zfs_znode.h> #include <sys/zfs_znode.h>
static void
zfs_freeuio(struct uio *uio)
{
#if __FreeBSD_version > 1500013
freeuio(uio);
#else
free(uio, M_IOV);
#endif
}
int int
zfs_uiomove(void *cp, size_t n, zfs_uio_rw_t dir, zfs_uio_t *uio) zfs_uiomove(void *cp, size_t n, zfs_uio_rw_t dir, zfs_uio_t *uio)
{ {
@ -77,7 +87,7 @@ zfs_uiocopy(void *p, size_t n, zfs_uio_rw_t rw, zfs_uio_t *uio, size_t *cbytes)
error = vn_io_fault_uiomove(p, n, uio_clone); error = vn_io_fault_uiomove(p, n, uio_clone);
*cbytes = zfs_uio_resid(uio) - uio_clone->uio_resid; *cbytes = zfs_uio_resid(uio) - uio_clone->uio_resid;
if (uio_clone != &small_uio_clone) if (uio_clone != &small_uio_clone)
free(uio_clone, M_IOV); zfs_freeuio(uio_clone);
return (error); return (error);
} }