CVS commit: src/sys/fs/smbfs

2017-05-28 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Sun May 28 16:36:37 UTC 2017

Modified Files:
src/sys/fs/smbfs: smbfs_node.c smbfs_node.h smbfs_vnops.c

Log Message:
When a vnode has an invalid type because the type changed on the
server replace vgone() with new operation smbfs_uncache() that
removes the vnode from the name cache and changes the vcache key
to an unique and illegal key to prevent further lookups.


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/fs/smbfs/smbfs_node.c
cvs rdiff -u -r1.15 -r1.16 src/sys/fs/smbfs/smbfs_node.h
cvs rdiff -u -r1.94 -r1.95 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.57 src/sys/fs/smbfs/smbfs_node.c:1.58
--- src/sys/fs/smbfs/smbfs_node.c:1.57	Fri May 26 14:34:20 2017
+++ src/sys/fs/smbfs/smbfs_node.c	Sun May 28 16:36:37 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.57 2017/05/26 14:34:20 riastradh Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.58 2017/05/28 16:36:37 hannken Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,10 +35,11 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.57 2017/05/26 14:34:20 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.58 2017/05/28 16:36:37 hannken Exp $");
 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -191,7 +192,8 @@ retry:
 		if ((vp->v_type == VDIR && (np->n_dosattr & SMB_FA_DIR) == 0) ||
 		(vp->v_type == VREG && (np->n_dosattr & SMB_FA_DIR) != 0)) {
 			mutex_exit(&np->n_lock);
-			vgone(vp);
+			vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+			smbfs_uncache(vp);
 			goto retry;
  		}
 	}
@@ -207,6 +209,54 @@ out:
 }
 
 /*
+ * Remove vnode that changed its type on the server from
+ * the vnode cache and the name cache.
+ */
+void
+smbfs_uncache(struct vnode *vp)
+{
+	static uint32_t gen = 0;
+	int error __diagused;
+	char newname[10];
+	struct mount *mp = vp->v_mount;
+	struct smbnode *np = VTOSMB(vp);
+	struct smbkey *key = np->n_key, *oldkey, *newkey;
+	int key_len = SMBFS_KEYSIZE(key->k_nmlen), newkey_len;
+
+	/* Setup old key as current key. */
+	oldkey = kmem_alloc(key_len, KM_SLEEP);
+	memcpy(oldkey, key, key_len);
+
+	/* Setup new key as unique and illegal name with colon. */
+	snprintf(newname, sizeof(newname), ":%08x", atomic_inc_uint_nv(&gen));
+	newkey = kmem_alloc(SMBFS_KEYSIZE(strlen(newname)), KM_SLEEP);
+	newkey->k_parent = NULL;
+	newkey->k_nmlen = strlen(newname);
+	memcpy(newkey->k_name, newname, newkey->k_nmlen);
+	newkey_len = SMBFS_KEYSIZE(newkey->k_nmlen);
+
+	/* Release parent and mark as gone. */
+	if (np->n_parent && (np->n_flag & NREFPARENT)) {
+		vrele(np->n_parent);
+		np->n_flag &= ~NREFPARENT;
+	}
+	np->n_flag |= NGONE;
+
+	/* Rekey the node. */
+	error = vcache_rekey_enter(mp, vp, oldkey, key_len, newkey, newkey_len);
+	KASSERT(error == 0);
+	np->n_key = newkey;
+	vcache_rekey_exit(mp, vp, oldkey, key_len, newkey, newkey_len);
+
+	/* Purge from name cache and cleanup. */
+	cache_purge(vp);
+	kmem_free(key, key_len);
+	kmem_free(oldkey, key_len);
+
+	vput(vp);
+}
+
+/*
  * Free smbnode, and give vnode back to system
  */
 int

Index: src/sys/fs/smbfs/smbfs_node.h
diff -u src/sys/fs/smbfs/smbfs_node.h:1.15 src/sys/fs/smbfs/smbfs_node.h:1.16
--- src/sys/fs/smbfs/smbfs_node.h:1.15	Fri Jan  2 09:48:01 2015
+++ src/sys/fs/smbfs/smbfs_node.h	Sun May 28 16:36:37 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.h,v 1.15 2015/01/02 09:48:01 martin Exp $	*/
+/*	$NetBSD: smbfs_node.h,v 1.16 2017/05/28 16:36:37 hannken Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -97,6 +97,7 @@ int smbfs_loadvnode(struct mount *, stru
 const void *, size_t, const void **);
 int smbfs_nget(struct mount *, struct vnode *, const char *, int,
 struct smbfattr *, struct vnode **);
+void smbfs_uncache(struct vnode *);
 
 int  smbfs_readvnode(struct vnode *, struct uio *, kauth_cred_t);
 int  smbfs_writevnode(struct vnode *, struct uio *, kauth_cred_t, int);

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.94 src/sys/fs/smbfs/smbfs_vnops.c:1.95
--- src/sys/fs/smbfs/smbfs_vnops.c:1.94	Wed Apr 26 03:02:48 2017
+++ src/sys/fs/smbfs/smbfs_vnops.c	Sun May 28 16:36:37 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.94 2017/04/26 03:02:48 riastradh Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.95 2017/05/28 16:36:37 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.94 2017/04/26 03:02:48 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.95 2017/05/28 16:36:37 hannken Exp $");
 
 #include 
 #include 
@@ -1269,8 +1269,7 @@ smbfs_lookup(void *v)
 		cache_purge(newvp);
 		if (newvp != dvp) {
 			if (killit) {
-VOP_UNLOCK(newvp);
-vgone(newvp);
+smbfs_uncache(newvp);
 

CVS commit: src/sys/fs/smbfs

2015-01-02 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Fri Jan  2 09:48:01 UTC 2015

Modified Files:
src/sys/fs/smbfs: smbfs_node.h

Log Message:
Replace old style open array with C99 variant - cosmetic only, but should
help coverity.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/fs/smbfs/smbfs_node.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.h
diff -u src/sys/fs/smbfs/smbfs_node.h:1.14 src/sys/fs/smbfs/smbfs_node.h:1.15
--- src/sys/fs/smbfs/smbfs_node.h:1.14	Sun Dec 21 10:48:53 2014
+++ src/sys/fs/smbfs/smbfs_node.h	Fri Jan  2 09:48:01 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.h,v 1.14 2014/12/21 10:48:53 hannken Exp $	*/
+/*	$NetBSD: smbfs_node.h,v 1.15 2015/01/02 09:48:01 martin Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -58,7 +58,7 @@ struct smbfs_fctx;
 struct smbkey {
 	struct vnode *		k_parent;	/* Parent vnode. */
 	u_char			k_nmlen;	/* Name length. */
-	u_char			k_name[0];	/* Name (variable length). */
+	u_char			k_name[];	/* Name (variable length). */
 } __packed;
 
 struct smbnode {



CVS commit: src/sys/fs/smbfs

2014-12-21 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Sun Dec 21 10:48:53 UTC 2014

Modified Files:
src/sys/fs/smbfs: smbfs.h smbfs_node.c smbfs_node.h smbfs_smb.c
smbfs_vfsops.c smbfs_vnops.c

Log Message:
Change smbfs from hashlist to vcache.
- Use (parent_vnode, name, name_len) as key.
- Change smbfs_nget() to return a referenced but unlocked vnode and
  adapt smbfs_setroot(), smbfs_create(), smbfs_mkdir() and smbfs_lookup().


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/fs/smbfs/smbfs.h
cvs rdiff -u -r1.52 -r1.53 src/sys/fs/smbfs/smbfs_node.c
cvs rdiff -u -r1.13 -r1.14 src/sys/fs/smbfs/smbfs_node.h
cvs rdiff -u -r1.46 -r1.47 src/sys/fs/smbfs/smbfs_smb.c
cvs rdiff -u -r1.103 -r1.104 src/sys/fs/smbfs/smbfs_vfsops.c
cvs rdiff -u -r1.92 -r1.93 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs.h
diff -u src/sys/fs/smbfs/smbfs.h:1.17 src/sys/fs/smbfs/smbfs.h:1.18
--- src/sys/fs/smbfs/smbfs.h:1.17	Sun Sep  7 13:13:04 2008
+++ src/sys/fs/smbfs/smbfs.h	Sun Dec 21 10:48:53 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs.h,v 1.17 2008/09/07 13:13:04 tron Exp $	*/
+/*	$NetBSD: smbfs.h,v 1.18 2014/12/21 10:48:53 hannken Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -82,9 +82,6 @@ struct smbmount {
 	struct smb_share * 	sm_share;
 	struct smbnode *	sm_npstack[SMBFS_MAXPATHCOMP];
 	int			sm_caseopt;
-	kmutex_t		sm_hashlock;
-	LIST_HEAD(smbnode_hashhead, smbnode) *sm_hash;
-	u_long			sm_hashlen;
 	int			sm_didrele;
 };
 

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.52 src/sys/fs/smbfs/smbfs_node.c:1.53
--- src/sys/fs/smbfs/smbfs_node.c:1.52	Tue Nov 25 12:33:13 2014
+++ src/sys/fs/smbfs/smbfs_node.c	Sun Dec 21 10:48:53 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.52 2014/11/25 12:33:13 nakayama Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.53 2014/12/21 10:48:53 hannken Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.52 2014/11/25 12:33:13 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.53 2014/12/21 10:48:53 hannken Exp $");
 
 #include 
 #include 
@@ -62,10 +62,6 @@ __KERNEL_RCSID(0, "$NetBSD: smbfs_node.c
 #include 
 #include 
 
-#define	SMBFS_NOHASH(smp, hval)	(&(smp)->sm_hash[(hval) & (smp)->sm_hashlen])
-
-MALLOC_JUSTDEFINE(M_SMBNODENAME, "SMBFS nname", "SMBFS node name");
-
 extern int (**smbfs_vnodeop_p)(void *);
 extern int prtactive;
 
@@ -75,37 +71,58 @@ static const struct genfs_ops smbfs_genf
 
 struct pool smbfs_node_pool;
 
-static inline char *
-smbfs_name_alloc(const u_char *name, int nmlen)
+int
+smbfs_loadvnode(struct mount *mp, struct vnode *vp,
+const void *key, size_t key_len, const void **new_key)
 {
-	u_char *cp;
+	struct smbnode *np;
+	
+	np = pool_get(&smbfs_node_pool, PR_WAITOK);
+	memset(np, 0, sizeof(*np));
 
-	cp = malloc(nmlen, M_SMBNODENAME, M_WAITOK);
-	memcpy(cp, name, nmlen);
+	vp->v_tag = VT_SMBFS;
+	vp->v_op = smbfs_vnodeop_p;
+	vp->v_type = VNON;
+	vp->v_data = np;
+	genfs_node_init(vp, &smbfs_genfsops);
 
-	return cp;
-}
+	mutex_init(&np->n_lock, MUTEX_DEFAULT, IPL_NONE);
+	np->n_key = kmem_alloc(key_len, KM_SLEEP);
+	memcpy(np->n_key, key, key_len);
+	KASSERT(key_len == SMBFS_KEYSIZE(np->n_nmlen));
+	np->n_vnode = vp;
+	np->n_mount = VFSTOSMBFS(mp);
 
-static inline void
-smbfs_name_free(u_char *name)
-{
-	free(name, M_SMBNODENAME);
+	if (np->n_parent != NULL && (np->n_parent->v_vflag & VV_ROOT) == 0) {
+		vref(np->n_parent);
+		np->n_flag |= NREFPARENT;
+	}
+
+	*new_key = np->n_key;
+
+	return 0;
 }
 
-static int
-smbfs_node_alloc(struct mount *mp, struct vnode *dvp,
-	const char *name, int nmlen, struct smbfattr *fap, struct vnode **vpp)
+int
+smbfs_nget(struct mount *mp, struct vnode *dvp, const char *name, int nmlen,
+	struct smbfattr *fap, struct vnode **vpp)
 {
-	struct vattr vattr;
-	struct smbmount *smp = VFSTOSMBFS(mp);
-	struct smbnode_hashhead *nhpp;
-	struct smbnode *np, *np2;
+	struct smbkey *key;
+	struct smbmount *smp __diagused;
+	struct smbnode *np;
 	struct vnode *vp;
-	u_long hashval;
+	union {
+		struct smbkey u_key;
+		char u_data[64];
+	} small_key;
 	int error;
+	const int key_len = SMBFS_KEYSIZE(nmlen);
+
+	smp = VFSTOSMBFS(mp);
 
 	/* do not allow allocating root vnode twice */
 	KASSERT(dvp != NULL || smp->sm_root == NULL);
+
 	/* do not call with dot */
 	KASSERT(nmlen != 1 || name[0] != '.');
 
@@ -114,11 +131,8 @@ smbfs_node_alloc(struct mount *mp, struc
 			return EINVAL;
 		vp = VTOSMB(VTOSMB(dvp)->n_parent)->n_vnode;
 		vref(vp);
-		if ((error = vn_lock(vp, LK_EXCLUSIVE | LK_RETRY)) == 0)
-			*vpp = vp;
-		else
-			vrele(vp);
-		return (error);
+		*vpp = vp;
+		return 0;
 	}
 
 #ifdef DIAGNOSTIC
@@ -126,121 +140,71 @@ smbfs_node_alloc(struct mount *mp, struc
 	if (dnp == NULL && dvp != NULL)
 		panic("smbfs_node_all

CVS commit: src/sys/fs/smbfs

2014-11-25 Thread Takeshi Nakayama
Module Name:src
Committed By:   nakayama
Date:   Tue Nov 25 12:33:13 UTC 2014

Modified Files:
src/sys/fs/smbfs: smbfs_node.c

Log Message:
Avoid use after pool_put.


To generate a diff of this commit:
cvs rdiff -u -r1.51 -r1.52 src/sys/fs/smbfs/smbfs_node.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.51 src/sys/fs/smbfs/smbfs_node.c:1.52
--- src/sys/fs/smbfs/smbfs_node.c:1.51	Tue Jan 28 13:23:49 2014
+++ src/sys/fs/smbfs/smbfs_node.c	Tue Nov 25 12:33:13 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.51 2014/01/28 13:23:49 martin Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.52 2014/11/25 12:33:13 nakayama Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.51 2014/01/28 13:23:49 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.52 2014/11/25 12:33:13 nakayama Exp $");
 
 #include 
 #include 
@@ -197,10 +197,10 @@ allocnew:
 		|| memcmp(name, np2->n_name, nmlen) != 0)
 			continue;
 		mutex_exit(&smp->sm_hashlock);
-		pool_put(&smbfs_node_pool, np);
-		ungetnewvnode(vp);
 		if ((np->n_flag & NREFPARENT) != 0)
 			vrele(dvp);
+		ungetnewvnode(vp);
+		pool_put(&smbfs_node_pool, np);
 		goto retry;
 	}
 



CVS commit: src/sys/fs/smbfs

2014-11-07 Thread Takeshi Nakayama
Module Name:src
Committed By:   nakayama
Date:   Fri Nov  7 12:05:58 UTC 2014

Modified Files:
src/sys/fs/smbfs: smbfs_vnops.c

Log Message:
Fix vnode locking changes in rev.1.89:
- lock vnode by the end of cache_purge and vput.


To generate a diff of this commit:
cvs rdiff -u -r1.91 -r1.92 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.91 src/sys/fs/smbfs/smbfs_vnops.c:1.92
--- src/sys/fs/smbfs/smbfs_vnops.c:1.91	Fri Jul 25 08:20:52 2014
+++ src/sys/fs/smbfs/smbfs_vnops.c	Fri Nov  7 12:05:58 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.91 2014/07/25 08:20:52 dholland Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.92 2014/11/07 12:05:58 nakayama Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.91 2014/07/25 08:20:52 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.92 2014/11/07 12:05:58 nakayama Exp $");
 
 #include 
 #include 
@@ -1249,8 +1249,6 @@ smbfs_lookup(void *v)
 		if (newvp != dvp)
 			vn_lock(newvp, LK_SHARED | LK_RETRY);
 		error = VOP_GETATTR(newvp, &vattr, cnp->cn_cred);
-		if (newvp != dvp)
-			VOP_UNLOCK(newvp);
 		/*
 		 * If the file type on the server is inconsistent
 		 * with what it was when we created the vnode,
@@ -1267,6 +1265,8 @@ smbfs_lookup(void *v)
 		else if (error == 0
 			&& vattr.va_ctime.tv_sec == VTOSMB(newvp)->n_ctime)
 		{
+			if (newvp != dvp)
+VOP_UNLOCK(newvp);
 			/* nfsstats.lookupcache_hits++; */
 			return (0);
 		}



CVS commit: src/sys/fs/smbfs

2014-08-11 Thread Maxime Villard
Module Name:src
Committed By:   maxv
Date:   Tue Aug 12 06:57:20 UTC 2014

Modified Files:
src/sys/fs/smbfs: smbfs_smb.c

Log Message:
http://m00nbsd.net/ae123a9bae03f7dde5c6d654412daf5a.html#Report-2

#04-0x01: Uninitialized var 'rqp' (does not compile anyway)


To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 src/sys/fs/smbfs/smbfs_smb.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_smb.c
diff -u src/sys/fs/smbfs/smbfs_smb.c:1.44 src/sys/fs/smbfs/smbfs_smb.c:1.45
--- src/sys/fs/smbfs/smbfs_smb.c:1.44	Fri Nov 30 23:24:21 2012
+++ src/sys/fs/smbfs/smbfs_smb.c	Tue Aug 12 06:57:20 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_smb.c,v 1.44 2012/11/30 23:24:21 nakayama Exp $	*/
+/*	$NetBSD: smbfs_smb.c,v 1.45 2014/08/12 06:57:20 maxv Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_smb.c,v 1.44 2012/11/30 23:24:21 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_smb.c,v 1.45 2014/08/12 06:57:20 maxv Exp $");
 
 #include 
 #include 
@@ -778,7 +778,7 @@ smbfs_smb_move(struct smbnode *src, stru
 	struct mbchain *mbp;
 	int error;
 
-	error = smb_rq_alloc(rqp, SSTOCP(ssp), SMB_COM_MOVE, scred, &rqp);
+	error = smb_rq_alloc(SSTOCP(ssp), SMB_COM_MOVE, scred, &rqp);
 	if (error)
 		return error;
 	smb_rq_getrequest(rqp, &mbp);



CVS commit: src/sys/fs/smbfs

2014-07-14 Thread Maxime Villard
Module Name:src
Committed By:   maxv
Date:   Mon Jul 14 16:29:50 UTC 2014

Modified Files:
src/sys/fs/smbfs: smbfs_vfsops.c

Log Message:
smbfs depends on nsmb, so add the dependency as appropriate. Fixes
# modload smbfs
on modular kernels, PR kern/40011, and probably system crashes.


To generate a diff of this commit:
cvs rdiff -u -r1.102 -r1.103 src/sys/fs/smbfs/smbfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.102 src/sys/fs/smbfs/smbfs_vfsops.c:1.103
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.102	Sun May 25 19:33:28 2014
+++ src/sys/fs/smbfs/smbfs_vfsops.c	Mon Jul 14 16:29:50 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vfsops.c,v 1.102 2014/05/25 19:33:28 christos Exp $	*/
+/*	$NetBSD: smbfs_vfsops.c,v 1.103 2014/07/14 16:29:50 maxv Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.102 2014/05/25 19:33:28 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.103 2014/07/14 16:29:50 maxv Exp $");
 
 #include 
 #include 
@@ -62,7 +62,7 @@ __KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops
 #include 
 #include 
 
-MODULE(MODULE_CLASS_VFS, smbfs, NULL);
+MODULE(MODULE_CLASS_VFS, smbfs, "nsmb");
 
 VFS_PROTOS(smbfs);
 



CVS commit: src/sys/fs/smbfs

2014-05-25 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sun May 25 19:33:28 UTC 2014

Modified Files:
src/sys/fs/smbfs: smbfs_vfsops.c

Log Message:
use macro.


To generate a diff of this commit:
cvs rdiff -u -r1.101 -r1.102 src/sys/fs/smbfs/smbfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.101 src/sys/fs/smbfs/smbfs_vfsops.c:1.102
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.101	Sat May 24 12:34:03 2014
+++ src/sys/fs/smbfs/smbfs_vfsops.c	Sun May 25 15:33:28 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vfsops.c,v 1.101 2014/05/24 16:34:03 christos Exp $	*/
+/*	$NetBSD: smbfs_vfsops.c,v 1.102 2014/05/25 19:33:28 christos Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.101 2014/05/24 16:34:03 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.102 2014/05/25 19:33:28 christos Exp $");
 
 #include 
 #include 
@@ -410,8 +410,8 @@ smbfs_sync_selector(void *cl, struct vno
 		return false;
 
 	if ((vp->v_type == VNON || (np->n_flag & NMODIFIED) == 0) &&
-	LIST_EMPTY(&vp->v_dirtyblkhd) &&
-	 vp->v_uobj.uo_npages == 0)
+	 LIST_EMPTY(&vp->v_dirtyblkhd) &&
+	 UVM_OBJ_IS_CLEAN(&vp->v_uobj))
 		return false;
 
 	return true;



CVS commit: src/sys/fs/smbfs

2014-04-25 Thread Antti Kantee
Module Name:src
Committed By:   pooka
Date:   Fri Apr 25 15:18:06 UTC 2014

Modified Files:
src/sys/fs/smbfs: smbfs_vnops.c

Log Message:
Don't lock an already locked vnode.


To generate a diff of this commit:
cvs rdiff -u -r1.89 -r1.90 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.89 src/sys/fs/smbfs/smbfs_vnops.c:1.90
--- src/sys/fs/smbfs/smbfs_vnops.c:1.89	Fri Feb  7 15:29:21 2014
+++ src/sys/fs/smbfs/smbfs_vnops.c	Fri Apr 25 15:18:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.89 2014/02/07 15:29:21 hannken Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.90 2014/04/25 15:18:06 pooka Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.89 2014/02/07 15:29:21 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.90 2014/04/25 15:18:06 pooka Exp $");
 
 #include 
 #include 
@@ -1244,9 +1244,11 @@ smbfs_lookup(void *v)
 		}
 
 		newvp = *vpp;
-		vn_lock(newvp, LK_SHARED | LK_RETRY);
+		if (newvp != dvp)
+			vn_lock(newvp, LK_SHARED | LK_RETRY);
 		error = VOP_GETATTR(newvp, &vattr, cnp->cn_cred);
-		VOP_UNLOCK(newvp);
+		if (newvp != dvp)
+			VOP_UNLOCK(newvp);
 		/*
 		 * If the file type on the server is inconsistent
 		 * with what it was when we created the vnode,



CVS commit: src/sys/fs/smbfs

2014-03-17 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Mon Mar 17 09:37:09 UTC 2014

Modified Files:
src/sys/fs/smbfs: smbfs_vfsops.c

Log Message:
Change smbfs_sync() to use vfs_vnode_iterator.


To generate a diff of this commit:
cvs rdiff -u -r1.97 -r1.98 src/sys/fs/smbfs/smbfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.97 src/sys/fs/smbfs/smbfs_vfsops.c:1.98
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.97	Tue Feb 25 18:30:11 2014
+++ src/sys/fs/smbfs/smbfs_vfsops.c	Mon Mar 17 09:37:09 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vfsops.c,v 1.97 2014/02/25 18:30:11 pooka Exp $	*/
+/*	$NetBSD: smbfs_vfsops.c,v 1.98 2014/03/17 09:37:09 hannken Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.97 2014/02/25 18:30:11 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.98 2014/03/17 09:37:09 hannken Exp $");
 
 #include 
 #include 
@@ -406,45 +406,27 @@ smbfs_statvfs(struct mount *mp, struct s
 int
 smbfs_sync(struct mount *mp, int waitfor, kauth_cred_t cred)
 {
-	struct vnode *vp, *mvp;
+	struct vnode *vp;
+	struct vnode_iterator *marker;
 	struct smbnode *np;
 	int error, allerror = 0;
 
-	/* Allocate a marker vnode. */
-	mvp = vnalloc(mp);
-	/*
-	 * Force stale buffer cache information to be flushed.
-	 */
-	mutex_enter(&mntvnode_lock);
-loop:
-	for (vp = TAILQ_FIRST(&mp->mnt_vnodelist); vp; vp = vunmark(mvp)) {
-		vmark(mvp, vp);
-		/*
-		 * If the vnode that we are about to sync is no longer
-		 * associated with this mount point, start over.
-		 */
-		if (vp->v_mount != mp || vismarker(vp))
+	vfs_vnode_iterator_init(mp, &marker);
+	while (vfs_vnode_iterator_next(marker, &vp)) {
+		error = vn_lock(vp, LK_EXCLUSIVE);
+		if (error) {
+			vrele(vp);
 			continue;
-		mutex_enter(vp->v_interlock);
+		}
 		np = VTOSMB(vp);
 		if (np == NULL) {
-			mutex_exit(vp->v_interlock);
+			vput(vp);
 			continue;
 		}
 		if ((vp->v_type == VNON || (np->n_flag & NMODIFIED) == 0) &&
 		LIST_EMPTY(&vp->v_dirtyblkhd) &&
 		 vp->v_uobj.uo_npages == 0) {
-			mutex_exit(vp->v_interlock);
-			continue;
-		}
-		mutex_exit(&mntvnode_lock);
-		error = vget(vp, LK_EXCLUSIVE | LK_NOWAIT);
-		if (error) {
-			mutex_enter(&mntvnode_lock);
-			if (error == ENOENT) {
-(void)vunmark(mvp);
-goto loop;
-			}
+			vput(vp);
 			continue;
 		}
 		error = VOP_FSYNC(vp, cred,
@@ -452,10 +434,8 @@ loop:
 		if (error)
 			allerror = error;
 		vput(vp);
-		mutex_enter(&mntvnode_lock);
 	}
-	mutex_exit(&mntvnode_lock);
-	vnfree(mvp);
+	vfs_vnode_iterator_destroy(marker);
 	return (allerror);
 }
 



CVS commit: src/sys/fs/smbfs

2014-01-28 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Tue Jan 28 13:23:49 UTC 2014

Modified Files:
src/sys/fs/smbfs: smbfs_node.c

Log Message:
Bogus gcc 4.8 maybe use uninitialized warning


To generate a diff of this commit:
cvs rdiff -u -r1.50 -r1.51 src/sys/fs/smbfs/smbfs_node.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.50 src/sys/fs/smbfs/smbfs_node.c:1.51
--- src/sys/fs/smbfs/smbfs_node.c:1.50	Sun Oct 20 21:13:15 2013
+++ src/sys/fs/smbfs/smbfs_node.c	Tue Jan 28 13:23:49 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.50 2013/10/20 21:13:15 christos Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.51 2014/01/28 13:23:49 martin Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.50 2013/10/20 21:13:15 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.51 2014/01/28 13:23:49 martin Exp $");
 
 #include 
 #include 
@@ -231,7 +231,7 @@ int
 smbfs_nget(struct mount *mp, struct vnode *dvp, const char *name, int nmlen,
 	struct smbfattr *fap, struct vnode **vpp)
 {
-	struct vnode *vp;
+	struct vnode *vp = NULL;	/* XXX gcc 4.8: maybe-uninitialized */
 	int error;
 
 	error = smbfs_node_alloc(mp, dvp, name, nmlen, fap, &vp);



CVS commit: src/sys/fs/smbfs

2013-10-17 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Thu Oct 17 21:04:44 UTC 2013

Modified Files:
src/sys/fs/smbfs: smbfs_kq.c smbfs_vfsops.c

Log Message:
remove usused code


To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/sys/fs/smbfs/smbfs_kq.c
cvs rdiff -u -r1.95 -r1.96 src/sys/fs/smbfs/smbfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_kq.c
diff -u src/sys/fs/smbfs/smbfs_kq.c:1.25 src/sys/fs/smbfs/smbfs_kq.c:1.26
--- src/sys/fs/smbfs/smbfs_kq.c:1.25	Fri Jan 27 14:48:40 2012
+++ src/sys/fs/smbfs/smbfs_kq.c	Thu Oct 17 17:04:44 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_kq.c,v 1.25 2012/01/27 19:48:40 para Exp $	*/
+/*	$NetBSD: smbfs_kq.c,v 1.26 2013/10/17 21:04:44 christos Exp $	*/
 
 /*-
  * Copyright (c) 2003, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_kq.c,v 1.25 2012/01/27 19:48:40 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_kq.c,v 1.26 2013/10/17 21:04:44 christos Exp $");
 
 #include 
 #include 
@@ -387,7 +387,6 @@ filt_smbfsvnode(struct knote *kn, long h
 {
 	struct kevq *ke = (struct kevq *)kn->kn_hook;
 	struct vnode *vp = ke->vp;
-	int fflags;
 
 	switch (hint) {
 	case NOTE_REVOKE:
@@ -398,14 +397,12 @@ filt_smbfsvnode(struct knote *kn, long h
 		return (1);
 	case 0:
 		mutex_enter(vp->v_interlock);
-		fflags = kn->kn_fflags;
 		mutex_exit(vp->v_interlock);
 		break;
 	default:
 		KASSERT(mutex_owned(vp->v_interlock));
 		if ((kn->kn_sfflags & hint) != 0)
 			kn->kn_fflags |= hint;
-		fflags = kn->kn_fflags;
 		break;
 	}
 

Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.95 src/sys/fs/smbfs/smbfs_vfsops.c:1.96
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.95	Fri Oct  7 05:35:05 2011
+++ src/sys/fs/smbfs/smbfs_vfsops.c	Thu Oct 17 17:04:44 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vfsops.c,v 1.95 2011/10/07 09:35:05 hannken Exp $	*/
+/*	$NetBSD: smbfs_vfsops.c,v 1.96 2013/10/17 21:04:44 christos Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.95 2011/10/07 09:35:05 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.96 2013/10/17 21:04:44 christos Exp $");
 
 #include 
 #include 
@@ -160,14 +160,12 @@ smbfs_mount(struct mount *mp, const char
 	struct smb_vc *vcp;
 	struct smb_share *ssp = NULL;
 	struct smb_cred scred;
-	struct proc *p;
 	char *fromname;
 	int error;
 
 	if (*data_len < sizeof *args)
 		return EINVAL;
 
-	p = l->l_proc;
 	if (mp->mnt_flag & MNT_GETARGS) {
 		smp = VFSTOSMBFS(mp);
 		if (smp == NULL)



CVS commit: src/sys/fs/smbfs

2012-11-29 Thread Takeshi Nakayama
Module Name:src
Committed By:   nakayama
Date:   Thu Nov 29 11:58:49 UTC 2012

Modified Files:
src/sys/fs/smbfs: smbfs_node.c smbfs_vnops.c

Log Message:
- Remove redundant vput() before vgone().
- Avoid unnecessary mutex_exit() in smbfs_node_alloc().
- Set NGONE bit to from-name vnode to invalidate the smbnode cache.


To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/sys/fs/smbfs/smbfs_node.c
cvs rdiff -u -r1.83 -r1.84 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.48 src/sys/fs/smbfs/smbfs_node.c:1.49
--- src/sys/fs/smbfs/smbfs_node.c:1.48	Wed Nov 28 13:34:24 2012
+++ src/sys/fs/smbfs/smbfs_node.c	Thu Nov 29 11:58:49 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.48 2012/11/28 13:34:24 nakayama Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.49 2012/11/29 11:58:49 nakayama Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.48 2012/11/28 13:34:24 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.49 2012/11/29 11:58:49 nakayama Exp $");
 
 #include 
 #include 
@@ -150,15 +150,16 @@ retry:
 		 */
 		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);
+			VOP_UNLOCK(vp);
 			vgone(vp);
-			break;
+			goto allocnew;
 		}
 		*vpp = vp;
 		return (0);
 	}
 	mutex_exit(&smp->sm_hashlock);
 
+allocnew:
 	/*
 	 * If we don't have node attributes, then it is an explicit lookup
 	 * for an existing vnode.

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.83 src/sys/fs/smbfs/smbfs_vnops.c:1.84
--- src/sys/fs/smbfs/smbfs_vnops.c:1.83	Wed Nov 28 13:34:24 2012
+++ src/sys/fs/smbfs/smbfs_vnops.c	Thu Nov 29 11:58:49 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.83 2012/11/28 13:34:24 nakayama Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.84 2012/11/29 11:58:49 nakayama Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.83 2012/11/28 13:34:24 nakayama Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.84 2012/11/29 11:58:49 nakayama Exp $");
 
 #include 
 #include 
@@ -725,6 +725,7 @@ smbfs_rename(void *v)
 		}
 		error = smbfs_smb_rename(VTOSMB(fvp), VTOSMB(tdvp),
 		tcnp->cn_nameptr, tcnp->cn_namelen, &scred);
+		VTOSMB(fvp)->n_flag |= NGONE;
 		VN_KNOTE(fdvp, NOTE_WRITE);
 		VN_KNOTE(fvp, NOTE_RENAME);
 	}
@@ -1270,9 +1271,11 @@ smbfs_lookup(void *v)
 
 		cache_purge(newvp);
 		if (newvp != dvp) {
-			vput(newvp);
-			if (killit)
+			if (killit) {
+VOP_UNLOCK(newvp);
 vgone(newvp);
+			} else
+vput(newvp);
 		} else
 			vrele(newvp);
 		*vpp = NULLVP;



CVS commit: src/sys/fs/smbfs

2012-11-28 Thread Takeshi Nakayama
Module Name:src
Committed By:   nakayama
Date:   Wed Nov 28 13:34:24 UTC 2012

Modified Files:
src/sys/fs/smbfs: smbfs_node.c smbfs_node.h smbfs_vnops.c

Log Message:
Various fixes for smbfs:

- Implement NGONE to fix caching issue described in PR kern/25070.
  Mostly taken from FreeBSD r125637.

- Revert revision 1.70 of smbfs_vnops.c to fix setattr to opened
  direcotry.  In case of SMB_CAP_NT_SMBS, NOPEN is set after
  smbfs_smb_ntcreatex() call.  If NOPEN is set in front, it will
  immediately return by condition at do_open label.

- In smbfs_close(), call smbfs_smb_close() and drop NOPEN bit in
  the case of direcotry.  Otherwise smbfs_rmdir() fails when the
  directory was opened.


To generate a diff of this commit:
cvs rdiff -u -r1.47 -r1.48 src/sys/fs/smbfs/smbfs_node.c
cvs rdiff -u -r1.12 -r1.13 src/sys/fs/smbfs/smbfs_node.h
cvs rdiff -u -r1.82 -r1.83 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.47 src/sys/fs/smbfs/smbfs_node.c:1.48
--- src/sys/fs/smbfs/smbfs_node.c:1.47	Sun Jun 12 03:35:54 2011
+++ src/sys/fs/smbfs/smbfs_node.c	Wed Nov 28 13:34:24 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.47 2011/06/12 03:35:54 rmind Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.48 2012/11/28 13:34:24 nakayama Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.47 2011/06/12 03:35:54 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.48 2012/11/28 13:34:24 nakayama Exp $");
 
 #include 
 #include 
@@ -96,6 +96,7 @@ static int
 smbfs_node_alloc(struct mount *mp, struct vnode *dvp,
 	const char *name, int nmlen, struct smbfattr *fap, struct vnode **vpp)
 {
+	struct vattr vattr;
 	struct smbmount *smp = VFSTOSMBFS(mp);
 	struct smbnode_hashhead *nhpp;
 	struct smbnode *np, *np2, *dnp;
@@ -139,6 +140,20 @@ retry:
 		mutex_exit(&smp->sm_hashlock);
 		if (vget(vp, LK_EXCLUSIVE) != 0)
 			goto retry;
+		/* Force cached attributes to be refreshed if stale. */
+		(void)VOP_GETATTR(vp, &vattr, curlwp->l_cred);
+		/*
+		 * If the file type on the server is inconsistent with
+		 * what it was when we created the vnode, kill the
+		 * bogus vnode now and fall through to the code below
+		 * to create a new one with the right type.
+		 */
+		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);
+			break;
+		}
 		*vpp = vp;
 		return (0);
 	}
@@ -307,10 +322,9 @@ smbfs_inactive(void *v)
 		np->n_flag &= ~NOPEN;
 		smbfs_attr_cacheremove(vp);
 	}
+	*ap->a_recycle = ((np->n_flag & NGONE) != 0);
 	VOP_UNLOCK(vp);
 
-	*ap->a_recycle = false; /* XXX: should set the value properly */
-
 	return (0);
 }
 /*

Index: src/sys/fs/smbfs/smbfs_node.h
diff -u src/sys/fs/smbfs/smbfs_node.h:1.12 src/sys/fs/smbfs/smbfs_node.h:1.13
--- src/sys/fs/smbfs/smbfs_node.h:1.12	Thu Nov  2 17:34:21 2006
+++ src/sys/fs/smbfs/smbfs_node.h	Wed Nov 28 13:34:24 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.h,v 1.12 2006/11/02 17:34:21 jmmv Exp $	*/
+/*	$NetBSD: smbfs_node.h,v 1.13 2012/11/28 13:34:24 nakayama Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -48,6 +48,7 @@
 /*efine	NNEW			0x0008*//* smb/vnode has been allocated */
 #define	NREFPARENT		0x0010	/* node holds parent from recycling */
 #define	NOPEN			0x2000	/* file is open */
+#define	NGONE			0x4000	/* file has been removed/renamed */
 
 #define SMBFS_ATTRTIMO		5	/* Attribute cache timeout in sec */
 

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.82 src/sys/fs/smbfs/smbfs_vnops.c:1.83
--- src/sys/fs/smbfs/smbfs_vnops.c:1.82	Mon Nov  5 17:27:38 2012
+++ src/sys/fs/smbfs/smbfs_vnops.c	Wed Nov 28 13:34:24 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.82 2012/11/05 17:27:38 dholland Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.83 2012/11/28 13:34:24 nakayama Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.82 2012/11/05 17:27:38 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.83 2012/11/28 13:34:24 nakayama Exp $");
 
 #include 
 #include 
@@ -252,9 +252,10 @@ smbfs_open(void *v)
 		return EACCES;
 	}
 	if (vp->v_type == VDIR) {
-		np->n_flag |= NOPEN;
-		if ((sv_caps & SMB_CAP_NT_SMBS) == 0)
+		if ((sv_caps & SMB_CAP_NT_SMBS) == 0) {
+			np->n_flag |= NOPEN;
 			return 0;
+		}
 		goto do_open;	/* skip 'modified' check */
 	}
 
@@ -339,13 +340,22 @@ smbfs_close(void *v)
 	 * Ideally, the lookup routines should handle such case, and
 	 * the context would be removed only in smbfs_inactive().
 	 */
-	if (vp->v_type == VDIR && (np->n_flag & NOPEN) != 0 &&
-	np->n_dirseq != NULL) {
+	if (vp->v_type == VDIR && (np->n_flag & NOPEN) 

CVS commit: src/sys/fs/smbfs

2011-10-23 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Sun Oct 23 08:42:06 UTC 2011

Modified Files:
src/sys/fs/smbfs: smbfs_kq.c

Log Message:
VOP_GETATTR() needs a shared lock at least.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/fs/smbfs/smbfs_kq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_kq.c
diff -u src/sys/fs/smbfs/smbfs_kq.c:1.23 src/sys/fs/smbfs/smbfs_kq.c:1.24
--- src/sys/fs/smbfs/smbfs_kq.c:1.23	Sun Jun 12 03:35:54 2011
+++ src/sys/fs/smbfs/smbfs_kq.c	Sun Oct 23 08:42:06 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_kq.c,v 1.23 2011/06/12 03:35:54 rmind Exp $	*/
+/*	$NetBSD: smbfs_kq.c,v 1.24 2011/10/23 08:42:06 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2003, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_kq.c,v 1.23 2011/06/12 03:35:54 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_kq.c,v 1.24 2011/10/23 08:42:06 hannken Exp $");
 
 #include 
 #include 
@@ -149,7 +149,9 @@ smbfs_kqpoll(void *arg)
 			/* save v_size, smbfs_getattr() updates it */
 			osize = ke->vp->v_size;
 
+			vn_lock(ke->vp, LK_SHARED | LK_RETRY);
 			error = VOP_GETATTR(ke->vp, &attr, l->l_cred);
+			VOP_UNLOCK(ke->vp);
 			if (error) {
 /* relock and proceed with next */
 mutex_enter(&smbkq_lock);
@@ -458,7 +460,9 @@ smbfs_kqfilter(void *v)
 	 * held. This is likely cheap due to attrcache, so do it now.
 	 */
 	memset(&attr, 0, sizeof(attr));
+	vn_lock(vp, LK_SHARED | LK_RETRY);
 	(void) VOP_GETATTR(vp, &attr, l->l_cred);
+	VOP_UNLOCK(vp);
 
 	/* ensure the handler is running */
 	/* XXX this is unreliable. */



CVS commit: src/sys/fs/smbfs

2010-07-09 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Fri Jul  9 08:16:28 UTC 2010

Modified Files:
src/sys/fs/smbfs: smbfs_node.c smbfs_vfsops.c

Log Message:
Replace vget() with vref()/vn_lock(), this node already has a reference.


To generate a diff of this commit:
cvs rdiff -u -r1.43 -r1.44 src/sys/fs/smbfs/smbfs_node.c
cvs rdiff -u -r1.91 -r1.92 src/sys/fs/smbfs/smbfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.43 src/sys/fs/smbfs/smbfs_node.c:1.44
--- src/sys/fs/smbfs/smbfs_node.c:1.43	Thu Jun 24 13:03:10 2010
+++ src/sys/fs/smbfs/smbfs_node.c	Fri Jul  9 08:16:28 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.43 2010/06/24 13:03:10 hannken Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.44 2010/07/09 08:16:28 hannken Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.43 2010/06/24 13:03:10 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.44 2010/07/09 08:16:28 hannken Exp $");
 
 #include 
 #include 
@@ -112,8 +112,11 @@
 		if (dvp == NULL)
 			return EINVAL;
 		vp = VTOSMB(VTOSMB(dvp)->n_parent)->n_vnode;
-		if ((error = vget(vp, LK_EXCLUSIVE | LK_RETRY)) == 0)
+		vref(vp);
+		if ((error = vn_lock(vp, LK_EXCLUSIVE | LK_RETRY)) == 0)
 			*vpp = vp;
+		else
+			vrele(vp);
 		return (error);
 	}
 

Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.91 src/sys/fs/smbfs/smbfs_vfsops.c:1.92
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.91	Thu Jun 24 13:03:10 2010
+++ src/sys/fs/smbfs/smbfs_vfsops.c	Fri Jul  9 08:16:28 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vfsops.c,v 1.91 2010/06/24 13:03:10 hannken Exp $	*/
+/*	$NetBSD: smbfs_vfsops.c,v 1.92 2010/07/09 08:16:28 hannken Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.91 2010/06/24 13:03:10 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.92 2010/07/09 08:16:28 hannken Exp $");
 
 #include 
 #include 
@@ -322,9 +322,10 @@
 smbfs_root(struct mount *mp, struct vnode **vpp)
 {
 	struct smbmount *smp = VFSTOSMBFS(mp);
+	int error;
 
 	if (__predict_false(!smp->sm_root)) {
-		int error = smbfs_setroot(mp);
+		error = smbfs_setroot(mp);
 		if (error)
 			return (error);
 		/* fallthrough */
@@ -332,7 +333,11 @@
 
 	KASSERT(smp->sm_root != NULL && SMBTOV(smp->sm_root) != NULL);
 	*vpp = SMBTOV(smp->sm_root);
-	return vget(*vpp, LK_EXCLUSIVE | LK_RETRY);
+	vref(*vpp);
+	error = vn_lock(*vpp, LK_EXCLUSIVE | LK_RETRY);
+	if (error)
+		vrele(*vpp);
+	return error;
 }
 
 /*



CVS commit: src/sys/fs/smbfs

2009-10-20 Thread Matthias Scheler
Module Name:src
Committed By:   tron
Date:   Tue Oct 20 20:55:01 UTC 2009

Modified Files:
src/sys/fs/smbfs: smbfs_smb.c smbfs_subr.h

Log Message:
Add support for 64 bit file offsets to smbfs_smb_setfsize(), largely
based on code taken from FreeBSD.

This stops truncation of files larger than 4GB by VOP_SETATTR() which e.g.
happened when copying large files "rump_smbfs". Kudos to Antti Kantee
for diagnosing the problem in smbfs_smb_setfsize().


To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 src/sys/fs/smbfs/smbfs_smb.c
cvs rdiff -u -r1.19 -r1.20 src/sys/fs/smbfs/smbfs_subr.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_smb.c
diff -u src/sys/fs/smbfs/smbfs_smb.c:1.40 src/sys/fs/smbfs/smbfs_smb.c:1.41
--- src/sys/fs/smbfs/smbfs_smb.c:1.40	Sat Apr 18 14:58:04 2009
+++ src/sys/fs/smbfs/smbfs_smb.c	Tue Oct 20 20:55:01 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_smb.c,v 1.40 2009/04/18 14:58:04 tsutsui Exp $	*/
+/*	$NetBSD: smbfs_smb.c,v 1.41 2009/10/20 20:55:01 tron Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_smb.c,v 1.40 2009/04/18 14:58:04 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_smb.c,v 1.41 2009/10/20 20:55:01 tron Exp $");
 
 #include 
 #include 
@@ -265,14 +265,50 @@
 	return 0;
 }
 
+static int
+smbfs_smb_seteof(struct smbnode *np, int64_t newsize, struct smb_cred *scred)
+{
+	struct smb_t2rq *t2p;
+	struct smb_share *ssp = np->n_mount->sm_share;
+	struct mbchain *mbp;
+	int error;
+
+	error = smb_t2_alloc(SSTOCP(ssp), SMB_TRANS2_SET_FILE_INFORMATION,
+	scred, &t2p);
+	if (error)
+		return error;
+	mbp = &t2p->t2_tparam;
+	mb_init(mbp);
+	mb_put_mem(mbp, (void *)&np->n_fid, 2, MB_MSYSTEM);
+	mb_put_uint16le(mbp, SMB_SET_FILE_END_OF_FILE_INFO);
+	mb_put_uint32le(mbp, 0);
+	mbp = &t2p->t2_tdata;
+	mb_init(mbp);
+	mb_put_int64le(mbp, newsize);
+	mb_put_uint32le(mbp, 0);			/* padding */
+	mb_put_uint16le(mbp, 0);
+	t2p->t2_maxpcount = 2;
+	t2p->t2_maxdcount = 0;
+	error = smb_t2_request(t2p);
+	smb_t2_done(t2p);
+	return error;
+}
+
 int
-smbfs_smb_setfsize(struct smbnode *np, int newsize, struct smb_cred *scred)
+smbfs_smb_setfsize(struct smbnode *np, u_quad_t newsize,
+		   struct smb_cred *scred)
 {
 	struct smb_share *ssp = np->n_mount->sm_share;
 	struct smb_rq *rqp;
 	struct mbchain *mbp;
 	int error;
 
+	if (newsize >= (1LL << 32)) {
+		if (!(SMB_CAPS(SSTOVC(ssp)) & SMB_CAP_LARGE_FILES))
+			return EFBIG;
+		return smbfs_smb_seteof(np, (int64_t)newsize, scred);
+	}
+
 	error = smb_rq_alloc(SSTOCP(ssp), SMB_COM_WRITE, scred, &rqp);
 	if (error)
 		return error;

Index: src/sys/fs/smbfs/smbfs_subr.h
diff -u src/sys/fs/smbfs/smbfs_subr.h:1.19 src/sys/fs/smbfs/smbfs_subr.h:1.20
--- src/sys/fs/smbfs/smbfs_subr.h:1.19	Sat Jun 28 01:34:05 2008
+++ src/sys/fs/smbfs/smbfs_subr.h	Tue Oct 20 20:55:01 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_subr.h,v 1.19 2008/06/28 01:34:05 rumble Exp $	*/
+/*	$NetBSD: smbfs_subr.h,v 1.20 2009/10/20 20:55:01 tron Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -135,7 +135,8 @@
 	off_t start, off_t end,	struct smb_cred *scred);
 int  smbfs_smb_statvfs(struct smb_share *ssp, struct statvfs *sbp,
 	struct smb_cred *scred);
-int  smbfs_smb_setfsize(struct smbnode *np, int newsize, struct smb_cred *scred);
+int  smbfs_smb_setfsize(struct smbnode *np, u_quad_t newsize,
+			struct smb_cred *scred);
 
 int  smbfs_smb_setpattr(struct smbnode *np, u_int16_t attr,
 	struct timespec *mtime, struct smb_cred *scred);



CVS commit: src/sys/fs/smbfs

2009-10-19 Thread Antti Kantee
Module Name:src
Committed By:   pooka
Date:   Mon Oct 19 19:12:06 UTC 2009

Modified Files:
src/sys/fs/smbfs: smbfs_node.c

Log Message:
Set recycle to false along with a comment screaming that it should
be set properly to recycle unused vnodes immediately.


To generate a diff of this commit:
cvs rdiff -u -r1.41 -r1.42 src/sys/fs/smbfs/smbfs_node.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.41 src/sys/fs/smbfs/smbfs_node.c:1.42
--- src/sys/fs/smbfs/smbfs_node.c:1.41	Thu Jul  2 16:17:52 2009
+++ src/sys/fs/smbfs/smbfs_node.c	Mon Oct 19 19:12:06 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.41 2009/07/02 16:17:52 njoly Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.42 2009/10/19 19:12:06 pooka Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.41 2009/07/02 16:17:52 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.42 2009/10/19 19:12:06 pooka Exp $");
 
 #include 
 #include 
@@ -278,6 +278,7 @@
 {
 	struct vop_inactive_args /* {
 		struct vnode *a_vp;
+		bool *a_recycle;
 	} */ *ap = v;
 	struct lwp *l = curlwp;
 	kauth_cred_t cred = l->l_cred;
@@ -305,6 +306,9 @@
 		smbfs_attr_cacheremove(vp);
 	}
 	VOP_UNLOCK(vp, 0);
+
+	*ap->a_recycle = false; /* XXX: should set the value properly */
+
 	return (0);
 }
 /*



CVS commit: src/sys/fs/smbfs

2009-09-07 Thread Nicolas Joly
Module Name:src
Committed By:   njoly
Date:   Mon Sep  7 15:12:03 UTC 2009

Modified Files:
src/sys/fs/smbfs: smbfs_vfsops.c

Log Message:
Fix set_statvfs_info() to use UIO_SYSSPACE for fromname kernel
allocated buffer.


To generate a diff of this commit:
cvs rdiff -u -r1.89 -r1.90 src/sys/fs/smbfs/smbfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.89 src/sys/fs/smbfs/smbfs_vfsops.c:1.90
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.89	Mon Sep  7 12:52:53 2009
+++ src/sys/fs/smbfs/smbfs_vfsops.c	Mon Sep  7 15:12:03 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vfsops.c,v 1.89 2009/09/07 12:52:53 pooka Exp $	*/
+/*	$NetBSD: smbfs_vfsops.c,v 1.90 2009/09/07 15:12:03 njoly Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.89 2009/09/07 12:52:53 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.90 2009/09/07 15:12:03 njoly Exp $");
 
 #include 
 #include 
@@ -196,7 +196,7 @@
 	fromname = kmem_zalloc(MNAMELEN, KM_SLEEP);
 	snprintf(fromname, MNAMELEN,
 	"//%...@%s/%s", vcp->vc_username, vcp->vc_srvname, ssp->ss_name);
-	error = set_statvfs_info(path, UIO_USERSPACE, fromname, UIO_USERSPACE,
+	error = set_statvfs_info(path, UIO_USERSPACE, fromname, UIO_SYSSPACE,
 	mp->mnt_op->vfs_name, mp, l);
 	kmem_free(fromname, MNAMELEN);
 	if (error) {



CVS commit: src/sys/fs/smbfs

2009-09-07 Thread Antti Kantee
Module Name:src
Committed By:   pooka
Date:   Mon Sep  7 12:52:54 UTC 2009

Modified Files:
src/sys/fs/smbfs: smbfs_vfsops.c

Log Message:
set mntfromname in a less creative and historic fashion


To generate a diff of this commit:
cvs rdiff -u -r1.88 -r1.89 src/sys/fs/smbfs/smbfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.88 src/sys/fs/smbfs/smbfs_vfsops.c:1.89
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.88	Thu Jul  2 16:17:52 2009
+++ src/sys/fs/smbfs/smbfs_vfsops.c	Mon Sep  7 12:52:53 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vfsops.c,v 1.88 2009/07/02 16:17:52 njoly Exp $	*/
+/*	$NetBSD: smbfs_vfsops.c,v 1.89 2009/09/07 12:52:53 pooka Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.88 2009/07/02 16:17:52 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.89 2009/09/07 12:52:53 pooka Exp $");
 
 #include 
 #include 
@@ -161,6 +161,7 @@
 	struct smb_share *ssp = NULL;
 	struct smb_cred scred;
 	struct proc *p;
+	char *fromname;
 	int error;
 
 	if (*data_len < sizeof *args)
@@ -185,17 +186,25 @@
 		return EINVAL;
 	}
 
-	error = set_statvfs_info(path, UIO_USERSPACE, NULL, UIO_USERSPACE,
-	mp->mnt_op->vfs_name, mp, l);
-	if (error)
-		return error;
-
 	smb_makescred(&scred, l, l->l_cred);
 	error = smb_dev2share(args->dev_fd, SMBM_EXEC, &scred, &ssp);
 	if (error)
 		return error;
 	smb_share_unlock(ssp);	/* keep ref, but unlock */
 	vcp = SSTOVC(ssp);
+
+	fromname = kmem_zalloc(MNAMELEN, KM_SLEEP);
+	snprintf(fromname, MNAMELEN,
+	"//%...@%s/%s", vcp->vc_username, vcp->vc_srvname, ssp->ss_name);
+	error = set_statvfs_info(path, UIO_USERSPACE, fromname, UIO_USERSPACE,
+	mp->mnt_op->vfs_name, mp, l);
+	kmem_free(fromname, MNAMELEN);
+	if (error) {
+		smb_share_lock(ssp);
+		smb_share_put(ssp, &scred);
+		return error;
+	}
+
 	mp->mnt_stat.f_iosize = vcp->vc_txmax;
 	mp->mnt_stat.f_namemax =
 	(vcp->vc_hflags2 & SMB_FLAGS2_KNOWS_LONG_NAMES) ? 255 : 12;
@@ -216,10 +225,6 @@
 	smp->sm_args.dir_mode  = (smp->sm_args.dir_mode &
 			(S_IRWXU|S_IRWXG|S_IRWXO)) | S_IFDIR;
 
-	memset(mp->mnt_stat.f_mntfromname, 0, MNAMELEN);
-	snprintf(mp->mnt_stat.f_mntfromname, MNAMELEN,
-	"//%...@%s/%s", vcp->vc_username, vcp->vc_srvname, ssp->ss_name);
-
 	vfs_getnewfsid(mp);
 	return (0);
 }



CVS commit: src/sys/fs/smbfs

2009-07-04 Thread Christoph Egger
Module Name:src
Committed By:   cegger
Date:   Sat Jul  4 07:36:46 UTC 2009

Modified Files:
src/sys/fs/smbfs: smbfs_vnops.c

Log Message:
make this build w/o SMB_VNODE_DEBUG


To generate a diff of this commit:
cvs rdiff -u -r1.72 -r1.73 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.72 src/sys/fs/smbfs/smbfs_vnops.c:1.73
--- src/sys/fs/smbfs/smbfs_vnops.c:1.72	Sat Jul  4 00:03:22 2009
+++ src/sys/fs/smbfs/smbfs_vnops.c	Sat Jul  4 07:36:46 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.72 2009/07/04 00:03:22 elad Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.73 2009/07/04 07:36:46 cegger Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.72 2009/07/04 00:03:22 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.73 2009/07/04 07:36:46 cegger Exp $");
 
 #include 
 #include 
@@ -206,8 +206,10 @@
 	struct vnode *vp = ap->a_vp;
 	struct smbnode *np = VTOSMB(vp);
 	u_int acc_mode = ap->a_mode;
-	struct smbmount *smp = VTOSMBFS(vp);
 	int error;
+#ifdef SMB_VNODE_DEBUG
+	struct smbmount *smp = VTOSMBFS(vp);
+#endif
 
 SMBVDEBUG("file '%.*s', node mode=%o, acc mode=%x\n",
 	(int) np->n_nmlen, np->n_name,



CVS commit: src/sys/fs/smbfs

2009-07-03 Thread Elad Efrat
Module Name:src
Committed By:   elad
Date:   Sat Jul  4 00:03:22 UTC 2009

Modified Files:
src/sys/fs/smbfs: smbfs_vnops.c

Log Message:
Fix cut/paste error and put back a missing variable.


To generate a diff of this commit:
cvs rdiff -u -r1.71 -r1.72 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.71 src/sys/fs/smbfs/smbfs_vnops.c:1.72
--- src/sys/fs/smbfs/smbfs_vnops.c:1.71	Fri Jul  3 21:17:41 2009
+++ src/sys/fs/smbfs/smbfs_vnops.c	Sat Jul  4 00:03:22 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.71 2009/07/03 21:17:41 elad Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.72 2009/07/04 00:03:22 elad Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.71 2009/07/03 21:17:41 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.72 2009/07/04 00:03:22 elad Exp $");
 
 #include 
 #include 
@@ -206,6 +206,7 @@
 	struct vnode *vp = ap->a_vp;
 	struct smbnode *np = VTOSMB(vp);
 	u_int acc_mode = ap->a_mode;
+	struct smbmount *smp = VTOSMBFS(vp);
 	int error;
 
 SMBVDEBUG("file '%.*s', node mode=%o, acc mode=%x\n",



CVS commit: src/sys/fs/smbfs

2009-07-03 Thread Nicolas Joly
Module Name:src
Committed By:   njoly
Date:   Fri Jul  3 18:35:34 UTC 2009

Modified Files:
src/sys/fs/smbfs: smbfs_vnops.c

Log Message:
Directory open with NT_SMBS capability require the NOPEN bit to be set
too.


To generate a diff of this commit:
cvs rdiff -u -r1.69 -r1.70 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.69 src/sys/fs/smbfs/smbfs_vnops.c:1.70
--- src/sys/fs/smbfs/smbfs_vnops.c:1.69	Tue Jun 23 19:36:39 2009
+++ src/sys/fs/smbfs/smbfs_vnops.c	Fri Jul  3 18:35:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.69 2009/06/23 19:36:39 elad Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.70 2009/07/03 18:35:33 njoly Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.69 2009/06/23 19:36:39 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.70 2009/07/03 18:35:33 njoly Exp $");
 
 #include 
 #include 
@@ -227,11 +227,9 @@
 		return EACCES;
 	}
 	if (vp->v_type == VDIR) {
-		if ((sv_caps & SMB_CAP_NT_SMBS) == 0) {
-			np->n_flag |= NOPEN;
+		np->n_flag |= NOPEN;
+		if ((sv_caps & SMB_CAP_NT_SMBS) == 0)
 			return 0;
-		}
-
 		goto do_open;	/* skip 'modified' check */
 	}
 



CVS commit: src/sys/fs/smbfs

2009-07-02 Thread Nicolas Joly
Module Name:src
Committed By:   njoly
Date:   Thu Jul  2 16:17:52 UTC 2009

Modified Files:
src/sys/fs/smbfs: smbfs_node.c smbfs_vfsops.c

Log Message:
Fix some panics while trying to umount a smbfs share.

Be sure that no other active vnodes remains, before trying to release
the root one. Likewise, do not destroy the smbmount specific structure
if the umount will fail (busy conditions).

No objection from po...@.


To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 src/sys/fs/smbfs/smbfs_node.c
cvs rdiff -u -r1.87 -r1.88 src/sys/fs/smbfs/smbfs_vfsops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_node.c
diff -u src/sys/fs/smbfs/smbfs_node.c:1.40 src/sys/fs/smbfs/smbfs_node.c:1.41
--- src/sys/fs/smbfs/smbfs_node.c:1.40	Sat Mar 14 21:04:24 2009
+++ src/sys/fs/smbfs/smbfs_node.c	Thu Jul  2 16:17:52 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_node.c,v 1.40 2009/03/14 21:04:24 dsl Exp $	*/
+/*	$NetBSD: smbfs_node.c,v 1.41 2009/07/02 16:17:52 njoly Exp $	*/
 
 /*
  * Copyright (c) 2000-2001 Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.40 2009/03/14 21:04:24 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_node.c,v 1.41 2009/07/02 16:17:52 njoly Exp $");
 
 #include 
 #include 
@@ -244,8 +244,6 @@
 
 	SMBVDEBUG("%.*s,%d\n", (int) np->n_nmlen, np->n_name, vp->v_usecount);
 
-	KASSERT((np->n_flag & NOPEN) == 0);
-
 	mutex_enter(&smp->sm_hashlock);
 
 	dvp = (np->n_parent && (np->n_flag & NREFPARENT)) ?

Index: src/sys/fs/smbfs/smbfs_vfsops.c
diff -u src/sys/fs/smbfs/smbfs_vfsops.c:1.87 src/sys/fs/smbfs/smbfs_vfsops.c:1.88
--- src/sys/fs/smbfs/smbfs_vfsops.c:1.87	Wed Dec 17 20:51:35 2008
+++ src/sys/fs/smbfs/smbfs_vfsops.c	Thu Jul  2 16:17:52 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vfsops.c,v 1.87 2008/12/17 20:51:35 cegger Exp $	*/
+/*	$NetBSD: smbfs_vfsops.c,v 1.88 2009/07/02 16:17:52 njoly Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.87 2008/12/17 20:51:35 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vfsops.c,v 1.88 2009/07/02 16:17:52 njoly Exp $");
 
 #include 
 #include 
@@ -231,17 +231,16 @@
 	struct lwp *l = curlwp;
 	struct smbmount *smp = VFSTOSMBFS(mp);
 	struct smb_cred scred;
+	struct vnode *smbfs_rootvp = SMBTOV(smp->sm_root);
 	int error, flags;
 
 	SMBVDEBUG("smbfs_unmount: flags=%04x\n", mntflags);
 	flags = 0;
 	if (mntflags & MNT_FORCE)
 		flags |= FORCECLOSE;
-	/* Drop the extra reference to root vnode. */
-	if (smp->sm_root) {
-		vrele(SMBTOV(smp->sm_root));
-		smp->sm_root = NULL;
-	}
+
+	if (smbfs_rootvp->v_usecount > 1 && (mntflags & MNT_FORCE) == 0)
+		return EBUSY;
 
 	/* Flush all vnodes.
 	 * Keep trying to flush the vnode list for the mount while 
@@ -252,8 +251,12 @@
 	 * sufficient in this case. */
 	do {
 		smp->sm_didrele = 0;
-		error = vflush(mp, NULLVP, flags);
+		error = vflush(mp, smbfs_rootvp, flags);
 	} while (error == EBUSY && smp->sm_didrele != 0);
+	if (error)
+		return error;
+
+	vgone(smbfs_rootvp);
 
 	smb_makescred(&scred, l, l->l_cred);
 	smb_share_lock(smp->sm_share);
@@ -263,7 +266,7 @@
 	hashdone(smp->sm_hash, HASH_LIST, smp->sm_hashlen);
 	mutex_destroy(&smp->sm_hashlock);
 	free(smp, M_SMBFSDATA);
-	return error;
+	return 0;
 }
 
 /*



CVS commit: src/sys/fs/smbfs

2009-06-22 Thread Nicolas Joly
Module Name:src
Committed By:   njoly
Date:   Mon Jun 22 21:13:50 UTC 2009

Modified Files:
src/sys/fs/smbfs: smbfs_io.c smbfs_vnops.c

Log Message:
Fix compilation with SMB_*_DEBUG options.


To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/sys/fs/smbfs/smbfs_io.c
cvs rdiff -u -r1.67 -r1.68 src/sys/fs/smbfs/smbfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/fs/smbfs/smbfs_io.c
diff -u src/sys/fs/smbfs/smbfs_io.c:1.32 src/sys/fs/smbfs/smbfs_io.c:1.33
--- src/sys/fs/smbfs/smbfs_io.c:1.32	Wed Mar 18 16:00:21 2009
+++ src/sys/fs/smbfs/smbfs_io.c	Mon Jun 22 21:13:50 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_io.c,v 1.32 2009/03/18 16:00:21 cegger Exp $	*/
+/*	$NetBSD: smbfs_io.c,v 1.33 2009/06/22 21:13:50 njoly Exp $	*/
 
 /*
  * Copyright (c) 2000-2001, Boris Popov
@@ -36,7 +36,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_io.c,v 1.32 2009/03/18 16:00:21 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_io.c,v 1.33 2009/06/22 21:13:50 njoly Exp $");
 
 #include 
 #include 
@@ -254,7 +254,7 @@
 	/* vn types other than VREG unsupported */
 	KASSERT(vp->v_type == VREG);
 
-	SMBVDEBUG("ofs=%lld,resid=%d\n",
+	SMBVDEBUG("ofs=%lld,resid=%zu\n",
 		(long long int) uiop->uio_offset,
 		uiop->uio_resid);
 	if (uiop->uio_offset < 0)
@@ -291,7 +291,8 @@
 	}
 	smb_makescred(&scred, l, cred);
 	error = smb_write(smp->sm_share, np->n_fid, uiop, &scred);
-	SMBVDEBUG("after: ofs=%lld,resid=%d,err=%d\n",(long long int)uiop->uio_offset, uiop->uio_resid, error);
+	SMBVDEBUG("after: ofs=%lld,resid=%zu,err=%d\n",
+	(long long int)uiop->uio_offset, uiop->uio_resid, error);
 	if (!error) {
 		if (uiop->uio_offset > np->n_size) {
 			np->n_size = uiop->uio_offset;

Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.67 src/sys/fs/smbfs/smbfs_vnops.c:1.68
--- src/sys/fs/smbfs/smbfs_vnops.c:1.67	Thu May  7 19:30:30 2009
+++ src/sys/fs/smbfs/smbfs_vnops.c	Mon Jun 22 21:13:50 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: smbfs_vnops.c,v 1.67 2009/05/07 19:30:30 elad Exp $	*/
+/*	$NetBSD: smbfs_vnops.c,v 1.68 2009/06/22 21:13:50 njoly Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.67 2009/05/07 19:30:30 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.68 2009/06/22 21:13:50 njoly Exp $");
 
 #include 
 #include 
@@ -525,7 +525,8 @@
 	struct vnode *vp = ap->a_vp;
 	struct uio *uio = ap->a_uio;
 
-	SMBVDEBUG("%d,ofs=%lld,sz=%u\n",vp->v_type, (long long int)uio->uio_offset, uio->uio_resid);
+	SMBVDEBUG("%d,ofs=%lld,sz=%zu\n",vp->v_type,
+	(long long int)uio->uio_offset, uio->uio_resid);
 	if (vp->v_type != VREG)
 		return (EPERM);
 	return smbfs_writevnode(vp, uio, ap->a_cred, ap->a_ioflag);