Index: trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c
===================================================================
--- trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c	(revision 39295)
+++ trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c	(revision 39297)
@@ -189,196 +189,4 @@
 	fsinfo->maxnamesize = info.fsProperties.cbMaxComponent;
 	fsinfo->readonly = info.fsProperties.fReadOnly;
-	return (0);
-}
-
-/*
- * File operations: open/close/read/write/etc.
- *
- * open/create can return any relevant errno, however ENOENT
- * generally means that the host file didn't exist.
- */
-struct sfp_file {
-	SHFLHANDLE handle;
-	VBSFMAP map;	/* need this again for the close operation */
-};
-
-int
-sfprov_create(sfp_mount_t *mnt, char *path, sfp_file_t **fp)
-{
-
-	int rc;
-	SHFLCREATEPARMS parms;
-	SHFLSTRING *str;
-	int size;
-	sfp_file_t *newfp;
-
-	str = sfprov_string(path, &size);
-	parms.Handle = 0;
-	parms.Info.cbObject = 0;
-	parms.CreateFlags = SHFL_CF_ACT_CREATE_IF_NEW |
-	    SHFL_CF_ACT_REPLACE_IF_EXISTS | SHFL_CF_ACCESS_READWRITE;
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
-	kmem_free(str, size);
-
-	if (RT_FAILURE(rc))
-	{
-		if (rc != VERR_ACCESS_DENIED && rc != VERR_WRITE_PROTECT)
-			cmn_err(CE_WARN, "sfprov_create: vboxCallCreate failed! path=%s rc=%d\n", path, rc);
-		return (sfprov_vbox2errno(rc));
-	}
-	if (parms.Handle == SHFL_HANDLE_NIL) {
-		if (parms.Result == SHFL_FILE_EXISTS)
-			return (EEXIST);
-		return (ENOENT);
-	}
-	newfp = kmem_alloc(sizeof(sfp_file_t), KM_SLEEP);
-	newfp->handle = parms.Handle;
-	newfp->map = mnt->map;
-	*fp = newfp;
-	return (0);
-}
-
-int
-sfprov_open(sfp_mount_t *mnt, char *path, sfp_file_t **fp)
-{
-	int rc;
-	SHFLCREATEPARMS parms;
-	SHFLSTRING *str;
-	int size;
-	sfp_file_t *newfp;
-
-	/*
-	 * First we attempt to open it read/write. If that fails we
-	 * try read only.
-	 */
-	bzero(&parms, sizeof(parms));
-	str = sfprov_string(path, &size);
-	parms.Handle = SHFL_HANDLE_NIL;
-	parms.Info.cbObject = 0;
-	parms.CreateFlags = SHFL_CF_ACT_FAIL_IF_NEW | SHFL_CF_ACCESS_READWRITE;
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
-	if (RT_FAILURE(rc) && rc != VERR_ACCESS_DENIED) {
-		kmem_free(str, size);
-		return (sfprov_vbox2errno(rc));
-	}
-	if (parms.Handle == SHFL_HANDLE_NIL) {
-		if (parms.Result == SHFL_PATH_NOT_FOUND ||
-		    parms.Result == SHFL_FILE_NOT_FOUND) {
-			kmem_free(str, size);
-			return (ENOENT);
-		}
-		parms.CreateFlags =
-		    SHFL_CF_ACT_FAIL_IF_NEW | SHFL_CF_ACCESS_READ;
-		rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
-		if (RT_FAILURE(rc)) {
-			kmem_free(str, size);
-			return (sfprov_vbox2errno(rc));
-		}
-		if (parms.Handle == SHFL_HANDLE_NIL) {
-			kmem_free(str, size);
-			return (ENOENT);
-		}
-	}
-	else
-		kmem_free(str, size);
-	newfp = kmem_alloc(sizeof(sfp_file_t), KM_SLEEP);
-	newfp->handle = parms.Handle;
-	newfp->map = mnt->map;
-	*fp = newfp;
-	return (0);
-}
-
-int
-sfprov_trunc(sfp_mount_t *mnt, char *path)
-{
-	int rc;
-	SHFLCREATEPARMS parms;
-	SHFLSTRING *str;
-	int size;
-
-	/*
-	 * open it read/write.
-	 */
-	str = sfprov_string(path, &size);
-	parms.Handle = 0;
-	parms.Info.cbObject = 0;
-	parms.CreateFlags = SHFL_CF_ACT_FAIL_IF_NEW | SHFL_CF_ACCESS_READWRITE |
-	    SHFL_CF_ACT_OVERWRITE_IF_EXISTS;
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
-	kmem_free(str, size);
-
-	if (RT_FAILURE(rc)) {
-		return (EINVAL);
-	}
-	(void)vboxCallClose(&vbox_client, &mnt->map, parms.Handle);
-	return (0);
-}
-
-int
-sfprov_close(sfp_file_t *fp)
-{
-	int rc;
-
-	rc = vboxCallClose(&vbox_client, &fp->map, fp->handle);
-	kmem_free(fp, sizeof(sfp_file_t));
-	return (0);
-}
-
-int
-sfprov_read(sfp_file_t *fp, char *buffer, uint64_t offset, uint32_t *numbytes)
-{
-	int rc;
-
-	rc = vboxCallRead(&vbox_client, &fp->map, fp->handle, offset,
-	    numbytes, (uint8_t *)buffer, 0);	/* what is that last arg? */
-	if (RT_FAILURE(rc))
-		return (EINVAL);
-	return (0);
-}
-
-int
-sfprov_write(sfp_file_t *fp, char *buffer, uint64_t offset, uint32_t *numbytes)
-{
-	int rc;
-
-	rc = vboxCallWrite(&vbox_client, &fp->map, fp->handle, offset,
-	    numbytes, (uint8_t *)buffer, 0);	/* what is that last arg? */
-	if (RT_FAILURE(rc))
-		return (EINVAL);
-	return (0);
-}
-
-int
-sfprov_fsync(sfp_file_t *fp)
-{
-	int rc;
-
-	rc = vboxCallFlush(&vbox_client, &fp->map, fp->handle);
-	if (RT_FAILURE(rc))
-		return (EIO);
-	return (0);
-}
-
-
-static int
-sfprov_getinfo(sfp_mount_t *mnt, char *path, PSHFLFSOBJINFO info)
-{
-	int rc;
-	SHFLCREATEPARMS parms;
-	SHFLSTRING *str;
-	int size;
-
-	str = sfprov_string(path, &size);
-	parms.Handle = 0;
-	parms.Info.cbObject = 0;
-	parms.CreateFlags = SHFL_CF_LOOKUP | SHFL_CF_ACT_FAIL_IF_NEW;
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
-	kmem_free(str, size);
-
-	if (RT_FAILURE(rc))
-		return (EINVAL);
-	if (parms.Result != SHFL_FILE_EXISTS)
-		return (ENOENT);
-	*info = parms.Info;
 	return (0);
 }
@@ -473,33 +281,4 @@
 }
 
-/*
- * get information about a file (or directory)
- */
-int
-sfprov_get_mode(sfp_mount_t *mnt, char *path, mode_t *mode)
-{
-	int rc;
-	SHFLFSOBJINFO info;
-
-	rc = sfprov_getinfo(mnt, path, &info);
-	if (rc)
-		return (rc);
-	sfprov_mode_from_fmode(mode, info.Attr.fMode);
-	return (0);
-}
-
-int
-sfprov_get_size(sfp_mount_t *mnt, char *path, uint64_t *size)
-{
-	int rc;
-	SHFLFSOBJINFO info;
-
-	rc = sfprov_getinfo(mnt, path, &info);
-	if (rc)
-		return (rc);
-	*size = info.cbObject;
-	return (0);
-}
-
 static void
 sfprov_ftime_from_timespec(timestruc_t *time, RTTIMESPEC *ts)
@@ -520,4 +299,233 @@
 	sfprov_ftime_from_timespec(&stat->sf_ctime, &info->ChangeTime);
 }
+
+/*
+ * File operations: open/close/read/write/etc.
+ *
+ * open/create can return any relevant errno, however ENOENT
+ * generally means that the host file didn't exist.
+ */
+struct sfp_file {
+	SHFLHANDLE handle;
+	VBSFMAP map;	/* need this again for the close operation */
+};
+
+int
+sfprov_create(
+	sfp_mount_t *mnt,
+	char *path,
+	mode_t mode,
+	sfp_file_t **fp,
+	sffs_stat_t *stat)
+{
+
+	int rc;
+	SHFLCREATEPARMS parms;
+	SHFLSTRING *str;
+	int size;
+	sfp_file_t *newfp;
+
+	str = sfprov_string(path, &size);
+	parms.Handle = SHFL_HANDLE_NIL;
+	parms.Info.cbObject = 0;
+	sfprov_fmode_from_mode(&parms.Info.Attr.fMode, mode);
+	parms.CreateFlags = SHFL_CF_ACT_CREATE_IF_NEW |
+	    SHFL_CF_ACT_REPLACE_IF_EXISTS | SHFL_CF_ACCESS_READWRITE;
+	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	kmem_free(str, size);
+
+	if (RT_FAILURE(rc))
+	{
+		if (rc != VERR_ACCESS_DENIED && rc != VERR_WRITE_PROTECT)
+			cmn_err(CE_WARN, "sfprov_create: vboxCallCreate failed! path=%s rc=%d\n", path, rc);
+		return (sfprov_vbox2errno(rc));
+	}
+	if (parms.Handle == SHFL_HANDLE_NIL) {
+		if (parms.Result == SHFL_FILE_EXISTS)
+			return (EEXIST);
+		return (ENOENT);
+	}
+	newfp = kmem_alloc(sizeof(sfp_file_t), KM_SLEEP);
+	newfp->handle = parms.Handle;
+	newfp->map = mnt->map;
+	*fp = newfp;
+	sfprov_stat_from_info(stat, &parms.Info);
+	return (0);
+}
+
+int
+sfprov_open(sfp_mount_t *mnt, char *path, sfp_file_t **fp)
+{
+	int rc;
+	SHFLCREATEPARMS parms;
+	SHFLSTRING *str;
+	int size;
+	sfp_file_t *newfp;
+
+	/*
+	 * First we attempt to open it read/write. If that fails we
+	 * try read only.
+	 */
+	bzero(&parms, sizeof(parms));
+	str = sfprov_string(path, &size);
+	parms.Handle = SHFL_HANDLE_NIL;
+	parms.Info.cbObject = 0;
+	parms.CreateFlags = SHFL_CF_ACT_FAIL_IF_NEW | SHFL_CF_ACCESS_READWRITE;
+	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	if (RT_FAILURE(rc) && rc != VERR_ACCESS_DENIED) {
+		kmem_free(str, size);
+		return (sfprov_vbox2errno(rc));
+	}
+	if (parms.Handle == SHFL_HANDLE_NIL) {
+		if (parms.Result == SHFL_PATH_NOT_FOUND ||
+		    parms.Result == SHFL_FILE_NOT_FOUND) {
+			kmem_free(str, size);
+			return (ENOENT);
+		}
+		parms.CreateFlags =
+		    SHFL_CF_ACT_FAIL_IF_NEW | SHFL_CF_ACCESS_READ;
+		rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+		if (RT_FAILURE(rc)) {
+			kmem_free(str, size);
+			return (sfprov_vbox2errno(rc));
+		}
+		if (parms.Handle == SHFL_HANDLE_NIL) {
+			kmem_free(str, size);
+			return (ENOENT);
+		}
+	}
+	else
+		kmem_free(str, size);
+	newfp = kmem_alloc(sizeof(sfp_file_t), KM_SLEEP);
+	newfp->handle = parms.Handle;
+	newfp->map = mnt->map;
+	*fp = newfp;
+	return (0);
+}
+
+int
+sfprov_trunc(sfp_mount_t *mnt, char *path)
+{
+	int rc;
+	SHFLCREATEPARMS parms;
+	SHFLSTRING *str;
+	int size;
+
+	/*
+	 * open it read/write.
+	 */
+	str = sfprov_string(path, &size);
+	parms.Handle = 0;
+	parms.Info.cbObject = 0;
+	parms.CreateFlags = SHFL_CF_ACT_FAIL_IF_NEW | SHFL_CF_ACCESS_READWRITE |
+	    SHFL_CF_ACT_OVERWRITE_IF_EXISTS;
+	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	kmem_free(str, size);
+
+	if (RT_FAILURE(rc)) {
+		return (EINVAL);
+	}
+	(void)vboxCallClose(&vbox_client, &mnt->map, parms.Handle);
+	return (0);
+}
+
+int
+sfprov_close(sfp_file_t *fp)
+{
+	int rc;
+
+	rc = vboxCallClose(&vbox_client, &fp->map, fp->handle);
+	kmem_free(fp, sizeof(sfp_file_t));
+	return (0);
+}
+
+int
+sfprov_read(sfp_file_t *fp, char *buffer, uint64_t offset, uint32_t *numbytes)
+{
+	int rc;
+
+	rc = vboxCallRead(&vbox_client, &fp->map, fp->handle, offset,
+	    numbytes, (uint8_t *)buffer, 0);	/* what is that last arg? */
+	if (RT_FAILURE(rc))
+		return (EINVAL);
+	return (0);
+}
+
+int
+sfprov_write(sfp_file_t *fp, char *buffer, uint64_t offset, uint32_t *numbytes)
+{
+	int rc;
+
+	rc = vboxCallWrite(&vbox_client, &fp->map, fp->handle, offset,
+	    numbytes, (uint8_t *)buffer, 0);	/* what is that last arg? */
+	if (RT_FAILURE(rc))
+		return (EINVAL);
+	return (0);
+}
+
+int
+sfprov_fsync(sfp_file_t *fp)
+{
+	int rc;
+
+	rc = vboxCallFlush(&vbox_client, &fp->map, fp->handle);
+	if (RT_FAILURE(rc))
+		return (EIO);
+	return (0);
+}
+
+
+static int
+sfprov_getinfo(sfp_mount_t *mnt, char *path, PSHFLFSOBJINFO info)
+{
+	int rc;
+	SHFLCREATEPARMS parms;
+	SHFLSTRING *str;
+	int size;
+
+	str = sfprov_string(path, &size);
+	parms.Handle = 0;
+	parms.Info.cbObject = 0;
+	parms.CreateFlags = SHFL_CF_LOOKUP | SHFL_CF_ACT_FAIL_IF_NEW;
+	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	kmem_free(str, size);
+
+	if (RT_FAILURE(rc))
+		return (EINVAL);
+	if (parms.Result != SHFL_FILE_EXISTS)
+		return (ENOENT);
+	*info = parms.Info;
+	return (0);
+}
+
+/*
+ * get information about a file (or directory)
+ */
+int
+sfprov_get_mode(sfp_mount_t *mnt, char *path, mode_t *mode)
+{
+	int rc;
+	SHFLFSOBJINFO info;
+
+	rc = sfprov_getinfo(mnt, path, &info);
+	if (rc)
+		return (rc);
+	sfprov_mode_from_fmode(mode, info.Attr.fMode);
+	return (0);
+}
+
+int
+sfprov_get_size(sfp_mount_t *mnt, char *path, uint64_t *size)
+{
+	int rc;
+	SHFLFSOBJINFO info;
+
+	rc = sfprov_getinfo(mnt, path, &info);
+	if (rc)
+		return (rc);
+	*size = info.cbObject;
+	return (0);
+}
+
 
 int
@@ -712,5 +720,10 @@
  */
 int
-sfprov_mkdir(sfp_mount_t *mnt, char *path, sfp_file_t **fp)
+sfprov_mkdir(
+	sfp_mount_t *mnt,
+	char *path,
+	mode_t mode,
+	sfp_file_t **fp,
+	sffs_stat_t *stat)
 {
 	int rc;
@@ -721,6 +734,7 @@
 
 	str = sfprov_string(path, &size);
-	parms.Handle = 0;
+	parms.Handle = SHFL_HANDLE_NIL;
 	parms.Info.cbObject = 0;
+	sfprov_fmode_from_mode(&parms.Info.Attr.fMode, mode);
 	parms.CreateFlags = SHFL_CF_DIRECTORY | SHFL_CF_ACT_CREATE_IF_NEW |
 	    SHFL_CF_ACT_FAIL_IF_EXISTS | SHFL_CF_ACCESS_READ;
@@ -739,4 +753,5 @@
 	newfp->map = mnt->map;
 	*fp = newfp;
+	sfprov_stat_from_info(stat, &parms.Info);
 	return (0);
 }
Index: trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h
===================================================================
--- trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h	(revision 39295)
+++ trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h	(revision 39297)
@@ -88,7 +88,17 @@
  * generally means that the host file didn't exist.
  */
+typedef struct sffs_stat {
+	mode_t		sf_mode;
+	off_t		sf_size;
+	off_t		sf_alloc;
+	timestruc_t	sf_atime;
+	timestruc_t	sf_mtime;
+	timestruc_t	sf_ctime;
+} sffs_stat_t;
+
 typedef struct sfp_file sfp_file_t;
 
-extern int sfprov_create(sfp_mount_t *, char *path, sfp_file_t **fp);
+extern int sfprov_create(sfp_mount_t *, char *path, mode_t mode,
+    sfp_file_t **fp, sffs_stat_t *stat);
 extern int sfprov_open(sfp_mount_t *, char *path, sfp_file_t **fp);
 extern int sfprov_close(sfp_file_t *fp);
@@ -103,13 +113,4 @@
  * get/set information about a file (or directory) using pathname
  */
-typedef struct sffs_stat {
-	mode_t		sf_mode;
-	off_t		sf_size;
-	off_t		sf_alloc;
-	timestruc_t	sf_atime;
-	timestruc_t	sf_mtime;
-	timestruc_t	sf_ctime;
-} sffs_stat_t;
-
 extern int sfprov_get_mode(sfp_mount_t *, char *, mode_t *);
 extern int sfprov_get_size(sfp_mount_t *, char *, uint64_t *);
@@ -128,5 +129,6 @@
 extern int sfprov_trunc(sfp_mount_t *, char *);
 extern int sfprov_remove(sfp_mount_t *, char *path, uint_t is_link);
-extern int sfprov_mkdir(sfp_mount_t *, char *path, sfp_file_t **fp);
+extern int sfprov_mkdir(sfp_mount_t *, char *path, mode_t mode,
+    sfp_file_t **fp, sffs_stat_t *stat);
 extern int sfprov_rmdir(sfp_mount_t *, char *path);
 extern int sfprov_rename(sfp_mount_t *, char *from, char *to, uint_t is_dir);
Index: trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c
===================================================================
--- trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c	(revision 39295)
+++ trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c	(revision 39297)
@@ -535,4 +535,5 @@
 	char *name,
 	vtype_t create,
+	mode_t c_mode,
 	sffs_stat_t *stat,
 	uint64_t stat_time,
@@ -587,8 +588,12 @@
 	if (create == VREG) {
 		type = VREG;
-		error = sfprov_create(dir->sf_sffs->sf_handle, fullpath, &fp);
+		error = sfprov_create(dir->sf_sffs->sf_handle, fullpath, c_mode,
+					&fp, stat);
+		stat_time = sfnode_cur_time_usec();
 	} else if (create == VDIR) {
 		type = VDIR;
-		error = sfprov_mkdir(dir->sf_sffs->sf_handle, fullpath, &fp);
+		error = sfprov_mkdir(dir->sf_sffs->sf_handle, fullpath, c_mode,
+					&fp, stat);
+		stat_time = sfnode_cur_time_usec();
 	} else {
 		mode_t m;
@@ -786,5 +791,5 @@
 		} else {
 			node = sfnode_lookup(dir, dirent->sf_entry.d_name, VNON,
-			    &dirent->sf_stat, sfnode_cur_time_usec(), NULL);
+				0, &dirent->sf_stat, sfnode_cur_time_usec(), NULL);
 			if (node == NULL)
 				panic("sffs_readdir() lookup failed");
@@ -1217,5 +1222,5 @@
 	 * Lookup the node.
 	 */
-	node = sfnode_lookup(VN2SFN(dvp), name, VNON, NULL, 0, NULL);
+	node = sfnode_lookup(VN2SFN(dvp), name, VNON, 0, NULL, 0, NULL);
 	if (node != NULL)
 		*vpp = sfnode_get_vnode(node);
@@ -1312,5 +1317,5 @@
 	 */
 	mutex_enter(&sffs_lock);
-	node = sfnode_lookup(VN2SFN(dvp), name, VNON, NULL, 0, NULL);
+	node = sfnode_lookup(VN2SFN(dvp), name, VNON, 0, NULL, 0, NULL);
 	if (node != NULL) {
 		mutex_exit(&sffs_lock);
@@ -1323,13 +1328,6 @@
 	sfnode_invalidate_stat_cache(VN2SFN(dvp));
 	int lookuperr;
-	node = sfnode_lookup(VN2SFN(dvp), name, VREG, NULL, 0, &lookuperr);
-	if (node && (vap->va_mask & AT_MODE)) {
-		timestruc_t dummy;
-		error = sfprov_set_attr(node->sf_sffs->sf_handle, node->sf_path,
-		    AT_MODE, vap->va_mode, dummy, dummy, dummy);
-		if (error)
-			cmn_err(CE_WARN, "sffs_create: set_mode(%s, %o) failed"
-			    " rc=%d", node->sf_path, vap->va_mode, error);
-	}
+	node = sfnode_lookup(VN2SFN(dvp), name, VREG,
+		(vap->va_mask & AT_MODE) ? vap->va_mode : 0, NULL, 0, &lookuperr);
 
 	if (node && node->sf_parent)
@@ -1390,13 +1388,6 @@
 	sfnode_invalidate_stat_cache(VN2SFN(dvp));
 	int lookuperr = EACCES;
-	node = sfnode_lookup(VN2SFN(dvp), nm, VDIR, NULL, 0, &lookuperr);
-	if (node && (va->va_mask & AT_MODE)) {
-		timestruc_t dummy;
-		error = sfprov_set_attr(node->sf_sffs->sf_handle, node->sf_path,
-		    AT_MODE, va->va_mode, dummy, dummy, dummy);
-		if (error)
-			cmn_err(CE_WARN, "sffs_mkdir: set_mode(%s, %o) failed"
-			    " rc=%d", node->sf_path, va->va_mode, error);
-	}
+	node = sfnode_lookup(VN2SFN(dvp), nm, VDIR,
+		(va->va_mode & AT_MODE) ? va->va_mode : 0, NULL, 0, &lookuperr);
 
 	if (node && node->sf_parent)
@@ -1963,5 +1954,6 @@
 	mutex_enter(&sffs_lock);
 
-	if (sfnode_lookup(VN2SFN(dvp), linkname, VNON, NULL, 0, NULL) != NULL) {
+	if (sfnode_lookup(VN2SFN(dvp), linkname, VNON, 0, NULL, 0, NULL) !=
+		NULL) {
 		error = EEXIST;
 		goto done;
@@ -1984,6 +1976,6 @@
 		goto done;
 
-	node = sfnode_lookup(dir, linkname, VLNK, &stat, sfnode_cur_time_usec(),
-	    NULL);
+	node = sfnode_lookup(dir, linkname, VLNK, 0, &stat,
+		sfnode_cur_time_usec(), NULL);
 
 	sfnode_invalidate_stat_cache(dir);
@@ -2093,5 +2085,5 @@
 		goto done;
 
-	node = sfnode_lookup(VN2SFN(old_dir), old_nm, VNON, NULL, 0, NULL);
+	node = sfnode_lookup(VN2SFN(old_dir), old_nm, VNON, 0, NULL, 0, NULL);
 	if (node == NULL) {
 		error = ENOENT;
