usr.sbin/makefs: Set HAMMER2 inode mode using source inode master
authorTomohiro Kusumi <tkusumi@netbsd.org>
Mon, 30 Jan 2023 08:32:28 +0000 (00:32 -0800)
committerTomohiro Kusumi <tkusumi@netbsd.org>
Mon, 30 Jan 2023 09:05:30 +0000 (01:05 -0800)
which is also what other makefs fs do.

usr.sbin/makefs/hammer2.c
usr.sbin/makefs/hammer2/hammer2.h
usr.sbin/makefs/hammer2/hammer2_vnops.c

index c382231..657d747 100644 (file)
@@ -735,7 +735,7 @@ hammer2_populate_dir(struct m_vnode *dvp, const char *dir, fsnode *root,
 
                        vp = NULL;
                        error = hammer2_nmkdir(dvp, &vp, cur->name,
-                           strlen(cur->name));
+                           strlen(cur->name), cur->inode->st.st_mode);
                        if (error)
                                errx(1, "hammer2_nmkdir(\"%s\") failed: %s",
                                    cur->name, strerror(error));
@@ -757,7 +757,7 @@ hammer2_populate_dir(struct m_vnode *dvp, const char *dir, fsnode *root,
 
                        vp = NULL;
                        error = hammer2_ncreate(dvp, &vp, cur->name,
-                           strlen(cur->name));
+                           strlen(cur->name), cur->inode->st.st_mode);
                        if (error)
                                errx(1, "hammer2_ncreate(\"%s\") failed: %s",
                                    cur->name, strerror(error));
@@ -778,7 +778,8 @@ hammer2_populate_dir(struct m_vnode *dvp, const char *dir, fsnode *root,
 
                        vp = NULL;
                        error = hammer2_nsymlink(dvp, &vp, cur->name,
-                           strlen(cur->name), cur->symlink);
+                           strlen(cur->name), cur->symlink,
+                           cur->inode->st.st_mode);
                        if (error)
                                errx(1, "hammer2_nsymlink(\"%s\") failed: %s",
                                    cur->name, strerror(error));
@@ -794,7 +795,7 @@ hammer2_populate_dir(struct m_vnode *dvp, const char *dir, fsnode *root,
 
                        vp = NULL;
                        error = hammer2_nmknod(dvp, &vp, cur->name,
-                           strlen(cur->name), VFIFO);
+                           strlen(cur->name), VFIFO, cur->inode->st.st_mode);
                        if (error)
                                errx(1, "hammer2_nmknod(\"%s\") failed: %s",
                                    cur->name, strerror(error));
index 3e66c64..73973c4 100644 (file)
@@ -1997,13 +1997,15 @@ hammer2_vfsvolume_t *hammer2_get_volume(hammer2_dev_t *hmp, hammer2_off_t offset
 int hammer2_reclaim(struct m_vnode *vp);
 int hammer2_write(struct m_vnode *vp, void *buf, size_t size, off_t offset);
 int hammer2_nresolve(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen);
-int hammer2_nmkdir(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen);
+int hammer2_nmkdir(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
+                       mode_t mode);
 int hammer2_nlink(struct m_vnode *dvp, struct m_vnode *vp, char *name, int nlen);
-int hammer2_ncreate(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen);
+int hammer2_ncreate(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
+                       mode_t mode);
 int hammer2_nmknod(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
-                       int type);
+                       int type, mode_t mode);
 int hammer2_nsymlink(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
-                       char *target);
+                       char *target, mode_t mode);
 
 /*
  * hammer2_buf.c
index cd6145c..f5a6a63 100644 (file)
@@ -1646,7 +1646,8 @@ hammer2_vop_nmkdir(struct vop_nmkdir_args *ap)
 }
 
 int
-hammer2_nmkdir(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen)
+hammer2_nmkdir(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
+               mode_t mode)
 {
        struct namecache nc = {
                .nc_name = name,
@@ -1659,7 +1660,7 @@ hammer2_nmkdir(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen)
        uid_t va_gid = VNOVAL; //getgid();
        struct vattr va = {
                .va_type = VDIR,
-               .va_mode = 0755, /* should be tunable */
+               .va_mode = mode & ~S_IFMT,
                .va_uid = va_uid,
                .va_gid = va_gid,
        };
@@ -1911,7 +1912,8 @@ hammer2_vop_ncreate(struct vop_ncreate_args *ap)
 }
 
 int
-hammer2_ncreate(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen)
+hammer2_ncreate(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
+               mode_t mode)
 {
        struct namecache nc = {
                .nc_name = name,
@@ -1924,7 +1926,7 @@ hammer2_ncreate(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen)
        uid_t va_gid = VNOVAL; //getgid();
        struct vattr va = {
                .va_type = VREG,
-               .va_mode = 0644, /* should be tunable */
+               .va_mode = mode & ~S_IFMT,
                .va_uid = va_uid,
                .va_gid = va_gid,
        };
@@ -2017,7 +2019,7 @@ hammer2_vop_nmknod(struct vop_nmknod_args *ap)
 
 int
 hammer2_nmknod(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
-               int type)
+               int type, mode_t mode)
 {
        struct namecache nc = {
                .nc_name = name,
@@ -2030,7 +2032,7 @@ hammer2_nmknod(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
        uid_t va_gid = VNOVAL; //getgid();
        struct vattr va = {
                .va_type = type,
-               .va_mode = 0644, /* should be tunable */
+               .va_mode = mode & ~S_IFMT,
                .va_uid = va_uid,
                .va_gid = va_gid,
        };
@@ -2158,7 +2160,7 @@ hammer2_vop_nsymlink(struct vop_nsymlink_args *ap)
 
 int
 hammer2_nsymlink(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
-                       char *target)
+                       char *target, mode_t mode)
 {
        struct namecache nc = {
                .nc_name = name,
@@ -2171,7 +2173,7 @@ hammer2_nsymlink(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen
        uid_t va_gid = VNOVAL; //getgid();
        struct vattr va = {
                .va_type = VDIR,
-               .va_mode = 0755, /* should be tunable */
+               .va_mode = mode & ~S_IFMT,
                .va_uid = va_uid,
                .va_gid = va_gid,
        };