summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2008-03-02 18:56:13 +0000
committerrwatson <rwatson@FreeBSD.org>2008-03-02 18:56:13 +0000
commitf0f08023032c77ced011d5d7fabf44b57fb62581 (patch)
treeabced7be7c6eb96a24887b3270f7f14104461bdc /sys
parent767a2621f07a4ba9a59a9d383581ed5558f667db (diff)
downloadFreeBSD-src-f0f08023032c77ced011d5d7fabf44b57fb62581.zip
FreeBSD-src-f0f08023032c77ced011d5d7fabf44b57fb62581.tar.gz
Replace lockmgr lock protecting smbfs node hash table with sx lock.
MFC after: 1 month
Diffstat (limited to 'sys')
-rw-r--r--sys/fs/smbfs/smbfs.h4
-rw-r--r--sys/fs/smbfs/smbfs_node.c8
-rw-r--r--sys/fs/smbfs/smbfs_vfsops.c7
3 files changed, 10 insertions, 9 deletions
diff --git a/sys/fs/smbfs/smbfs.h b/sys/fs/smbfs/smbfs.h
index 59693e3..bdecd99 100644
--- a/sys/fs/smbfs/smbfs.h
+++ b/sys/fs/smbfs/smbfs.h
@@ -65,6 +65,8 @@ struct smbfs_args {
#ifdef _KERNEL
+#include <sys/_sx.h>
+
#ifdef MALLOC_DECLARE
MALLOC_DECLARE(M_SMBFSMNT);
#endif
@@ -90,7 +92,7 @@ struct smbmount {
/* struct simplelock sm_npslock;*/
struct smbnode * sm_npstack[SMBFS_MAXPATHCOMP];
int sm_caseopt;
- struct lock sm_hashlock;
+ struct sx sm_hashlock;
LIST_HEAD(smbnode_hashhead, smbnode) *sm_hash;
u_long sm_hashlen;
int sm_didrele;
diff --git a/sys/fs/smbfs/smbfs_node.c b/sys/fs/smbfs/smbfs_node.c
index 9761a8f..d4a93fe 100644
--- a/sys/fs/smbfs/smbfs_node.c
+++ b/sys/fs/smbfs/smbfs_node.c
@@ -40,6 +40,7 @@
#include <sys/proc.h>
#include <sys/queue.h>
#include <sys/stat.h>
+#include <sys/sx.h>
#include <sys/sysctl.h>
#include <sys/time.h>
#include <sys/vnode.h>
@@ -58,11 +59,8 @@
#include <fs/smbfs/smbfs_subr.h>
#define SMBFS_NOHASH(smp, hval) (&(smp)->sm_hash[(hval) & (smp)->sm_hashlen])
-#define smbfs_hash_lock(smp, td) \
- lockmgr(&smp->sm_hashlock, LK_EXCLUSIVE, NULL)
-#define smbfs_hash_unlock(smp, td) \
- lockmgr(&smp->sm_hashlock, LK_RELEASE, NULL)
-
+#define smbfs_hash_lock(smp, td) sx_xlock(&smp->sm_hashlock)
+#define smbfs_hash_unlock(smp, td) sx_xunlock(&smp->sm_hashlock)
extern struct vop_vector smbfs_vnodeops; /* XXX -> .h file */
diff --git a/sys/fs/smbfs/smbfs_vfsops.c b/sys/fs/smbfs/smbfs_vfsops.c
index 2dc9e6d..a811e00 100644
--- a/sys/fs/smbfs/smbfs_vfsops.c
+++ b/sys/fs/smbfs/smbfs_vfsops.c
@@ -44,6 +44,7 @@
#include <sys/stat.h>
#include <sys/malloc.h>
#include <sys/module.h>
+#include <sys/sx.h>
#include <netsmb/smb.h>
@@ -192,7 +193,7 @@ smbfs_mount(struct mount *mp, struct thread *td)
smp->sm_hash = hashinit(desiredvnodes, M_SMBFSHASH, &smp->sm_hashlen);
if (smp->sm_hash == NULL)
goto bad;
- lockinit(&smp->sm_hashlock, PVFS, "smbfsh", 0, 0);
+ sx_init(&smp->sm_hashlock, "smbfsh");
smp->sm_share = ssp;
smp->sm_root = NULL;
if (1 != vfs_scanopt(mp->mnt_optnew,
@@ -264,7 +265,7 @@ bad:
if (smp) {
if (smp->sm_hash)
free(smp->sm_hash, M_SMBFSHASH);
- lockdestroy(&smp->sm_hashlock);
+ sx_destroy(&smp->sm_hashlock);
#ifdef SMBFS_USEZONE
zfree(smbfsmount_zone, smp);
#else
@@ -312,7 +313,7 @@ smbfs_unmount(struct mount *mp, int mntflags, struct thread *td)
if (smp->sm_hash)
free(smp->sm_hash, M_SMBFSHASH);
- lockdestroy(&smp->sm_hashlock);
+ sx_destroy(&smp->sm_hashlock);
#ifdef SMBFS_USEZONE
zfree(smbfsmount_zone, smp);
#else
OpenPOWER on IntegriCloud