From 0d41c9a09206ad2b74a494f49469e289d3617087 Mon Sep 17 00:00:00 2001 From: Benjamin Kaduk Date: Wed, 25 Sep 2013 16:57:41 -0400 Subject: [PATCH] Fix build for FreeBSD 10.0 Move a rmlock.h inclusion up a bit so that the vm headers can get the rmlock assertion (and other) macros they need. The filedesc structure has been expanded on FreeBSD to support a stronger capabilities system; getting to the actual file descriptor requires another structure access. limits.h and stdarg.h need sys/ and machine/ prefixes for inclusion in the kernel on FreeBSD. Unlike on master, there are not spurious include search path directives to remove. Catch up to VM layer changes. This builds, but crashes at runtime due to some ABI incompatibilities that appear in the rx event layer; those will be fixed in a separate patch. Reviewed-on: http://gerrit.openafs.org/10339 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk Reviewed-by: Jeffrey Altman (cherry picked from commit e222b08c4049dae95475eda2d5c54bd43dd45e2e) Change-Id: Ia8f0f31b000292fd160b8752ad5839852e11f0e0 Reviewed-on: http://gerrit.openafs.org/10379 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Benjamin Kaduk Reviewed-by: Stephan Wiesand --- src/afs/FBSD/osi_vm.c | 2 +- src/afs/FBSD/osi_vnodeops.c | 10 +++++++--- src/afs/afs_pioctl.c | 6 ++++++ src/afs/afs_warn.c | 2 ++ src/afs/sysincludes.h | 2 +- src/rx/rx_kcommon.h | 6 +++++- 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/afs/FBSD/osi_vm.c b/src/afs/FBSD/osi_vm.c index 8f4c4b5be..65f53334b 100644 --- a/src/afs/FBSD/osi_vm.c +++ b/src/afs/FBSD/osi_vm.c @@ -29,7 +29,7 @@ #include "afs/afs_stats.h" /* statistics */ #include #include -#include +#include #if __FreeBSD_version >= 1000030 #include #endif diff --git a/src/afs/FBSD/osi_vnodeops.c b/src/afs/FBSD/osi_vnodeops.c index 32c56647b..ac16df034 100644 --- a/src/afs/FBSD/osi_vnodeops.c +++ b/src/afs/FBSD/osi_vnodeops.c @@ -54,12 +54,12 @@ #include #include #include -#include -#include -#include #if __FreeBSD_version >= 1000030 #include #endif +#include +#include +#include #include extern int afs_pbuf_freecnt; @@ -904,6 +904,9 @@ afs_vop_getpages(struct vop_getpages_args *ap) } if (i != ap->a_reqpage) { +#if __FreeBSD_version >= 1000042 + vm_page_readahead_finish(m); +#else /* * Whether or not to leave the page activated is up in * the air, but we should put the page on a page queue @@ -937,6 +940,7 @@ afs_vop_getpages(struct vop_getpages_args *ap) vm_page_free(m); ma_vm_page_unlock(m); } +#endif /* __FreeBSD_version 1000042 */ } } ma_vm_page_unlock_queues(); diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c index 63fe88f0b..9787950cd 100644 --- a/src/afs/afs_pioctl.c +++ b/src/afs/afs_pioctl.c @@ -815,9 +815,15 @@ afs_xioctl(afs_proc_t *p, struct ioctl_args *uap, register_t *retval) # else fdp = p->p_fd; #endif +#if defined(AFS_FBSD100_ENV) + if ((uap->fd >= fdp->fd_nfiles) + || ((fd = fdp->fd_ofiles[uap->fd].fde_file) == NULL)) + return EBADF; +#else if ((u_int) uap->fd >= fdp->fd_nfiles || (fd = fdp->fd_ofiles[uap->fd]) == NULL) return EBADF; +#endif if ((fd->f_flag & (FREAD | FWRITE)) == 0) return EBADF; /* first determine whether this is any sort of vnode */ diff --git a/src/afs/afs_warn.c b/src/afs/afs_warn.c index d8bdddc01..a04a98b7e 100644 --- a/src/afs/afs_warn.c +++ b/src/afs/afs_warn.c @@ -25,6 +25,8 @@ # include # if defined(AFS_SUN58_ENV) # include +# elif defined(AFS_FBSD_ENV) +# include # else # include # endif diff --git a/src/afs/sysincludes.h b/src/afs/sysincludes.h index 584022713..9d68b1eb9 100644 --- a/src/afs/sysincludes.h +++ b/src/afs/sysincludes.h @@ -288,7 +288,7 @@ typedef unsigned short etap_event_t; # include "h/protosw.h" # if defined(AFS_FBSD_ENV) -# include "limits.h" +# include "sys/limits.h" # endif # ifdef AFS_HPUX_ENV diff --git a/src/rx/rx_kcommon.h b/src/rx/rx_kcommon.h index 64d03cbb4..58bf69cdb 100644 --- a/src/rx/rx_kcommon.h +++ b/src/rx/rx_kcommon.h @@ -141,7 +141,11 @@ typedef unsigned short etap_event_t; #include "h/errno.h" #if !(defined(AFS_SUN5_ENV) && defined(KERNEL)) /* if sys/systm.h includes varargs.h some versions of solaris have conflicts */ -#include "stdarg.h" +# if defined(AFS_FBSD_ENV) +# include "machine/stdarg.h" +# else +# include "stdarg.h" +# endif #endif #ifdef KERNEL #include "afs/sysincludes.h" -- 2.39.5