solaris-detect-kernel-dqrwlock-20010712
authorNickolai Zeldovich <kolya@mit.edu>
Thu, 12 Jul 2001 20:04:07 +0000 (20:04 +0000)
committerDerrick Brashear <shadow@dementia.org>
Thu, 12 Jul 2001 20:04:07 +0000 (20:04 +0000)
based on feedback from Frank Batschulat <Frank.Batschulat@Sun.COM>

vfs_dqrwlock not present in all solaris versions

configure.in
src/afs/SOLARIS/osi_inode.c
src/cf/solaris-dqrwlock.m4 [new file with mode: 0644]

index 92c4751..bf87234 100644 (file)
@@ -124,6 +124,7 @@ case $system in
         *-solaris*)
                MKAFS_OSTYPE=SOLARIS
                 AC_MSG_RESULT(sun4)
+               SOLARIS_UFSVFS_HAS_DQRWLOCK
                 ;;
         *-hpux*)
                MKAFS_OSTYPE=HPUX
index 6c24dd8..ec9dbfd 100644 (file)
@@ -65,11 +65,11 @@ getinode(vfsp, dev, inode, ipp, credp,perror)
     }
     ufsvfsp = (struct ufsvfs *)vfsp->vfs_data;
 
-#if defined(AFS_SUN57_ENV)
+#ifdef HAVE_VFS_DQRWLOCK
     rw_enter(&ufsvfsp->vfs_dqrwlock, RW_READER);
 #endif
     code = (*ufs_igetp)(vfsp, inode, &ip, credp);
-#if defined(AFS_SUN57_ENV)
+#ifdef HAVE_VFS_DQRWLOCK
     rw_exit(&ufsvfsp->vfs_dqrwlock);
 #endif
 
@@ -173,14 +173,14 @@ afs_syscall_icreate(dev, near_inode, param1, param2, param3, param4, rvp, credp)
 
     ufsvfsp = ip->i_ufsvfs;
     rw_enter(&ip->i_rwlock, RW_WRITER);
-#if defined(AFS_SUN57_ENV)
+#ifdef HAVE_VFS_DQRWLOCK
     rw_enter(&ufsvfsp->vfs_dqrwlock, RW_READER);
 #endif
     rw_enter(&ip->i_contents, RW_WRITER);
     code = (*ufs_iallocp)(ip, near_inode, 0, &newip, credp);
     AFS_ITIMES_NOLOCK(ip);
     rw_exit(&ip->i_contents);
-#if defined(AFS_SUN57_ENV)
+#ifdef HAVE_VFS_DQRWLOCK
     rw_exit(&ufsvfsp->vfs_dqrwlock);
 #endif
     rw_exit(&ip->i_rwlock);
diff --git a/src/cf/solaris-dqrwlock.m4 b/src/cf/solaris-dqrwlock.m4
new file mode 100644 (file)
index 0000000..b5aa657
--- /dev/null
@@ -0,0 +1,17 @@
+AC_DEFUN(SOLARIS_UFSVFS_HAS_DQRWLOCK, [
+AC_MSG_CHECKING(for vfs_dqrwlock in struct ufsvfs)
+AC_CACHE_VAL(ac_cv_solaris_ufsvfs_has_dqrwlock,
+[
+AC_TRY_COMPILE(
+[#define _KERNEL
+#include <sys/fs/ufs_inode.h>],
+[struct ufsvfs _ufsvfs;
+(void) _ufsvfs.vfs_dqrwlock;], 
+ac_cv_solaris_ufsvfs_has_dqrwlock=yes,
+ac_cv_solaris_ufsvfs_has_dqrwlock=no)])
+AC_MSG_RESULT($ac_cv_solaris_ufsvfs_has_dqrwlock)
+if test "$ac_cv_solaris_ufsvfs_has_dqrwlock" = "yes"; then
+  AC_DEFINE(HAVE_VFS_DQRWLOCK, 1, [define if struct ufsvfs has vfs_dqrwlock])
+fi
+])
+