]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
SOLARIS: Check for map_addr() without 'vacalign'
authorAndrew Deason <adeason@sinenomine.net>
Wed, 7 Mar 2018 04:04:28 +0000 (22:04 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Sun, 3 Jun 2018 14:09:03 +0000 (10:09 -0400)
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 <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit 00e12efa29659c28f0fd7b6acbfb57d91a6ca477)

Change-Id: I141ad3c54b2aa3e32311785f4320eba04d840bb2
Reviewed-on: https://gerrit.openafs.org/13102
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
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 9aa4f17519ae2c18bba10c130f34bfff037281b3..e85beb939181a578c5bfe768ff9b067a67b697e8 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 2fdfc6b6d3cc208b1e1980d193454771d2cc5103..adf8c41fe1208b4e1ed7c42a328f3588d343e746 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
 ])