SOLARIS: Check for map_addr() without 'vacalign' 47/12947/2
authorAndrew Deason <adeason@sinenomine.net>
Wed, 7 Mar 2018 04:04:28 +0000 (22:04 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Sat, 10 Mar 2018 00:03:45 +0000 (19:03 -0500)
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.

Change-Id: Id11c10cf849511635bd9490c97d978b4bdaa5e06
Reviewed-on: https://gerrit.openafs.org/12947
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

src/afs/SOLARIS/osi_vnodeops.c
src/cf/solaris-mapaddr.m4 [new file with mode: 0644]
src/cf/solaris-ostype.m4

index 9aa4f17..e85beb9 100644 (file)
@@ -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 (file)
index 0000000..8af92a2
--- /dev/null
@@ -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 <sys/vmsystm.h>]],
+       [[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])])])
index 2fdfc6b..adf8c41 100644 (file)
@@ -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
 ])