From 36a5eaa81c4c1c9fc0ee7f9872e730c026590819 Mon Sep 17 00:00:00 2001 From: Nickolai Zeldovich Date: Thu, 12 Jul 2001 20:04:07 +0000 Subject: [PATCH] solaris-detect-kernel-dqrwlock-20010712 based on feedback from Frank Batschulat vfs_dqrwlock not present in all solaris versions --- configure.in | 1 + src/afs/SOLARIS/osi_inode.c | 8 ++++---- src/cf/solaris-dqrwlock.m4 | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 src/cf/solaris-dqrwlock.m4 diff --git a/configure.in b/configure.in index 92c4751..bf87234 100644 --- a/configure.in +++ b/configure.in @@ -124,6 +124,7 @@ case $system in *-solaris*) MKAFS_OSTYPE=SOLARIS AC_MSG_RESULT(sun4) + SOLARIS_UFSVFS_HAS_DQRWLOCK ;; *-hpux*) MKAFS_OSTYPE=HPUX diff --git a/src/afs/SOLARIS/osi_inode.c b/src/afs/SOLARIS/osi_inode.c index 6c24dd8..ec9dbfd 100644 --- a/src/afs/SOLARIS/osi_inode.c +++ b/src/afs/SOLARIS/osi_inode.c @@ -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 index 0000000..b5aa657 --- /dev/null +++ b/src/cf/solaris-dqrwlock.m4 @@ -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 ], +[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 +]) + -- 1.9.4