Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Part two of dinodes; use the same union everywhere.
details: https://anonhg.NetBSD.org/src/rev/ff68e08005e0
branches: trunk
changeset: 339992:ff68e08005e0
user: dholland <dholland%NetBSD.org@localhost>
date: Wed Aug 19 20:33:29 2015 +0000
description:
Part two of dinodes; use the same union everywhere.
(previously the ufs-derived code had things set up slightly different)
Remove a bunch of associated mess.
diffstat:
sbin/fsck_lfs/inode.c | 8 +--
sbin/fsck_lfs/lfs.c | 13 +----
sbin/fsck_lfs/lfs_user.h | 5 +-
sbin/fsck_lfs/pass6.c | 9 +---
sbin/fsck_lfs/segwrite.c | 17 +------
sbin/fsck_lfs/vnode.c | 4 +-
sbin/newfs_lfs/make_lfs.c | 20 ++++-----
sys/ufs/lfs/lfs_accessors.h | 19 ++++++++-
sys/ufs/lfs/lfs_inode.c | 9 +--
sys/ufs/lfs/lfs_inode.h | 93 +++++++++++++++++++++-----------------------
sys/ufs/lfs/lfs_rfw.c | 86 ++++++++++++++++++++++++++++-------------
sys/ufs/lfs/lfs_segment.c | 18 ++------
sys/ufs/lfs/lfs_vfsops.c | 33 ++++-----------
sys/ufs/lfs/lfs_vnops.c | 9 +--
14 files changed, 170 insertions(+), 173 deletions(-)
diffs (truncated from 702 to 300 lines):
diff -r b6aed7d9d903 -r ff68e08005e0 sbin/fsck_lfs/inode.c
--- a/sbin/fsck_lfs/inode.c Wed Aug 19 20:15:20 2015 +0000
+++ b/sbin/fsck_lfs/inode.c Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: inode.c,v 1.59 2015/08/12 18:28:00 dholland Exp $ */
+/* $NetBSD: inode.c,v 1.60 2015/08/19 20:33:29 dholland Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -119,8 +119,7 @@
seg_table[segno].su_nbytes += DINOSIZE(fs);
brelse(bp, 0);
}
- // XXX bogus cast
- return (union lfs_dinode *)(VTOI(vp)->i_din.ffs1_din);
+ return VTOI(vp)->i_din;
}
/*
@@ -621,8 +620,7 @@
vp = lfs_valloc(fs, ino);
if (vp == NULL)
return (0);
- // XXX bogus cast
- dp = (union lfs_dinode *)(VTOI(vp)->i_din.ffs1_din);
+ dp = VTOI(vp)->i_din;
bp = getblk(vp, 0, lfs_sb_getfsize(fs));
VOP_BWRITE(bp);
lfs_dino_setmode(fs, dp, type);
diff -r b6aed7d9d903 -r ff68e08005e0 sbin/fsck_lfs/lfs.c
--- a/sbin/fsck_lfs/lfs.c Wed Aug 19 20:15:20 2015 +0000
+++ b/sbin/fsck_lfs/lfs.c Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs.c,v 1.56 2015/08/12 18:28:00 dholland Exp $ */
+/* $NetBSD: lfs.c,v 1.57 2015/08/19 20:33:29 dholland Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -356,9 +356,7 @@
ip = ecalloc(1, sizeof(*ip));
- dip = ecalloc(1, sizeof(*dip));
- // XXX bogus cast
- ip->i_din.ffs1_din = (struct lfs32_dinode *)dip;
+ ip->i_din = dip = ecalloc(1, sizeof(*dip));
/* Initialize the inode -- from lfs_vcreate. */
ip->inode_ext.lfs = ecalloc(1, sizeof(*ip->inode_ext.lfs));
@@ -381,12 +379,7 @@
free(vp);
return NULL;
}
- // XXX this should go away
- if (fs->lfs_is64) {
- memcpy(ip->i_din.ffs2_din, &dip->u_64, sizeof(dip->u_64));
- } else {
- memcpy(ip->i_din.ffs1_din, &dip->u_32, sizeof(dip->u_32));
- }
+ lfs_copy_dinode(fs, ip->i_din, dip);
brelse(bp, 0);
}
ip->i_number = ino;
diff -r b6aed7d9d903 -r ff68e08005e0 sbin/fsck_lfs/lfs_user.h
--- a/sbin/fsck_lfs/lfs_user.h Wed Aug 19 20:15:20 2015 +0000
+++ b/sbin/fsck_lfs/lfs_user.h Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_user.h,v 1.10 2015/08/12 18:28:00 dholland Exp $ */
+/* $NetBSD: lfs_user.h,v 1.11 2015/08/19 20:33:29 dholland Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -72,8 +72,7 @@
/* Convert between inode pointers and vnode pointers. */
#define VTOI(vp) ((struct inode *)(vp)->v_data)
-// XXX bogus cast
-#define VTOD(vp) ((union lfs_dinode *)(VTOI(vp)->i_din.ffs1_din))
+#define VTOD(vp) (VTOI(vp)->i_din)
#define sbdirty() ++fsdirty
diff -r b6aed7d9d903 -r ff68e08005e0 sbin/fsck_lfs/pass6.c
--- a/sbin/fsck_lfs/pass6.c Wed Aug 19 20:15:20 2015 +0000
+++ b/sbin/fsck_lfs/pass6.c Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pass6.c,v 1.42 2015/08/12 18:28:00 dholland Exp $ */
+/* $NetBSD: pass6.c,v 1.43 2015/08/19 20:33:29 dholland Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -448,12 +448,7 @@
/* Copy over preexisting in-core inode, if any */
vp = vget(fs, thisino);
- /* XXX this is lame */
- if (fs->lfs_is64) {
- memcpy(VTOI(vp)->i_din.ffs2_din, &dp->u_64, sizeof(dp->u_64));
- } else {
- memcpy(VTOI(vp)->i_din.ffs1_din, &dp->u_32, sizeof(dp->u_32));
- }
+ lfs_copy_dinode(fs, VTOI(vp)->i_din, dp);
/* Finally account the inode itself */
sn = lfs_dtosn(fs, odaddr);
diff -r b6aed7d9d903 -r ff68e08005e0 sbin/fsck_lfs/segwrite.c
--- a/sbin/fsck_lfs/segwrite.c Wed Aug 19 20:15:20 2015 +0000
+++ b/sbin/fsck_lfs/segwrite.c Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: segwrite.c,v 1.41 2015/08/12 18:28:00 dholland Exp $ */
+/* $NetBSD: segwrite.c,v 1.42 2015/08/19 20:33:29 dholland Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -291,6 +291,7 @@
sp->sum_bytes_left -= sizeof(ulfs_daddr_t);
ndx = lfs_sb_getsumsize(fs) / sizeof(ulfs_daddr_t) -
sp->ninodes / LFS_INOPB(fs) - 1;
+ /* XXX ondisk32 */
((ulfs_daddr_t *) (sp->segsum))[ndx] = daddr;
}
/* Update the inode times and copy the inode onto the inode page. */
@@ -309,23 +310,13 @@
* already been gathered.
*/
if (ip->i_number == LFS_IFILE_INUM && sp->idp) {
- // XXX weak
- if (fs->lfs_is64) {
- sp->idp->u_64 = *ip->i_din.ffs2_din;
- } else {
- sp->idp->u_32 = *ip->i_din.ffs1_din;
- }
+ lfs_copy_dinode(fs, sp->idp, ip->i_din);
ip->i_lfs_osize = ip->i_ffs1_size;
return 0;
}
bp = sp->ibp;
cdp = DINO_IN_BLOCK(fs, bp->b_data, sp->ninodes % LFS_INOPB(fs));
- // XXX weak
- if (fs->lfs_is64) {
- cdp->u_64 = *ip->i_din.ffs2_din;
- } else {
- cdp->u_32 = *ip->i_din.ffs1_din;
- }
+ lfs_copy_dinode(fs, cdp, ip->i_din);
/* If all blocks are goig to disk, update the "size on disk" */
ip->i_lfs_osize = ip->i_ffs1_size;
diff -r b6aed7d9d903 -r ff68e08005e0 sbin/fsck_lfs/vnode.c
--- a/sbin/fsck_lfs/vnode.c Wed Aug 19 20:15:20 2015 +0000
+++ b/sbin/fsck_lfs/vnode.c Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: vnode.c,v 1.14 2013/06/08 02:16:03 dholland Exp $ */
+/* $NetBSD: vnode.c,v 1.15 2015/08/19 20:33:29 dholland Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -141,7 +141,7 @@
buf_destroy(bp);
}
free(VTOI(tossvp)->inode_ext.lfs);
- free(VTOI(tossvp)->i_din.ffs1_din);
+ free(VTOI(tossvp)->i_din);
memset(VTOI(tossvp), 0, sizeof(struct inode));
free(tossvp->v_data);
memset(tossvp, 0, sizeof(*tossvp));
diff -r b6aed7d9d903 -r ff68e08005e0 sbin/newfs_lfs/make_lfs.c
--- a/sbin/newfs_lfs/make_lfs.c Wed Aug 19 20:15:20 2015 +0000
+++ b/sbin/newfs_lfs/make_lfs.c Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: make_lfs.c,v 1.43 2015/08/12 18:28:01 dholland Exp $ */
+/* $NetBSD: make_lfs.c,v 1.44 2015/08/19 20:33:29 dholland Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
#if 0
static char sccsid[] = "@(#)lfs.c 8.5 (Berkeley) 5/24/95";
#else
-__RCSID("$NetBSD: make_lfs.c,v 1.43 2015/08/12 18:28:01 dholland Exp $");
+__RCSID("$NetBSD: make_lfs.c,v 1.44 2015/08/19 20:33:29 dholland Exp $");
#endif
#endif /* not lint */
@@ -700,18 +700,17 @@
/*
* Initialize the Ifile inode. Do this before we do anything
* with the Ifile or segment tables.
+ *
+ * XXX: is there some reason this allocates a new dinode? we
+ * already have an empty one generated by vget.
*/
dip = malloc(sizeof(*dip));
if (dip == NULL)
err(1, NULL);
- // XXX lame
- if (fs->lfs_is64) {
- VTOI(fs->lfs_ivnode)->i_din.ffs2_din = &dip->u_64;
- } else {
- VTOI(fs->lfs_ivnode)->i_din.ffs1_din = &dip->u_32;
- }
+ memset(dip, 0, sizeof(*dip));
+
+ VTOI(fs->lfs_ivnode)->i_din = dip;
- memset(dip, 0, sizeof(*dip));
lfs_dino_setmode(fs, dip, LFS_IFREG | 0600);
lfs_dino_setflags(fs, dip, SF_IMMUTABLE);
make_dinode(LFS_IFILE_INUM, dip,
@@ -775,8 +774,7 @@
/* Initialize root directory */
vp = lfs_raw_vget(fs, ULFS_ROOTINO, devfd, 0x0);
- // XXX bogus cast
- dip = (union lfs_dinode *)VTOI(vp)->i_din.ffs1_din;
+ dip = VTOI(vp)->i_din;
make_dinode(ULFS_ROOTINO, dip, howmany(LFS_DIRBLKSIZ, lfs_sb_getfsize(fs)), fs);
lfs_dino_setmode(fs, dip, LFS_IFDIR | UMASK);
VTOI(vp)->i_lfs_osize = LFS_DIRBLKSIZ;
diff -r b6aed7d9d903 -r ff68e08005e0 sys/ufs/lfs/lfs_accessors.h
--- a/sys/ufs/lfs/lfs_accessors.h Wed Aug 19 20:15:20 2015 +0000
+++ b/sys/ufs/lfs/lfs_accessors.h Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_accessors.h,v 1.13 2015/08/12 18:28:01 dholland Exp $ */
+/* $NetBSD: lfs_accessors.h,v 1.14 2015/08/19 20:33:29 dholland Exp $ */
/* from NetBSD: lfs.h,v 1.165 2015/07/24 06:59:32 dholland Exp */
/* from NetBSD: dinode.h,v 1.22 2013/01/22 09:39:18 dholland Exp */
@@ -179,6 +179,23 @@
#define DINO_IN_BLOCK(fs, base, ix) \
((union lfs_dinode *)((char *)(base) + DINOSIZE(fs) * (ix)))
+static __unused inline void
+lfs_copy_dinode(STRUCT_LFS *fs,
+ union lfs_dinode *dst, const union lfs_dinode *src)
+{
+ /*
+ * We can do structure assignment of the structs, but not of
+ * the whole union, as the union is the size of the (larger)
+ * 64-bit struct and on a 32-bit fs the upper half of it might
+ * be off the end of a buffer or otherwise invalid.
+ */
+ if (fs->lfs_is64) {
+ dst->u_64 = src->u_64;
+ } else {
+ dst->u_32 = src->u_32;
+ }
+}
+
#define LFS_DEF_DINO_ACCESSOR(type, type32, field) \
static __unused inline type \
lfs_dino_get##field(STRUCT_LFS *fs, union lfs_dinode *dip) \
diff -r b6aed7d9d903 -r ff68e08005e0 sys/ufs/lfs/lfs_inode.c
--- a/sys/ufs/lfs/lfs_inode.c Wed Aug 19 20:15:20 2015 +0000
+++ b/sys/ufs/lfs/lfs_inode.c Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_inode.c,v 1.144 2015/08/12 18:28:01 dholland Exp $ */
+/* $NetBSD: lfs_inode.c,v 1.145 2015/08/19 20:33:29 dholland Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_inode.c,v 1.144 2015/08/12 18:28:01 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_inode.c,v 1.145 2015/08/19 20:33:29 dholland Exp $");
#if defined(_KERNEL_OPT)
#include "opt_quota.h"
@@ -100,7 +100,6 @@
union lfs_dinode *
lfs_ifind(struct lfs *fs, ino_t ino, struct buf *bp)
{
- char *base = bp->b_data;
union lfs_dinode *ldip;
unsigned num, i;
@@ -112,12 +111,12 @@
*/
num = LFS_INOPB(fs);
for (i = num; i-- > 0; ) {
- ldip = (union lfs_dinode *)(base + i * DINOSIZE(fs));
+ ldip = DINO_IN_BLOCK(fs, bp->b_data, i);
if (lfs_dino_getinumber(fs, ldip) == ino)
return (ldip);
}
- printf("searched %u entries\n", num);
+ printf("searched %u entries for %ju\n", num, (uintmax_t)ino);
printf("offset is 0x%jx (seg %d)\n", (uintmax_t)lfs_sb_getoffset(fs),
lfs_dtosn(fs, lfs_sb_getoffset(fs)));
printf("block is 0x%jx (seg %d)\n",
diff -r b6aed7d9d903 -r ff68e08005e0 sys/ufs/lfs/lfs_inode.h
--- a/sys/ufs/lfs/lfs_inode.h Wed Aug 19 20:15:20 2015 +0000
+++ b/sys/ufs/lfs/lfs_inode.h Wed Aug 19 20:33:29 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_inode.h,v 1.9 2015/08/12 18:28:01 dholland Exp $ */
+/* $NetBSD: lfs_inode.h,v 1.10 2015/08/19 20:33:29 dholland Exp $ */
/* from NetBSD: ulfs_inode.h,v 1.5 2013/06/06 00:51:50 dholland Exp */
Home |
Main Index |
Thread Index |
Old Index