Module Name:    src
Committed By:   pooka
Date:           Mon Jun 10 14:15:03 UTC 2013

Modified Files:
        src/sys/rump/librump/rumpvfs: rumpfs.c

Log Message:
Create inodes with the specified mode instead of hardcoding to 0755.


To generate a diff of this commit:
cvs rdiff -u -r1.114 -r1.115 src/sys/rump/librump/rumpvfs/rumpfs.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/rump/librump/rumpvfs/rumpfs.c
diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.114 src/sys/rump/librump/rumpvfs/rumpfs.c:1.115
--- src/sys/rump/librump/rumpvfs/rumpfs.c:1.114	Tue Apr 30 00:03:54 2013
+++ src/sys/rump/librump/rumpvfs/rumpfs.c	Mon Jun 10 14:15:03 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rumpfs.c,v 1.114 2013/04/30 00:03:54 pooka Exp $	*/
+/*	$NetBSD: rumpfs.c,v 1.115 2013/06/10 14:15:03 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010, 2011 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.114 2013/04/30 00:03:54 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.115 2013/06/10 14:15:03 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -218,8 +218,9 @@ struct rumpfs_mount {
 static int lastino = 2;
 static kmutex_t reclock;
 
+#define RUMPFS_DEFAULTMODE 0755
 static void freedir(struct rumpfs_node *, struct componentname *);
-static struct rumpfs_node *makeprivate(enum vtype, dev_t, off_t, bool);
+static struct rumpfs_node *makeprivate(enum vtype, mode_t, dev_t, off_t, bool);
 
 /*
  * Extra Terrestrial stuff.  We map a given key (pathname) to a file on
@@ -373,7 +374,8 @@ doregister(const char *key, const char *
 	et = kmem_alloc(sizeof(*et), KM_SLEEP);
 	strcpy(et->et_key, key);
 	et->et_keylen = strlen(et->et_key);
-	et->et_rn = rn = makeprivate(ettype_to_vtype(ftype), rdev, size, true);
+	et->et_rn = rn = makeprivate(ettype_to_vtype(ftype), RUMPFS_DEFAULTMODE,
+	    rdev, size, true);
 	et->et_removing = false;
 	et->et_blkmin = dmin;
 
@@ -510,12 +512,13 @@ rump_etfs_remove(const char *key)
  */
 
 static struct rumpfs_node *
-makeprivate(enum vtype vt, dev_t rdev, off_t size, bool et)
+makeprivate(enum vtype vt, mode_t mode, dev_t rdev, off_t size, bool et)
 {
 	struct rumpfs_node *rn;
 	struct vattr *va;
 	struct timespec ts;
 
+	KASSERT((mode & ~ALLPERMS) == 0);
 	rn = kmem_zalloc(sizeof(*rn), KM_SLEEP);
 
 	switch (vt) {
@@ -536,7 +539,7 @@ makeprivate(enum vtype vt, dev_t rdev, o
 
 	va = &rn->rn_va;
 	va->va_type = vt;
-	va->va_mode = 0755;
+	va->va_mode = mode;
 	if (vt == VDIR)
 		va->va_nlink = 2;
 	else
@@ -742,7 +745,8 @@ rump_vop_lookup(void *v)
 			return ENOENT;
 		}
 
-		rn = makeprivate(hft_to_vtype(hft), NODEV, fsize, true);
+		rn = makeprivate(hft_to_vtype(hft), RUMPFS_DEFAULTMODE,
+		    NODEV, fsize, true);
 		rn->rn_flags |= RUMPNODE_CANRECLAIM;
 		if (rnd->rn_flags & RUMPNODE_DIR_ETSUBS) {
 			rn->rn_flags |= RUMPNODE_DIR_ET | RUMPNODE_DIR_ETSUBS;
@@ -997,10 +1001,11 @@ rump_vop_mkdir(void *v)
 	struct vnode *dvp = ap->a_dvp;
 	struct vnode **vpp = ap->a_vpp;
 	struct componentname *cnp = ap->a_cnp;
+	struct vattr *va = ap->a_vap;
 	struct rumpfs_node *rnd = dvp->v_data, *rn;
 	int rv = 0;
 
-	rn = makeprivate(VDIR, NODEV, DEV_BSIZE, false);
+	rn = makeprivate(VDIR, va->va_mode & ALLPERMS, NODEV, DEV_BSIZE, false);
 	if ((cnp->cn_flags & ISWHITEOUT) != 0)
 		rn->rn_va.va_flags |= UF_OPAQUE;
 	rn->rn_parent = rnd;
@@ -1102,7 +1107,8 @@ rump_vop_mknod(void *v)
 	struct rumpfs_node *rnd = dvp->v_data, *rn;
 	int rv;
 
-	rn = makeprivate(va->va_type, va->va_rdev, DEV_BSIZE, false);
+	rn = makeprivate(va->va_type, va->va_mode & ALLPERMS, va->va_rdev,
+	    DEV_BSIZE, false);
 	if ((cnp->cn_flags & ISWHITEOUT) != 0)
 		rn->rn_va.va_flags |= UF_OPAQUE;
 	rv = makevnode(dvp->v_mount, rn, vpp);
@@ -1134,7 +1140,8 @@ rump_vop_create(void *v)
 	int rv;
 
 	newsize = va->va_type == VSOCK ? DEV_BSIZE : 0;
-	rn = makeprivate(va->va_type, NODEV, newsize, false);
+	rn = makeprivate(va->va_type, va->va_mode & ALLPERMS, NODEV,
+	    newsize, false);
 	if ((cnp->cn_flags & ISWHITEOUT) != 0)
 		rn->rn_va.va_flags |= UF_OPAQUE;
 	rv = makevnode(dvp->v_mount, rn, vpp);
@@ -1161,6 +1168,7 @@ rump_vop_symlink(void *v)
 	struct vnode *dvp = ap->a_dvp;
 	struct vnode **vpp = ap->a_vpp;
 	struct componentname *cnp = ap->a_cnp;
+	struct vattr *va = ap->a_vap;
 	struct rumpfs_node *rnd = dvp->v_data, *rn;
 	const char *target = ap->a_target;
 	size_t linklen;
@@ -1168,7 +1176,7 @@ rump_vop_symlink(void *v)
 
 	linklen = strlen(target);
 	KASSERT(linklen < MAXPATHLEN);
-	rn = makeprivate(VLNK, NODEV, linklen, false);
+	rn = makeprivate(VLNK, va->va_mode & ALLPERMS, NODEV, linklen, false);
 	if ((cnp->cn_flags & ISWHITEOUT) != 0)
 		rn->rn_va.va_flags |= UF_OPAQUE;
 	rv = makevnode(dvp->v_mount, rn, vpp);
@@ -1748,7 +1756,7 @@ rumpfs_mountfs(struct mount *mp)
 
 	rfsmp = kmem_alloc(sizeof(*rfsmp), KM_SLEEP);
 
-	rn = makeprivate(VDIR, NODEV, DEV_BSIZE, false);
+	rn = makeprivate(VDIR, RUMPFS_DEFAULTMODE, NODEV, DEV_BSIZE, false);
 	rn->rn_parent = rn;
 	if ((error = makevnode(mp, rn, &rfsmp->rfsmp_rvp)) != 0)
 		return error;

Reply via email to