Download raw body.
Standardize the definition of a UFS dinode
Standardize the definition of a UFS dinode
Each program that operates on UFS on-disk inodes defines its own
version of a dinode. They all (of necessity) define the same
layout but use different names. This change adds a definition of
a dinode (a union of a UFS1 on-disk inode and a UFS2 on-disk inode)
in sys/ufs/ufs/dinode.h.
This is based on Kirk McKusick's commit
aa90fbed151de512ab6e59f75df009533a15751f in FreeBSD.
Unfortunately "union dinode_u" can't be standardize because it also
includes ext2fs_dinode.
Feedback? OK?
diff --git a/sbin/dump/traverse.c b/sbin/dump/traverse.c
index 083225c3f8d..40a5122f512 100644
--- a/sbin/dump/traverse.c
+++ b/sbin/dump/traverse.c
@@ -53,10 +53,6 @@
extern struct disklabel lab;
-union dinode {
- struct ufs1_dinode dp1;
- struct ufs2_dinode dp2;
-};
#define DIP(dp, field) \
((sblock->fs_magic == FS_UFS1_MAGIC) ? \
(dp)->dp1.field : (dp)->dp2.field)
diff --git a/sbin/fsck_ffs/fsck.h b/sbin/fsck_ffs/fsck.h
index 8af2e0a7759..0869a4b6e7c 100644
--- a/sbin/fsck_ffs/fsck.h
+++ b/sbin/fsck_ffs/fsck.h
@@ -46,11 +46,6 @@
#define MAXBUFSPACE 40*1024 /* maximum space to allocate to buffers */
#define INOBUFSIZE 56*1024 /* size of buffer to read inodes in pass1 */
-union dinode {
- struct ufs1_dinode dp1;
- struct ufs2_dinode dp2;
-};
-
#define DIP(dp, field) \
((sblock.fs_magic == FS_UFS1_MAGIC) ? \
(dp)->dp1.field : (dp)->dp2.field)
diff --git a/sbin/growfs/growfs.c b/sbin/growfs/growfs.c
index 17adf7dc20f..1337edc96a9 100644
--- a/sbin/growfs/growfs.c
+++ b/sbin/growfs/growfs.c
@@ -96,10 +96,6 @@ static char ablk[MAXBSIZE]; /* a block */
static struct csum *fscs; /* cylinder summary */
-union dinode {
- struct ufs1_dinode dp1;
- struct ufs2_dinode dp2;
-};
#define DIP(dp, field) \
((sblock.fs_magic == FS_UFS1_MAGIC) ? \
(uint32_t)(dp)->dp1.field : (dp)->dp2.field)
diff --git a/sbin/newfs/mkfs.c b/sbin/newfs/mkfs.c
index 321b83c8557..89db6435802 100644
--- a/sbin/newfs/mkfs.c
+++ b/sbin/newfs/mkfs.c
@@ -118,11 +118,6 @@ union cg_u {
} *cgun;
#define acg cgun->cg
-union dinode {
- struct ufs1_dinode dp1;
- struct ufs2_dinode dp2;
-};
-
int fsi, fso;
static caddr_t iobuf;
diff --git a/sbin/quotacheck/quotacheck.c b/sbin/quotacheck/quotacheck.c
index f2423511b1d..bf791121002 100644
--- a/sbin/quotacheck/quotacheck.c
+++ b/sbin/quotacheck/quotacheck.c
@@ -75,10 +75,6 @@ union {
long maxino;
-union dinode {
- struct ufs1_dinode dp1;
- struct ufs2_dinode dp2;
-};
#define DIP(dp, field) \
((sblock.fs_magic == FS_UFS1_MAGIC) ? \
(dp)->dp1.field : (dp)->dp2.field)
diff --git a/sys/ufs/ufs/dinode.h b/sys/ufs/ufs/dinode.h
index 7a2d55b45f2..bb5db0af695 100644
--- a/sys/ufs/ufs/dinode.h
+++ b/sys/ufs/ufs/dinode.h
@@ -55,8 +55,10 @@ typedef u_int32_t ufsino_t;
#define ROOTINO ((ufsino_t)2)
/*
- * A dinode contains all the meta-data associated with a UFS file.
- * This structure defines the on-disk format of a dinode. Since
+ * Each UFS filesystem version defines the on-disk format of its dinode.
+ *
+ * A UFS2 dinode contains all the meta-data associated with a UFS2 file.
+ * This structure defines the on-disk format of a UFS2 dinode. Since
* this structure describes an on-disk structure, all its fields
* are defined by types with precise widths.
*/
@@ -114,6 +116,15 @@ struct ufs2_dinode {
int64_t di_spare[3]; /* 232: Reserved; currently unused */
};
+/*
+ * These structures hold or reference an on-disk dinode.
+ */
+union dinode {
+ struct ufs1_dinode dp1;
+ struct ufs2_dinode dp2;
+};
+
+
/*
* The di_db fields may be overlaid with other information for
* file types that do not have associated disk storage. Block
diff --git a/usr.sbin/makefs/ffs.c b/usr.sbin/makefs/ffs.c
index b055c62a598..b4ae55c57ea 100644
--- a/usr.sbin/makefs/ffs.c
+++ b/usr.sbin/makefs/ffs.c
@@ -95,7 +95,7 @@
#undef DIP
#define DIP(dp, field) \
((ffs_opts->version == 1) ? \
- (dp)->ffs1_din.di_##field : (dp)->ffs2_din.di_##field)
+ (dp)->dp1.di_##field : (dp)->dp2.di_##field)
/*
* Various file system defaults (cribbed from newfs(8)).
@@ -739,10 +739,10 @@ ffs_populate_dir(const char *dir, fsnode *root, fsinfo_t *fsopts)
/* build on-disk inode */
if (ffs_opts->version == 1)
- membuf = ffs_build_dinode1(&din.ffs1_din, &dirbuf, cur,
+ membuf = ffs_build_dinode1(&din.dp1, &dirbuf, cur,
root, fsopts);
else
- membuf = ffs_build_dinode2(&din.ffs2_din, &dirbuf, cur,
+ membuf = ffs_build_dinode2(&din.dp2, &dirbuf, cur,
root, fsopts);
if (membuf != NULL) {
@@ -802,11 +802,11 @@ ffs_write_file(union dinode *din, uint32_t ino, void *buf, fsinfo_t *fsopts)
in.i_number = ino;
in.i_size = DIP(din, size);
if (ffs_opts->version == 1)
- memcpy(&in.i_din.ffs1_din, &din->ffs1_din,
- sizeof(in.i_din.ffs1_din));
+ memcpy(&in.i_din.dp1, &din->dp1,
+ sizeof(in.i_din.dp1));
else
- memcpy(&in.i_din.ffs2_din, &din->ffs2_din,
- sizeof(in.i_din.ffs2_din));
+ memcpy(&in.i_din.dp2, &din->dp2,
+ sizeof(in.i_din.dp2));
if (DIP(din, size) == 0)
goto write_inode_and_leave; /* mmm, cheating */
@@ -992,9 +992,9 @@ ffs_write_inode(union dinode *dp, uint32_t ino, const fsinfo_t *fsopts)
d = fsbtodb(fs, ino_to_fsba(fs, ino));
ffs_rdfs(d, fs->fs_bsize, buf, fsopts);
if (ffs_opts->version == 1)
- dp1[ino_to_fsbo(fs, ino)] = dp->ffs1_din;
+ dp1[ino_to_fsbo(fs, ino)] = dp->dp1;
else
- dp2[ino_to_fsbo(fs, ino)] = dp->ffs2_din;
+ dp2[ino_to_fsbo(fs, ino)] = dp->dp2;
ffs_wtfs(d, fs->fs_bsize, buf, fsopts);
free(buf);
}
diff --git a/usr.sbin/makefs/ffs/ufs_inode.h b/usr.sbin/makefs/ffs/ufs_inode.h
index 1247ca5cbbb..4f72c864ee3 100644
--- a/usr.sbin/makefs/ffs/ufs_inode.h
+++ b/usr.sbin/makefs/ffs/ufs_inode.h
@@ -38,10 +38,6 @@
* @(#)inode.h 8.9 (Berkeley) 5/14/95
*/
-union dinode {
- struct ufs1_dinode ffs1_din;
- struct ufs2_dinode ffs2_din;
-};
struct inode {
ino_t i_number; /* The identity of the inode. */
@@ -51,45 +47,45 @@ struct inode {
uint64_t i_size;
};
-#define i_ffs1_atime i_din.ffs1_din.di_atime
-#define i_ffs1_atimensec i_din.ffs1_din.di_atimensec
-#define i_ffs1_blocks i_din.ffs1_din.di_blocks
-#define i_ffs1_ctime i_din.ffs1_din.di_ctime
-#define i_ffs1_ctimensec i_din.ffs1_din.di_ctimensec
-#define i_ffs1_db i_din.ffs1_din.di_db
-#define i_ffs1_flags i_din.ffs1_din.di_flags
-#define i_ffs1_gen i_din.ffs1_din.di_gen
-#define i_ffs11_gid i_din.ffs1_din.di_gid
-#define i_ffs1_ib i_din.ffs1_din.di_ib
-#define i_ffs1_mode i_din.ffs1_din.di_mode
-#define i_ffs1_mtime i_din.ffs1_din.di_mtime
-#define i_ffs1_mtimensec i_din.ffs1_din.di_mtimensec
-#define i_ffs1_nlink i_din.ffs1_din.di_nlink
-#define i_ffs1_rdev i_din.ffs1_din.di_rdev
-#define i_ffs1_shortlink i_din.ffs1_din.db
-#define i_ffs1_size i_din.ffs1_din.di_size
-#define i_ffs1_uid i_din.ffs1_din.di_uid
+#define i_ffs1_atime i_din.dp1.di_atime
+#define i_ffs1_atimensec i_din.dp1.di_atimensec
+#define i_ffs1_blocks i_din.dp1.di_blocks
+#define i_ffs1_ctime i_din.dp1.di_ctime
+#define i_ffs1_ctimensec i_din.dp1.di_ctimensec
+#define i_ffs1_db i_din.dp1.di_db
+#define i_ffs1_flags i_din.dp1.di_flags
+#define i_ffs1_gen i_din.dp1.di_gen
+#define i_ffs11_gid i_din.dp1.di_gid
+#define i_ffs1_ib i_din.dp1.di_ib
+#define i_ffs1_mode i_din.dp1.di_mode
+#define i_ffs1_mtime i_din.dp1.di_mtime
+#define i_ffs1_mtimensec i_din.dp1.di_mtimensec
+#define i_ffs1_nlink i_din.dp1.di_nlink
+#define i_ffs1_rdev i_din.dp1.di_rdev
+#define i_ffs1_shortlink i_din.dp1.db
+#define i_ffs1_size i_din.dp1.di_size
+#define i_ffs1_uid i_din.dp1.di_uid
-#define i_ffs2_atime i_din.ffs2_din.di_atime
-#define i_ffs2_atimensec i_din.ffs2_din.di_atimensec
-#define i_ffs2_blocks i_din.ffs2_din.di_blocks
-#define i_ffs2_ctime i_din.ffs2_din.di_ctime
-#define i_ffs2_ctimensec i_din.ffs2_din.di_ctimensec
-#define i_ffs2_birthtime i_din.ffs2_din.di_birthtime
-#define i_ffs2_birthnsec i_din.ffs2_din.di_birthnsec
-#define i_ffs2_db i_din.ffs2_din.di_db
-#define i_ffs2_flags i_din.ffs2_din.di_flags
-#define i_ffs2_gen i_din.ffs2_din.di_gen
-#define i_ffs21_gid i_din.ffs2_din.di_gid
-#define i_ffs2_ib i_din.ffs2_din.di_ib
-#define i_ffs2_mode i_din.ffs2_din.di_mode
-#define i_ffs2_mtime i_din.ffs2_din.di_mtime
-#define i_ffs2_mtimensec i_din.ffs2_din.di_mtimensec
-#define i_ffs2_nlink i_din.ffs2_din.di_nlink
-#define i_ffs2_rdev i_din.ffs2_din.di_rdev
-#define i_ffs2_shortlink i_din.ffs2_din.db
-#define i_ffs2_size i_din.ffs2_din.di_size
-#define i_ffs2_uid i_din.ffs2_din.di_uid
+#define i_ffs2_atime i_din.dp2.di_atime
+#define i_ffs2_atimensec i_din.dp2.di_atimensec
+#define i_ffs2_blocks i_din.dp2.di_blocks
+#define i_ffs2_ctime i_din.dp2.di_ctime
+#define i_ffs2_ctimensec i_din.dp2.di_ctimensec
+#define i_ffs2_birthtime i_din.dp2.di_birthtime
+#define i_ffs2_birthnsec i_din.dp2.di_birthnsec
+#define i_ffs2_db i_din.dp2.di_db
+#define i_ffs2_flags i_din.dp2.di_flags
+#define i_ffs2_gen i_din.dp2.di_gen
+#define i_ffs21_gid i_din.dp2.di_gid
+#define i_ffs2_ib i_din.dp2.di_ib
+#define i_ffs2_mode i_din.dp2.di_mode
+#define i_ffs2_mtime i_din.dp2.di_mtime
+#define i_ffs2_mtimensec i_din.dp2.di_mtimensec
+#define i_ffs2_nlink i_din.dp2.di_nlink
+#define i_ffs2_rdev i_din.dp2.di_rdev
+#define i_ffs2_shortlink i_din.dp2.db
+#define i_ffs2_size i_din.dp2.di_size
+#define i_ffs2_uid i_din.dp2.di_uid
#undef DIP
#define DIP(ip, field) \
diff --git a/usr.sbin/quot/quot.c b/usr.sbin/quot/quot.c
index 16f5949f836..61c58b1cd19 100644
--- a/usr.sbin/quot/quot.c
+++ b/usr.sbin/quot/quot.c
@@ -65,10 +65,6 @@ static int headerlen;
sizeof(struct ufs1_dinode) : \
sizeof(struct ufs2_dinode)) * INOCNT(fs))
-union dinode {
- struct ufs1_dinode dp1;
- struct ufs2_dinode dp2;
-};
#define DIP(fs, dp, field) \
(((fs)->fs_magic == FS_UFS1_MAGIC) ? \
(dp)->dp1.field : (dp)->dp2.field)
Standardize the definition of a UFS dinode