FreeBSD: Update argument types for VOP_READDIR

A recent commit to FreeBSD changed the type of
vop_readdir_args.a_cookies to a uint64_t**.  There is no functional
impact to ZFS because ZFS only uses 32-bit cookies, which will be
zero-extended to 64-bits by the existing code.

b214fcceac

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Alan Somers <asomers@gmail.com>
Closes #12874
This commit is contained in:
Alan Somers 2021-12-17 10:50:12 -07:00 committed by Tony Hutter
parent 786abf5321
commit 4b2bac5fe9
1 changed files with 10 additions and 4 deletions

View File

@ -113,6 +113,12 @@ VFS_SMR_DECLARE;
#define VNCHECKREF(vp) #define VNCHECKREF(vp)
#endif #endif
#if __FreeBSD_version >= 1400045
typedef uint64_t cookie_t;
#else
typedef ulong_t cookie_t;
#endif
/* /*
* Programming rules. * Programming rules.
* *
@ -1679,7 +1685,7 @@ zfs_rmdir(znode_t *dzp, const char *name, znode_t *cwd, cred_t *cr, int flags)
/* ARGSUSED */ /* ARGSUSED */
static int static int
zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp, zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
int *ncookies, ulong_t **cookies) int *ncookies, cookie_t **cookies)
{ {
znode_t *zp = VTOZ(vp); znode_t *zp = VTOZ(vp);
iovec_t *iovp; iovec_t *iovp;
@ -1701,7 +1707,7 @@ zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
boolean_t check_sysattrs; boolean_t check_sysattrs;
uint8_t type; uint8_t type;
int ncooks; int ncooks;
ulong_t *cooks = NULL; cookie_t *cooks = NULL;
int flags = 0; int flags = 0;
ZFS_ENTER(zfsvfs); ZFS_ENTER(zfsvfs);
@ -1778,7 +1784,7 @@ zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
*/ */
ncooks = zfs_uio_resid(uio) / (sizeof (struct dirent) - ncooks = zfs_uio_resid(uio) / (sizeof (struct dirent) -
sizeof (((struct dirent *)NULL)->d_name) + 1); sizeof (((struct dirent *)NULL)->d_name) + 1);
cooks = malloc(ncooks * sizeof (ulong_t), M_TEMP, M_WAITOK); cooks = malloc(ncooks * sizeof (*cooks), M_TEMP, M_WAITOK);
*cookies = cooks; *cookies = cooks;
*ncookies = ncooks; *ncookies = ncooks;
} }
@ -4732,7 +4738,7 @@ struct vop_readdir_args {
struct ucred *a_cred; struct ucred *a_cred;
int *a_eofflag; int *a_eofflag;
int *a_ncookies; int *a_ncookies;
ulong_t **a_cookies; cookie_t **a_cookies;
}; };
#endif #endif