diff options
author | rwatson <rwatson@FreeBSD.org> | 2008-03-02 18:56:13 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2008-03-02 18:56:13 +0000 |
commit | f0f08023032c77ced011d5d7fabf44b57fb62581 (patch) | |
tree | abced7be7c6eb96a24887b3270f7f14104461bdc /sys | |
parent | 767a2621f07a4ba9a59a9d383581ed5558f667db (diff) | |
download | FreeBSD-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.h | 4 | ||||
-rw-r--r-- | sys/fs/smbfs/smbfs_node.c | 8 | ||||
-rw-r--r-- | sys/fs/smbfs/smbfs_vfsops.c | 7 |
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 |