Download raw body.
delete broken support for antique FFS images
On Mon, 1 Jan 2024, Philip Guenther wrote:
> The original 4.2(?)BSD FFS always put the 'value' of a symlink in a data
> block. It was realized that 99+% of symlinks could be fit inside the
> symlink's inode if you reusing the area where the direct and indirect
> block addresses would normally be stored, so Kirk taught ffs to do that.
> We had partial support for filesystems that used that old format, but I
> unintentionally broke it in the 64bit time_t work in early 2014, such that
> since OpenBSD 5.5, we haven't handled fs with that old layout, at least on
> little-endian systems.
>
> So, since no one actually putting such filesystems to use noticed, it's
> clearly time to completely disable support for them.
It was suggested off-list that since I'm already deleting the OFSFMT(), I
could eliminate the first arg to DIRSIZ() too.
So, this is the bigger diff:
* drop that DIRSIZ() argument as well as the OLDDIRFMT and NEWDIRFMT
macros
* fs_maxsymlinklen is never zero, so delete tests of that in userland
code
* FS_44INODEFMT is always #defined; delete #ifdef tests of it
* in newfs, reject passing the -O option with a version of 0 and remove
support for that.
Regarding that last one: the only actual uses of "newfs -O 0" I could find
in cvs history were in
sys/arch/i386/stand/Makefile
distrib/vax/common/Makefile.inc
The use in the first was removed in 2014; the latter went away in 2016
when vax support was retired.
This version has passed a full make build and make release on amd64.
Philip Guenther
Index: sys/ufs/ufs/dir.h
===================================================================
RCS file: /data/src/openbsd/src/sys/ufs/ufs/dir.h,v
diff -u -p -r1.12 dir.h
--- sys/ufs/ufs/dir.h 4 May 2019 15:38:12 -0000 1.12
+++ sys/ufs/ufs/dir.h 7 Jan 2024 07:01:15 -0000
@@ -61,9 +61,9 @@
* with null bytes. All names are guaranteed null terminated.
* The maximum length of a name in a directory is MAXNAMLEN.
*
- * The macro DIRSIZ(fmt, dp) gives the amount of space required to represent
+ * The macro DIRSIZ(dp) gives the amount of space required to represent
* a directory entry. Free space in a directory is represented by
- * entries which have dp->d_reclen > DIRSIZ(fmt, dp). All DIRBLKSIZ bytes
+ * entries which have dp->d_reclen > DIRSIZ(dp). All DIRBLKSIZ bytes
* in a directory block are claimed by the directory entries. This
* usually results in the last entry in a directory having a large
* dp->d_reclen. When entries are deleted from a directory, the
@@ -112,17 +112,8 @@ struct direct {
#define DIRECTSIZ(namlen) \
((offsetof(struct direct, d_name) + \
((namlen)+1)*sizeof(((struct direct *)0)->d_name[0]) + 3) & ~3)
-#if (BYTE_ORDER == LITTLE_ENDIAN)
-#define DIRSIZ(oldfmt, dp) \
- ((oldfmt) ? \
- ((sizeof(struct direct) - (MAXNAMLEN+1)) + (((dp)->d_type+1 + 3) &~ 3)) : \
- ((sizeof(struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)))
-#else
-#define DIRSIZ(oldfmt, dp) \
+#define DIRSIZ(dp) \
((sizeof(struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
-#endif
-#define OLDDIRFMT 1
-#define NEWDIRFMT 0
/*
* Template for manipulating directories. Should use struct direct's,
@@ -138,20 +129,6 @@ struct dirtemplate {
int16_t dotdot_reclen;
u_int8_t dotdot_type;
u_int8_t dotdot_namlen;
- char dotdot_name[4]; /* ditto */
-};
-
-/*
- * This is the old format of directories, sanz type element.
- */
-struct odirtemplate {
- u_int32_t dot_ino;
- int16_t dot_reclen;
- u_int16_t dot_namlen;
- char dot_name[4]; /* must be multiple of 4 */
- u_int32_t dotdot_ino;
- int16_t dotdot_reclen;
- u_int16_t dotdot_namlen;
char dotdot_name[4]; /* ditto */
};
#endif /* !_DIR_H_ */
Index: sys/ufs/ufs/ufs_dirhash.c
===================================================================
RCS file: /data/src/openbsd/src/sys/ufs/ufs/ufs_dirhash.c,v
diff -u -p -r1.42 ufs_dirhash.c
--- sys/ufs/ufs/ufs_dirhash.c 15 Mar 2019 05:42:38 -0000 1.42
+++ sys/ufs/ufs/ufs_dirhash.c 7 Jan 2024 07:00:55 -0000
@@ -50,7 +50,6 @@
#define WRAPINCR(val, limit) (((val) + 1 == (limit)) ? 0 : ((val) + 1))
#define WRAPDECR(val, limit) (((val) == 0) ? ((limit) - 1) : ((val) - 1))
-#define OFSFMT(ip) ((ip)->i_ump->um_maxsymlinklen == 0)
#define BLKFREE2IDX(n) ((n) > DH_NFSTATS ? DH_NFSTATS : (n))
int ufs_mindirhashsize;
@@ -112,7 +111,7 @@ ufsdirhash_build(struct inode *ip)
/* Check if we can/should use dirhash. */
if (ip->i_dirhash == NULL) {
- if (DIP(ip, size) < ufs_mindirhashsize || OFSFMT(ip))
+ if (DIP(ip, size) < ufs_mindirhashsize)
return (-1);
} else {
/* Hash exists, but sysctls could have changed. */
@@ -224,7 +223,7 @@ ufsdirhash_build(struct inode *ip)
slot = WRAPINCR(slot, dh->dh_hlen);
dh->dh_hused++;
DH_ENTRY(dh, slot) = pos;
- ufsdirhash_adjfree(dh, pos, -DIRSIZ(0, ep));
+ ufsdirhash_adjfree(dh, pos, -DIRSIZ(ep));
}
pos += ep->d_reclen;
}
@@ -430,7 +429,7 @@ restart:
/* Check for sequential access, and update offset. */
if (dh->dh_seqopt == 0 && dh->dh_seqoff == offset)
dh->dh_seqopt = 1;
- dh->dh_seqoff = offset + DIRSIZ(0, dp);
+ dh->dh_seqoff = offset + DIRSIZ(dp);
*bpp = bp;
*offp = offset;
@@ -519,7 +518,7 @@ ufsdirhash_findfree(struct inode *ip, in
brelse(bp);
return (-1);
}
- if (dp->d_ino == 0 || dp->d_reclen > DIRSIZ(0, dp))
+ if (dp->d_ino == 0 || dp->d_reclen > DIRSIZ(dp))
break;
i += dp->d_reclen;
dp = (struct direct *)((char *)dp + dp->d_reclen);
@@ -535,7 +534,7 @@ ufsdirhash_findfree(struct inode *ip, in
while (i < DIRBLKSIZ && freebytes < slotneeded) {
freebytes += dp->d_reclen;
if (dp->d_ino != 0)
- freebytes -= DIRSIZ(0, dp);
+ freebytes -= DIRSIZ(dp);
if (dp->d_reclen == 0) {
brelse(bp);
return (-1);
@@ -627,7 +626,7 @@ ufsdirhash_add(struct inode *ip, struct
DH_ENTRY(dh, slot) = offset;
/* Update the per-block summary info. */
- ufsdirhash_adjfree(dh, offset, -DIRSIZ(0, dirp));
+ ufsdirhash_adjfree(dh, offset, -DIRSIZ(dirp));
DIRHASH_UNLOCK(dh);
}
@@ -660,7 +659,7 @@ ufsdirhash_remove(struct inode *ip, stru
ufsdirhash_delslot(dh, slot);
/* Update the per-block summary info. */
- ufsdirhash_adjfree(dh, offset, DIRSIZ(0, dirp));
+ ufsdirhash_adjfree(dh, offset, DIRSIZ(dirp));
DIRHASH_UNLOCK(dh);
}
@@ -835,7 +834,7 @@ ufsdirhash_checkblock(struct inode *ip,
/* Check that the entry exists (will panic if it doesn't). */
ufsdirhash_findslot(dh, dp->d_name, dp->d_namlen, offset + i);
- nfree += dp->d_reclen - DIRSIZ(0, dp);
+ nfree += dp->d_reclen - DIRSIZ(dp);
}
if (i != DIRBLKSIZ)
panic("ufsdirhash_checkblock: bad dir end");
Index: sys/ufs/ufs/ufs_lookup.c
===================================================================
RCS file: /data/src/openbsd/src/sys/ufs/ufs/ufs_lookup.c,v
diff -u -p -r1.59 ufs_lookup.c
--- sys/ufs/ufs/ufs_lookup.c 11 Jan 2022 03:13:59 -0000 1.59
+++ sys/ufs/ufs/ufs_lookup.c 7 Jan 2024 07:01:34 -0000
@@ -64,8 +64,6 @@ int dirchk = 1;
int dirchk = 0;
#endif
-#define OFSFMT(ip) ((ip)->i_ump->um_maxsymlinklen == 0)
-
/*
* Convert a component of a pathname into a pointer to a locked inode.
* This is a very central and rather complicated routine.
@@ -299,7 +297,7 @@ searchloop:
int size = ep->d_reclen;
if (ep->d_ino != 0)
- size -= DIRSIZ(OFSFMT(dp), ep);
+ size -= DIRSIZ(ep);
if (size > 0) {
if (size >= slotneeded) {
slotstatus = FOUND;
@@ -322,14 +320,7 @@ searchloop:
* Check for a name match.
*/
if (ep->d_ino) {
-# if (BYTE_ORDER == LITTLE_ENDIAN)
- if (OFSFMT(dp))
- namlen = ep->d_type;
- else
- namlen = ep->d_namlen;
-# else
- namlen = ep->d_namlen;
-# endif
+ namlen = ep->d_namlen;
if (namlen == cnp->cn_namelen &&
!memcmp(cnp->cn_nameptr, ep->d_name, namlen)) {
#ifdef UFS_DIRHASH
@@ -440,9 +431,9 @@ found:
* Check that directory length properly reflects presence
* of this entry.
*/
- if (dp->i_offset + DIRSIZ(OFSFMT(dp), ep) > DIP(dp, size)) {
+ if (dp->i_offset + DIRSIZ(ep) > DIP(dp, size)) {
ufs_dirbad(dp, dp->i_offset, "i_ffs_size too small");
- DIP_ASSIGN(dp, size, dp->i_offset + DIRSIZ(OFSFMT(dp), ep));
+ DIP_ASSIGN(dp, size, dp->i_offset + DIRSIZ(ep));
dp->i_flag |= IN_CHANGE | IN_UPDATE;
}
brelse(bp);
@@ -626,17 +617,10 @@ ufs_dirbadentry(struct vnode *vdp, struc
dp = VTOI(vdp);
-# if (BYTE_ORDER == LITTLE_ENDIAN)
- if (OFSFMT(dp))
- namlen = ep->d_type;
- else
- namlen = ep->d_namlen;
-# else
- namlen = ep->d_namlen;
-# endif
+ namlen = ep->d_namlen;
if ((ep->d_reclen & 0x3) != 0 ||
ep->d_reclen > DIRBLKSIZ - (entryoffsetinblock & (DIRBLKSIZ - 1)) ||
- ep->d_reclen < DIRSIZ(OFSFMT(dp), ep) || namlen > MAXNAMLEN) {
+ ep->d_reclen < DIRSIZ(ep) || namlen > MAXNAMLEN) {
/*return (1); */
printf("First bad\n");
goto bad;
@@ -674,15 +658,7 @@ ufs_makedirentry(struct inode *ip, struc
memset(newdirp->d_name + (cnp->cn_namelen & ~(DIR_ROUNDUP-1)),
0, DIR_ROUNDUP);
memcpy(newdirp->d_name, cnp->cn_nameptr, cnp->cn_namelen);
- if (OFSFMT(ip)) {
- newdirp->d_type = 0;
-# if (BYTE_ORDER == LITTLE_ENDIAN)
- { u_char tmp = newdirp->d_namlen;
- newdirp->d_namlen = newdirp->d_type;
- newdirp->d_type = tmp; }
-# endif
- } else
- newdirp->d_type = IFTODT(DIP(ip, mode));
+ newdirp->d_type = IFTODT(DIP(ip, mode));
}
/*
@@ -712,7 +688,7 @@ ufs_direnter(struct vnode *dvp, struct v
cr = cnp->cn_cred;
p = cnp->cn_proc;
dp = VTOI(dvp);
- newentrysize = DIRSIZ(OFSFMT(dp), dirp);
+ newentrysize = DIRSIZ(dirp);
if (dp->i_count == 0) {
/*
@@ -827,7 +803,7 @@ ufs_direnter(struct vnode *dvp, struct v
* dp->i_offset + dp->i_count would yield the space.
*/
ep = (struct direct *)dirbuf;
- dsize = ep->d_ino ? DIRSIZ(OFSFMT(dp), ep) : 0;
+ dsize = ep->d_ino ? DIRSIZ(ep) : 0;
spacefree = ep->d_reclen - dsize;
for (loc = ep->d_reclen; loc < dp->i_count; ) {
nep = (struct direct *)(dirbuf + loc);
@@ -852,7 +828,7 @@ ufs_direnter(struct vnode *dvp, struct v
dsize = 0;
continue;
}
- dsize = DIRSIZ(OFSFMT(dp), nep);
+ dsize = DIRSIZ(nep);
spacefree += nep->d_reclen - dsize;
#ifdef UFS_DIRHASH
if (dp->i_dirhash != NULL)
@@ -1030,8 +1006,7 @@ ufs_dirrewrite(struct inode *dp, struct
if (error)
return (error);
ep->d_ino = newinum;
- if (!OFSFMT(dp))
- ep->d_type = newtype;
+ ep->d_type = newtype;
oip->i_effnlink--;
if (DOINGSOFTDEP(vdp)) {
softdep_change_linkcnt(oip, 0);
@@ -1087,14 +1062,7 @@ ufs_dirempty(struct inode *ip, ufsino_t
if (dp->d_ino == 0)
continue;
/* accept only "." and ".." */
-# if (BYTE_ORDER == LITTLE_ENDIAN)
- if (OFSFMT(ip))
- namlen = dp->d_type;
- else
- namlen = dp->d_namlen;
-# else
- namlen = dp->d_namlen;
-# endif
+ namlen = dp->d_namlen;
if (namlen > 2)
return (0);
if (dp->d_name[0] != '.')
@@ -1145,14 +1113,7 @@ ufs_checkpath(struct inode *source, stru
IO_NODELOCKED, cred, NULL, curproc);
if (error != 0)
break;
-# if (BYTE_ORDER == LITTLE_ENDIAN)
- if (OFSFMT(VTOI(vp)))
- namlen = dirbuf.dotdot_type;
- else
- namlen = dirbuf.dotdot_namlen;
-# else
- namlen = dirbuf.dotdot_namlen;
-# endif
+ namlen = dirbuf.dotdot_namlen;
if (namlen != 2 ||
dirbuf.dotdot_name[0] != '.' ||
dirbuf.dotdot_name[1] != '.') {
Index: sys/ufs/ufs/ufs_vnops.c
===================================================================
RCS file: /data/src/openbsd/src/sys/ufs/ufs/ufs_vnops.c,v
diff -u -p -r1.158 ufs_vnops.c
--- sys/ufs/ufs/ufs_vnops.c 8 Sep 2023 20:00:28 -0000 1.158
+++ sys/ufs/ufs/ufs_vnops.c 2 Jan 2024 03:32:02 -0000
@@ -81,14 +81,10 @@ void filt_ufsdetach(struct knote *);
/*
* A virgin directory (no blushing please).
*/
-static struct dirtemplate mastertemplate = {
+static const struct dirtemplate mastertemplate = {
0, 12, DT_DIR, 1, ".",
0, DIRBLKSIZ - 12, DT_DIR, 2, ".."
};
-static struct odirtemplate omastertemplate = {
- 0, 12, 1, ".",
- 0, DIRBLKSIZ - 12, 2, ".."
-};
/*
* Update the times in the inode
@@ -1127,7 +1123,7 @@ ufs_mkdir(void *v)
struct vnode *tvp;
struct buf *bp;
struct direct newdir;
- struct dirtemplate dirtemplate, *dtp;
+ struct dirtemplate dirtemplate;
int error, dmode, blkoff;
#ifdef DIAGNOSTIC
@@ -1187,11 +1183,7 @@ ufs_mkdir(void *v)
/*
* Initialize directory with "." and ".." from static template.
*/
- if (dp->i_ump->um_maxsymlinklen > 0)
- dtp = &mastertemplate;
- else
- dtp = (struct dirtemplate *)&omastertemplate;
- dirtemplate = *dtp;
+ dirtemplate = mastertemplate;
dirtemplate.dot_ino = ip->i_number;
dirtemplate.dotdot_ino = dp->i_number;
@@ -1411,9 +1403,6 @@ ufs_readdir(void *v)
caddr_t diskbuf;
size_t count, entries;
int bufsize, readcnt, error;
-#if (BYTE_ORDER == LITTLE_ENDIAN)
- int ofmt = VTOI(ap->a_vp)->i_ump->um_maxsymlinklen == 0;
-#endif
if (uio->uio_rw != UIO_READ)
return (EINVAL);
@@ -1468,16 +1457,8 @@ ufs_readdir(void *v)
off += dp->d_reclen;
u.dn.d_off = off;
u.dn.d_fileno = dp->d_ino;
-#if (BYTE_ORDER == LITTLE_ENDIAN)
- if (ofmt) {
- u.dn.d_type = dp->d_namlen;
- u.dn.d_namlen = dp->d_type;
- } else
-#endif
- {
- u.dn.d_type = dp->d_type;
- u.dn.d_namlen = dp->d_namlen;
- }
+ u.dn.d_type = dp->d_type;
+ u.dn.d_namlen = dp->d_namlen;
memcpy(u.dn.d_name, dp->d_name, u.dn.d_namlen);
memset(u.dn.d_name + u.dn.d_namlen, 0, u.dn.d_reclen
- u.dn.d_namlen - offsetof(struct dirent, d_name));
@@ -1513,10 +1494,8 @@ ufs_readlink(void *v)
u_int64_t isize;
isize = DIP(ip, size);
- if (isize < ip->i_ump->um_maxsymlinklen ||
- (ip->i_ump->um_maxsymlinklen == 0 && DIP(ip, blocks) == 0)) {
+ if (isize < ip->i_ump->um_maxsymlinklen)
return (uiomove((char *)SHORTLINK(ip), isize, ap->a_uio));
- }
return (VOP_READ(vp, ap->a_uio, 0, ap->a_cred));
}
Index: sys/ufs/ffs/ffs_inode.c
===================================================================
RCS file: /data/src/openbsd/src/sys/ufs/ffs/ffs_inode.c,v
diff -u -p -r1.81 ffs_inode.c
--- sys/ufs/ffs/ffs_inode.c 12 Dec 2021 09:14:59 -0000 1.81
+++ sys/ufs/ffs/ffs_inode.c 2 Jan 2024 03:26:49 -0000
@@ -152,9 +152,7 @@ ffs_truncate(struct inode *oip, off_t le
return (0);
if (ovp->v_type == VLNK &&
- (DIP(oip, size) < oip->i_ump->um_maxsymlinklen ||
- (oip->i_ump->um_maxsymlinklen == 0 &&
- oip->i_din1->di_blocks == 0))) {
+ DIP(oip, size) < oip->i_ump->um_maxsymlinklen) {
#ifdef DIAGNOSTIC
if (length != 0)
panic("ffs_truncate: partial truncate of symlink");
Index: sys/ufs/ffs/ffs_vfsops.c
===================================================================
RCS file: /data/src/openbsd/src/sys/ufs/ffs/ffs_vfsops.c,v
diff -u -p -r1.195 ffs_vfsops.c
--- sys/ufs/ffs/ffs_vfsops.c 5 Jul 2023 15:13:28 -0000 1.195
+++ sys/ufs/ffs/ffs_vfsops.c 2 Jan 2024 03:25:04 -0000
@@ -675,8 +675,8 @@ ffs_validate(struct fs *fsp)
return (0); /* Invalid number of fragments */
if (fsp->fs_inodefmt == FS_42INODEFMT)
- fsp->fs_maxsymlinklen = 0;
- else if (fsp->fs_maxsymlinklen < 0)
+ return (0); /* Obsolete format, support broken in 2014 */
+ if (fsp->fs_maxsymlinklen <= 0)
return (0); /* Invalid max size of short symlink */
return (1); /* Super block is okay */
Index: sys/ufs/ffs/ffs_vnops.c
===================================================================
RCS file: /data/src/openbsd/src/sys/ufs/ffs/ffs_vnops.c,v
diff -u -p -r1.100 ffs_vnops.c
--- sys/ufs/ffs/ffs_vnops.c 26 Jun 2022 05:20:43 -0000 1.100
+++ sys/ufs/ffs/ffs_vnops.c 2 Jan 2024 03:28:01 -0000
@@ -202,8 +202,7 @@ ffs_read(void *v)
panic("ffs_read: mode");
if (vp->v_type == VLNK) {
- if (DIP(ip, size) < ip->i_ump->um_maxsymlinklen ||
- (ip->i_ump->um_maxsymlinklen == 0 && DIP(ip, blocks) == 0))
+ if (DIP(ip, size) < ip->i_ump->um_maxsymlinklen)
panic("ffs_read: short symlink");
} else if (vp->v_type != VREG && vp->v_type != VDIR)
panic("ffs_read: type %d", vp->v_type);
Index: sys/ufs/ext2fs/ext2fs_dir.h
===================================================================
RCS file: /data/src/openbsd/src/sys/ufs/ext2fs/ext2fs_dir.h,v
diff -u -p -r1.11 ext2fs_dir.h
--- sys/ufs/ext2fs/ext2fs_dir.h 11 Jul 2014 07:59:04 -0000 1.11
+++ sys/ufs/ext2fs/ext2fs_dir.h 7 Jan 2024 07:00:32 -0000
@@ -61,9 +61,9 @@
* with null bytes. All names are guaranteed null terminated.
* The maximum length of a name in a directory is EXT2FS_MAXNAMLEN.
*
- * The macro EXT2FS_DIRSIZ(fmt, dp) gives the amount of space required to
+ * The macro EXT2FS_DIRSIZ(dp) gives the amount of space required to
* represent a directory entry. Free space in a directory is represented by
- * entries which have dp->e2d_reclen > DIRSIZ(fmt, dp). All d2fs_bsize bytes
+ * entries which have dp->e2d_reclen > DIRSIZ(dp). All d2fs_bsize bytes
* in a directory block are claimed by the directory entries. This
* usually results in the last entry in a directory having a large
* dp->e2d_reclen. When entries are deleted from a directory, the
Index: sbin/dump/main.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/dump/main.c,v
diff -u -p -r1.64 main.c
--- sbin/dump/main.c 18 Dec 2023 13:23:52 -0000 1.64
+++ sbin/dump/main.c 3 Jan 2024 01:13:18 -0000
@@ -455,11 +455,9 @@ main(int argc, char *argv[])
tp_bshift = ffs(TP_BSIZE) - 1;
if (TP_BSIZE != (1 << tp_bshift))
quit("TP_BSIZE (%d) is not a power of 2\n", TP_BSIZE);
-#ifdef FS_44INODEFMT
if (sblock->fs_magic == FS_UFS2_MAGIC ||
sblock->fs_inodefmt >= FS_44INODEFMT)
spcl.c_flags |= DR_NEWINODEFMT;
-#endif
maxino = (ino_t)sblock->fs_ipg * sblock->fs_ncg;
mapsize = roundup(howmany(maxino, NBBY), TP_BSIZE);
usedinomap = calloc((unsigned) mapsize, sizeof(char));
Index: sbin/dump/traverse.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/dump/traverse.c,v
diff -u -p -r1.40 traverse.c
--- sbin/dump/traverse.c 8 Feb 2023 08:25:44 -0000 1.40
+++ sbin/dump/traverse.c 3 Jan 2024 01:01:40 -0000
@@ -547,13 +547,7 @@ dumpino(union dinode *dp, ino_t ino)
* Check for short symbolic link.
*/
if (DIP(dp, di_size) > 0 &&
-#ifdef FS_44INODEFMT
- (DIP(dp, di_size) < sblock->fs_maxsymlinklen ||
- (sblock->fs_maxsymlinklen == 0 &&
- DIP(dp, di_blocks) == 0))) {
-#else
- DIP(dp, di_blocks) == 0) {
-#endif
+ DIP(dp, di_size) < sblock->fs_maxsymlinklen) {
void *shortlink;
spcl.c_addr[0] = 1;
Index: sbin/fsck_ffs/dir.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/fsck_ffs/dir.c,v
diff -u -p -r1.33 dir.c
--- sbin/fsck_ffs/dir.c 8 Feb 2023 08:25:44 -0000 1.33
+++ sbin/fsck_ffs/dir.c 7 Jan 2024 06:58:55 -0000
@@ -52,10 +52,6 @@ struct dirtemplate dirhead = {
0, 12, DT_DIR, 1, ".",
0, DIRBLKSIZ - 12, DT_DIR, 2, ".."
};
-struct odirtemplate odirhead = {
- 0, 12, 1, ".",
- 0, DIRBLKSIZ - 12, 2, ".."
-};
static int expanddir(union dinode *, char *);
static void freedir(ino_t, ino_t);
@@ -210,7 +206,7 @@ dircheck(struct inodesc *idesc, struct d
return (0);
if (dp->d_ino == 0)
return (1);
- size = DIRSIZ(0, dp);
+ size = DIRSIZ(dp);
namlen = dp->d_namlen;
type = dp->d_type;
if (dp->d_reclen < size ||
@@ -292,9 +288,9 @@ mkentry(struct inodesc *idesc)
int newlen, oldlen;
newent.d_namlen = strlen(idesc->id_name);
- newlen = DIRSIZ(0, &newent);
+ newlen = DIRSIZ(&newent);
if (dirp->d_ino != 0)
- oldlen = DIRSIZ(0, dirp);
+ oldlen = DIRSIZ(dirp);
else
oldlen = 0;
if (dirp->d_reclen - oldlen < newlen)
Index: sbin/fsck_ffs/inode.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/fsck_ffs/inode.c,v
diff -u -p -r1.50 inode.c
--- sbin/fsck_ffs/inode.c 13 Jul 2020 06:52:53 -0000 1.50
+++ sbin/fsck_ffs/inode.c 3 Jan 2024 01:02:17 -0000
@@ -71,8 +71,7 @@ ckinode(union dinode *dp, struct inodesc
idesc->id_filesize = DIP(dp, di_size);
mode = DIP(dp, di_mode) & IFMT;
if (mode == IFBLK || mode == IFCHR || (mode == IFLNK &&
- (DIP(dp, di_size) < sblock.fs_maxsymlinklen ||
- (sblock.fs_maxsymlinklen == 0 && DIP(dp, di_blocks) == 0))))
+ DIP(dp, di_size) < sblock.fs_maxsymlinklen))
return (KEEPON);
if (sblock.fs_magic == FS_UFS1_MAGIC)
dino.dp1 = dp->dp1;
Index: sbin/fsck_ffs/pass1.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/fsck_ffs/pass1.c,v
diff -u -p -r1.47 pass1.c
--- sbin/fsck_ffs/pass1.c 13 Jul 2020 06:52:53 -0000 1.47
+++ sbin/fsck_ffs/pass1.c 3 Jan 2024 01:02:58 -0000
@@ -266,8 +266,7 @@ checkinode(ino_t inumber, struct inodesc
* Fake ndb value so direct/indirect block checks below
* will detect any garbage after symlink string.
*/
- if (DIP(dp, di_size) < sblock.fs_maxsymlinklen ||
- (sblock.fs_maxsymlinklen == 0 && DIP(dp, di_blocks) == 0)) {
+ if (DIP(dp, di_size) < sblock.fs_maxsymlinklen) {
if (sblock.fs_magic == FS_UFS1_MAGIC)
ndb = howmany(DIP(dp, di_size),
sizeof(int32_t));
Index: sbin/fsck_ffs/pass2.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/fsck_ffs/pass2.c,v
diff -u -p -r1.37 pass2.c
--- sbin/fsck_ffs/pass2.c 20 Jan 2015 18:22:21 -0000 1.37
+++ sbin/fsck_ffs/pass2.c 7 Jan 2024 06:58:59 -0000
@@ -283,7 +283,7 @@ pass2check(struct inodesc *idesc)
proto.d_type = DT_DIR;
proto.d_namlen = 1;
(void)strlcpy(proto.d_name, ".", sizeof proto.d_name);
- entrysize = DIRSIZ(0, &proto);
+ entrysize = DIRSIZ(&proto);
if (dirp->d_ino != 0 && strcmp(dirp->d_name, "..") != 0) {
pfatal("CANNOT FIX, FIRST ENTRY IN DIRECTORY CONTAINS %s\n",
dirp->d_name);
@@ -314,9 +314,9 @@ chk1:
proto.d_type = DT_DIR;
proto.d_namlen = 2;
(void)strlcpy(proto.d_name, "..", sizeof proto.d_name);
- entrysize = DIRSIZ(0, &proto);
+ entrysize = DIRSIZ(&proto);
if (idesc->id_entryno == 0) {
- n = DIRSIZ(0, dirp);
+ n = DIRSIZ(dirp);
if (dirp->d_reclen < n + entrysize)
goto chk2;
proto.d_reclen = dirp->d_reclen - n;
Index: sbin/fsdb/fsdb.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/fsdb/fsdb.c,v
diff -u -p -r1.35 fsdb.c
--- sbin/fsdb/fsdb.c 22 Jul 2022 09:04:44 -0000 1.35
+++ sbin/fsdb/fsdb.c 7 Jan 2024 06:59:23 -0000
@@ -601,7 +601,7 @@ chnamefunc(struct inodesc *idesc)
if (slotcount++ == desired) {
/* will name fit? */
testdir.d_namlen = strlen(idesc->id_name);
- if (DIRSIZ(NEWDIRFMT, &testdir) <= dirp->d_reclen) {
+ if (DIRSIZ(&testdir) <= dirp->d_reclen) {
dirp->d_namlen = testdir.d_namlen;
strlcpy(dirp->d_name, idesc->id_name, sizeof dirp->d_name);
return STOP|ALTERED|FOUND;
Index: sbin/newfs/mkfs.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/newfs/mkfs.c,v
diff -u -p -r1.101 mkfs.c
--- sbin/newfs/mkfs.c 20 Jun 2020 07:49:04 -0000 1.101
+++ sbin/newfs/mkfs.c 7 Jan 2024 07:11:08 -0000
@@ -279,13 +279,8 @@ mkfs(struct partition *pp, char *fsys, i
sblock.fs_sblockloc = SBLOCK_UFS1;
sblock.fs_nindir = sblock.fs_bsize / sizeof(int32_t);
sblock.fs_inopb = sblock.fs_bsize / sizeof(struct ufs1_dinode);
- if (Oflag == 0) {
- sblock.fs_maxsymlinklen = 0;
- sblock.fs_inodefmt = FS_42INODEFMT;
- } else {
- sblock.fs_maxsymlinklen = MAXSYMLINKLEN_UFS1;
- sblock.fs_inodefmt = FS_44INODEFMT;
- }
+ sblock.fs_maxsymlinklen = MAXSYMLINKLEN_UFS1;
+ sblock.fs_inodefmt = FS_44INODEFMT;
sblock.fs_cgoffset = 0;
sblock.fs_cgmask = 0xffffffff;
sblock.fs_ffs1_size = sblock.fs_size;
@@ -778,15 +773,6 @@ struct direct root_dir[] = {
{ ROOTINO, sizeof(struct direct), DT_DIR, 1, "." },
{ ROOTINO, sizeof(struct direct), DT_DIR, 2, ".." },
};
-struct odirect {
- u_int32_t d_ino;
- u_int16_t d_reclen;
- u_int16_t d_namlen;
- u_char d_name[MAXNAMLEN + 1];
-} oroot_dir[] = {
- { ROOTINO, sizeof(struct direct), 1, "." },
- { ROOTINO, sizeof(struct direct), 2, ".." },
-};
int
fsinit1(time_t utime, mode_t mfsmode, uid_t mfsuid, gid_t mfsgid)
@@ -814,11 +800,7 @@ fsinit1(time_t utime, mode_t mfsmode, ui
node.dp1.di_gid = getegid();
}
node.dp1.di_nlink = PREDEFDIR;
- if (Oflag == 0)
- node.dp1.di_size = makedir((struct direct *)oroot_dir,
- PREDEFDIR);
- else
- node.dp1.di_size = makedir(root_dir, PREDEFDIR);
+ node.dp1.di_size = makedir(root_dir, PREDEFDIR);
node.dp1.di_db[0] = alloc(sblock.fs_fsize, node.dp1.di_mode);
if (node.dp1.di_db[0] == 0)
return (1);
@@ -919,13 +901,13 @@ makedir(struct direct *protodir, int ent
spcleft = DIRBLKSIZ;
for (cp = iobuf, i = 0; i < entries - 1; i++) {
- protodir[i].d_reclen = DIRSIZ(0, &protodir[i]);
+ protodir[i].d_reclen = DIRSIZ(&protodir[i]);
memcpy(cp, &protodir[i], protodir[i].d_reclen);
cp += protodir[i].d_reclen;
spcleft -= protodir[i].d_reclen;
}
protodir[i].d_reclen = spcleft;
- memcpy(cp, &protodir[i], DIRSIZ(0, &protodir[i]));
+ memcpy(cp, &protodir[i], DIRSIZ(&protodir[i]));
return (DIRBLKSIZ);
}
Index: sbin/newfs/newfs.8
===================================================================
RCS file: /data/src/openbsd/src/sbin/newfs/newfs.8,v
diff -u -p -r1.79 newfs.8
--- sbin/newfs/newfs.8 19 Nov 2022 08:02:11 -0000 1.79
+++ sbin/newfs/newfs.8 7 Jan 2024 07:12:28 -0000
@@ -186,11 +186,6 @@ without really creating the file system.
Select the filesystem format:
.Pp
.Bl -tag -width 3n -offset indent -compact
-.It 0
-.Bx 4.3
-format file system.
-This option is primarily used to build root file systems that can
-be understood by older boot ROMs.
.It 1
Fast File System (FFS), the default for
.Nm mount_mfs .
Index: sbin/newfs/newfs.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/newfs/newfs.c,v
diff -u -p -r1.117 newfs.c
--- sbin/newfs/newfs.c 4 Dec 2022 23:50:47 -0000 1.117
+++ sbin/newfs/newfs.c 7 Jan 2024 07:11:43 -0000
@@ -121,7 +121,7 @@ u_short dkcksum(struct disklabel *);
int mfs; /* run as the memory based filesystem */
int Nflag; /* run without writing file system */
-int Oflag = 2; /* 0 = 4.3BSD ffs, 1 = 4.4BSD ffs, 2 = ffs2 */
+int Oflag = 2; /* 1 = 4.4BSD ffs, 2 = ffs2 */
daddr_t fssize; /* file system size in 512-byte blocks */
long long sectorsize; /* bytes/sector */
int fsize = 0; /* fragment size */
@@ -211,7 +211,7 @@ main(int argc, char *argv[])
Nflag = 1;
break;
case 'O':
- Oflag = strtonum(optarg, 0, 2, &errstr);
+ Oflag = strtonum(optarg, 1, 2, &errstr);
if (errstr)
fatal("%s: invalid ffs version", optarg);
oflagset = 1;
Index: sbin/restore/dirs.c
===================================================================
RCS file: /data/src/openbsd/src/sbin/restore/dirs.c,v
diff -u -p -r1.42 dirs.c
--- sbin/restore/dirs.c 28 Jun 2019 13:32:46 -0000 1.42
+++ sbin/restore/dirs.c 7 Jan 2024 06:59:45 -0000
@@ -175,7 +175,7 @@ extractdirs(int genmode)
nulldir.d_namlen = 1;
nulldir.d_name[0] = '/';
nulldir.d_name[1] = '\0';
- nulldir.d_reclen = DIRSIZ(0, &nulldir);
+ nulldir.d_reclen = DIRSIZ(&nulldir);
for (;;) {
curfile.name = "<directory file - name unknown>";
curfile.action = USING;
@@ -364,17 +364,17 @@ putdir(char *buf, size_t size)
i = DIRBLKSIZ - (loc & (DIRBLKSIZ - 1));
if ((dp->d_reclen & 0x3) != 0 ||
dp->d_reclen > i ||
- dp->d_reclen < DIRSIZ(0, dp) ||
+ dp->d_reclen < DIRSIZ(dp) ||
dp->d_namlen > NAME_MAX) {
Vprintf(stdout, "Mangled directory: ");
if ((dp->d_reclen & 0x3) != 0)
Vprintf(stdout,
"reclen not multiple of 4 ");
- if (dp->d_reclen < DIRSIZ(0, dp))
+ if (dp->d_reclen < DIRSIZ(dp))
Vprintf(stdout,
"reclen less than DIRSIZ (%u < %u) ",
(unsigned)dp->d_reclen,
- (unsigned)DIRSIZ(0, dp));
+ (unsigned)DIRSIZ(dp));
if (dp->d_namlen > NAME_MAX)
Vprintf(stdout,
"reclen name too big (%u > %u) ",
@@ -404,7 +404,7 @@ long prev = 0;
static void
putent(struct direct *dp)
{
- dp->d_reclen = DIRSIZ(0, dp);
+ dp->d_reclen = DIRSIZ(dp);
if (dirloc + dp->d_reclen > DIRBLKSIZ) {
((struct direct *)(dirbuf + prev))->d_reclen =
DIRBLKSIZ - prev;
@@ -440,7 +440,7 @@ dcvt(struct odirect *odp, struct direct
ndp->d_type = DT_UNKNOWN;
(void)strncpy(ndp->d_name, odp->d_name, ODIRSIZ);
ndp->d_namlen = strlen(ndp->d_name);
- ndp->d_reclen = DIRSIZ(0, ndp);
+ ndp->d_reclen = DIRSIZ(ndp);
}
/*
Index: usr.sbin/makefs/ffs.c
===================================================================
RCS file: /data/src/openbsd/src/usr.sbin/makefs/ffs.c,v
diff -u -p -r1.38 ffs.c
--- usr.sbin/makefs/ffs.c 8 Aug 2023 04:45:44 -0000 1.38
+++ usr.sbin/makefs/ffs.c 7 Jan 2024 07:01:48 -0000
@@ -550,9 +550,9 @@ ffs_size_dir(fsnode *root, fsinfo_t *fso
#define ADDDIRENT(e) do { \
tmpdir.d_namlen = strlen((e)); \
- this = DIRSIZ(NEWDIRFMT, &tmpdir); \
- if (this + curdirsize > roundup(curdirsize, DIRBLKSIZ)) \
- curdirsize = roundup(curdirsize, DIRBLKSIZ); \
+ this = DIRSIZ(&tmpdir); \
+ if (this + curdirsize > roundup(curdirsize, DIRBLKSIZ)) \
+ curdirsize = roundup(curdirsize, DIRBLKSIZ); \
curdirsize += this; \
} while (0);
@@ -887,12 +887,12 @@ ffs_make_dirbuf(dirbuf_t *dbuf, const ch
de.d_type = IFTODT(node->type);
de.d_namlen = (uint8_t)strlen(name);
strlcpy(de.d_name, name, sizeof de.d_name);
- de.d_reclen = DIRSIZ(NEWDIRFMT, &de);
+ de.d_reclen = DIRSIZ(&de);
dp = (struct direct *)(dbuf->buf + dbuf->cur);
llen = 0;
if (dp != NULL)
- llen = DIRSIZ(NEWDIRFMT, dp);
+ llen = DIRSIZ(dp);
if (de.d_reclen + dbuf->cur + llen > roundup(dbuf->size, DIRBLKSIZ)) {
newbuf = erealloc(dbuf->buf, dbuf->size + DIRBLKSIZ);
delete broken support for antique FFS images