diff options
Diffstat (limited to 'sys/fs/smbfs')
-rw-r--r-- | sys/fs/smbfs/smbfs_io.c | 2 | ||||
-rw-r--r-- | sys/fs/smbfs/smbfs_node.c | 3 | ||||
-rw-r--r-- | sys/fs/smbfs/smbfs_vnops.c | 15 |
3 files changed, 3 insertions, 17 deletions
diff --git a/sys/fs/smbfs/smbfs_io.c b/sys/fs/smbfs/smbfs_io.c index ef18709..a516194 100644 --- a/sys/fs/smbfs/smbfs_io.c +++ b/sys/fs/smbfs/smbfs_io.c @@ -672,7 +672,7 @@ smbfs_vinvalbuf(struct vnode *vp, struct thread *td) struct smbnode *np = VTOSMB(vp); int error = 0; - if (vp->v_iflag & VI_XLOCK) + if (vp->v_iflag & VI_DOOMED) return 0; while (np->n_flag & NFLUSHINPROG) { diff --git a/sys/fs/smbfs/smbfs_node.c b/sys/fs/smbfs/smbfs_node.c index e3d2f3b..7ad977b 100644 --- a/sys/fs/smbfs/smbfs_node.c +++ b/sys/fs/smbfs/smbfs_node.c @@ -220,8 +220,8 @@ loop: */ if ((vp->v_type == VDIR && (np->n_dosattr & SMB_FA_DIR) == 0) || (vp->v_type == VREG && (np->n_dosattr & SMB_FA_DIR) != 0)) { - vput(vp); vgone(vp); + vput(vp); break; } *vpp = vp; @@ -377,7 +377,6 @@ smbfs_inactive(ap) np->n_flag &= ~NOPEN; smbfs_attr_cacheremove(vp); } - VOP_UNLOCK(vp, 0, td); if (np->n_flag & NGONE) vrecycle(vp, td); return (0); diff --git a/sys/fs/smbfs/smbfs_vnops.c b/sys/fs/smbfs/smbfs_vnops.c index 6125b89..9b27a52 100644 --- a/sys/fs/smbfs/smbfs_vnops.c +++ b/sys/fs/smbfs/smbfs_vnops.c @@ -220,10 +220,6 @@ smbfs_open(ap) return error; } -/* - * XXX: VOP_CLOSE() usually called without lock held which is suck. Here we - * do some heruistic to determine if vnode should be locked. - */ static int smbfs_close(ap) struct vop_close_args /* { @@ -238,22 +234,13 @@ smbfs_close(ap) struct thread *td = ap->a_td; struct smbnode *np = VTOSMB(vp); struct smb_cred scred; - int dolock; - VI_LOCK(vp); - dolock = (vp->v_iflag & VI_XLOCK) == 0; - if (dolock) - vn_lock(vp, LK_EXCLUSIVE | LK_RETRY | LK_INTERLOCK, td); - else - VI_UNLOCK(vp); if (vp->v_type == VDIR && (np->n_flag & NOPEN) != 0 && np->n_dirseq != NULL) { smb_makescred(&scred, td, ap->a_cred); smbfs_findclose(np->n_dirseq, &scred); np->n_dirseq = NULL; } - if (dolock) - VOP_UNLOCK(vp, 0, td); return 0; } @@ -1187,9 +1174,9 @@ smbfs_lookup(ap) return (0); } cache_purge(vp); - vput(vp); if (killit) vgone(vp); + vput(vp); if (lockparent && dvp != vp && islastcn) VOP_UNLOCK(dvp, 0, td); } |