From c201f8d7a96b1f3ab0cb24dc15edb22f84ef1838 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Tue, 6 Mar 2018 22:04:28 -0600 Subject: [PATCH] SOLARIS: Check for map_addr() without 'vacalign' Add a configure check to see if the map_addr() function contains the 'vacalign' argument or not. The argument was removed sometime around Solaris 11.4. Reviewed-on: https://gerrit.openafs.org/12947 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 00e12efa29659c28f0fd7b6acbfb57d91a6ca477) Change-Id: I141ad3c54b2aa3e32311785f4320eba04d840bb2 Reviewed-on: https://gerrit.openafs.org/13102 Reviewed-by: Michael Meffie Tested-by: BuildBot Reviewed-by: Benjamin Kaduk --- src/afs/SOLARIS/osi_vnodeops.c | 4 ++++ src/cf/solaris-mapaddr.m4 | 25 +++++++++++++++++++++++++ src/cf/solaris-ostype.m4 | 1 + 3 files changed, 30 insertions(+) create mode 100644 src/cf/solaris-mapaddr.m4 diff --git a/src/afs/SOLARIS/osi_vnodeops.c b/src/afs/SOLARIS/osi_vnodeops.c index 9aa4f1751..e85beb939 100644 --- a/src/afs/SOLARIS/osi_vnodeops.c +++ b/src/afs/SOLARIS/osi_vnodeops.c @@ -1013,7 +1013,11 @@ afs_map(struct vnode *vp, offset_t off, struct as *as, caddr_t *addr, size_t len AFS_GUNLOCK(); as_rangelock(as); if ((flags & MAP_FIXED) == 0) { +#ifdef MAPADDR_LACKS_VACALIGN + map_addr(addr, len, off, flags); +#else map_addr(addr, len, off, 1, flags); +#endif if (*addr == NULL) { as_rangeunlock(as); code = ENOMEM; diff --git a/src/cf/solaris-mapaddr.m4 b/src/cf/solaris-mapaddr.m4 new file mode 100644 index 000000000..8af92a2ed --- /dev/null +++ b/src/cf/solaris-mapaddr.m4 @@ -0,0 +1,25 @@ +dnl This checks if the map_addr() function lacks the 'vacalign' argument. It +dnl was removed some time around Solaris 11.4. +dnl +dnl Note that the map_addr() function has had arguments added in the past +dnl (before Solaris 10). This check then only makes sense for newer Solaris; +dnl don't rely on it for pre-10 Solaris releases. +dnl +AC_DEFUN([SOLARIS_MAPADDR_LACKS_VACALIGN], + [AC_CACHE_CHECK([for a map_addr without vacalign], + [ac_cv_solaris_mapaddr_lacks_vacalign], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#define _KERNEL + #include ]], + [[caddr_t *addrp; + size_t len; + offset_t off; + uint_t flags; + map_addr(addrp, len, off, flags);]])], + [ac_cv_solaris_mapaddr_lacks_vacalign=yes], + [ac_cv_solaris_mapaddr_lacks_vacalign=no])]) + + AS_IF([test "x$ac_cv_solaris_mapaddr_lacks_vacalign" = "xyes"], + [AC_DEFINE([MAPADDR_LACKS_VACALIGN], [1], + [define if the function map_addr lacks the vacalign argument])])]) diff --git a/src/cf/solaris-ostype.m4 b/src/cf/solaris-ostype.m4 index 2fdfc6b6d..adf8c41fe 100644 --- a/src/cf/solaris-ostype.m4 +++ b/src/cf/solaris-ostype.m4 @@ -6,4 +6,5 @@ SOLARIS_UFSVFS_HAS_DQRWLOCK SOLARIS_FS_HAS_FS_ROLLED SOLARIS_SOLOOKUP_TAKES_SOCKPARAMS SOLARIS_HAVE_VN_RENAMEPATH +SOLARIS_MAPADDR_LACKS_VACALIGN ]) -- 2.39.5