Module Name: src
Committed By: dholland
Date: Mon Sep 21 01:22:18 UTC 2015
Modified Files:
src/sbin/fsck_lfs: dir.c pass2.c
src/sbin/newfs_lfs: make_lfs.c
src/sys/ufs/lfs: lfs_accessors.h lfs_rename.c lfs_vnops.c
ulfs_dirhash.c ulfs_dirhash.h ulfs_lookup.c ulfs_vnops.c
Log Message:
Oops; LFS_DIRECTSIZ() is going to need the fs as an argument.
Also, it turns out that dirhash needs a compile-time-constant version
of LFS_DIRECTSIZ(LFS_MAXNAMLEN+1), independent of 64-vs-32, so create
LFS_MAXDIRENTRYSIZE for this. Sigh.
To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 src/sbin/fsck_lfs/dir.c
cvs rdiff -u -r1.32 -r1.33 src/sbin/fsck_lfs/pass2.c
cvs rdiff -u -r1.54 -r1.55 src/sbin/newfs_lfs/make_lfs.c
cvs rdiff -u -r1.29 -r1.30 src/sys/ufs/lfs/lfs_accessors.h
cvs rdiff -u -r1.14 -r1.15 src/sys/ufs/lfs/lfs_rename.c
cvs rdiff -u -r1.291 -r1.292 src/sys/ufs/lfs/lfs_vnops.c
cvs rdiff -u -r1.12 -r1.13 src/sys/ufs/lfs/ulfs_dirhash.c
cvs rdiff -u -r1.6 -r1.7 src/sys/ufs/lfs/ulfs_dirhash.h
cvs rdiff -u -r1.32 -r1.33 src/sys/ufs/lfs/ulfs_lookup.c \
src/sys/ufs/lfs/ulfs_vnops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/fsck_lfs/dir.c
diff -u src/sbin/fsck_lfs/dir.c:1.44 src/sbin/fsck_lfs/dir.c:1.45
--- src/sbin/fsck_lfs/dir.c:1.44 Sun Sep 20 04:51:43 2015
+++ src/sbin/fsck_lfs/dir.c Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: dir.c,v 1.44 2015/09/20 04:51:43 dholland Exp $ */
+/* $NetBSD: dir.c,v 1.45 2015/09/21 01:22:18 dholland Exp $ */
/*
* Copyright (c) 1980, 1986, 1993
@@ -376,7 +376,7 @@ mkentry(struct inodesc *idesc)
/* figure the length needed for id_name */
namlen = strlen(idesc->id_name);
- newreclen = LFS_DIRECTSIZ(namlen);
+ newreclen = LFS_DIRECTSIZ(fs, namlen);
/* find the minimum record length for the existing name */
if (lfs_dir_getino(fs, dirp) != 0)
@@ -688,19 +688,19 @@ allocdir(ino_t parent, ino_t request, in
dirp = (struct lfs_dirheader *)bp->b_data;
/* . */
lfs_dir_setino(fs, dirp, ino);
- lfs_dir_setreclen(fs, dirp, LFS_DIRECTSIZ(1));
+ lfs_dir_setreclen(fs, dirp, LFS_DIRECTSIZ(fs, 1));
lfs_dir_settype(fs, dirp, LFS_DT_DIR);
lfs_dir_setnamlen(fs, dirp, 1);
lfs_copydirname(fs, lfs_dir_nameptr(fs, dirp), ".", 1,
- LFS_DIRECTSIZ(1));
+ LFS_DIRECTSIZ(fs, 1));
/* .. */
dirp = LFS_NEXTDIR(fs, dirp);
lfs_dir_setino(fs, dirp, parent);
- lfs_dir_setreclen(fs, dirp, LFS_DIRBLKSIZ - LFS_DIRECTSIZ(1));
+ lfs_dir_setreclen(fs, dirp, LFS_DIRBLKSIZ - LFS_DIRECTSIZ(fs, 1));
lfs_dir_settype(fs, dirp, LFS_DT_DIR);
lfs_dir_setnamlen(fs, dirp, 2);
lfs_copydirname(fs, lfs_dir_nameptr(fs, dirp), "..", 2,
- LFS_DIRBLKSIZ - LFS_DIRECTSIZ(1));
+ LFS_DIRBLKSIZ - LFS_DIRECTSIZ(fs, 1));
for (cp = &bp->b_data[LFS_DIRBLKSIZ];
cp < &bp->b_data[lfs_sb_getfsize(fs)];
cp += LFS_DIRBLKSIZ) {
Index: src/sbin/fsck_lfs/pass2.c
diff -u src/sbin/fsck_lfs/pass2.c:1.32 src/sbin/fsck_lfs/pass2.c:1.33
--- src/sbin/fsck_lfs/pass2.c:1.32 Tue Sep 15 15:02:25 2015
+++ src/sbin/fsck_lfs/pass2.c Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: pass2.c,v 1.32 2015/09/15 15:02:25 dholland Exp $ */
+/* $NetBSD: pass2.c,v 1.33 2015/09/21 01:22:18 dholland Exp $ */
/*
* Copyright (c) 1980, 1986, 1993
@@ -247,7 +247,7 @@ pass2check(struct inodesc * idesc)
lfs_dir_setino(fs, &proto, idesc->id_number);
lfs_dir_settype(fs, &proto, LFS_DT_DIR);
lfs_dir_setnamlen(fs, &proto, 1);
- entrysize = LFS_DIRECTSIZ(1);
+ entrysize = LFS_DIRECTSIZ(fs, 1);
lfs_dir_setreclen(fs, &proto, entrysize);
if (lfs_dir_getino(fs, dirp) != 0 && strcmp(lfs_dir_nameptr(fs, dirp), "..") != 0) {
pfatal("CANNOT FIX, FIRST ENTRY IN DIRECTORY CONTAINS %s\n",
@@ -283,7 +283,7 @@ chk1:
lfs_dir_setino(fs, &proto, inp->i_parent);
lfs_dir_settype(fs, &proto, LFS_DT_DIR);
lfs_dir_setnamlen(fs, &proto, 2);
- entrysize = LFS_DIRECTSIZ(2);
+ entrysize = LFS_DIRECTSIZ(fs, 2);
lfs_dir_setreclen(fs, &proto, entrysize);
if (idesc->id_entryno == 0) {
n = LFS_DIRSIZ(fs, dirp);
Index: src/sbin/newfs_lfs/make_lfs.c
diff -u src/sbin/newfs_lfs/make_lfs.c:1.54 src/sbin/newfs_lfs/make_lfs.c:1.55
--- src/sbin/newfs_lfs/make_lfs.c:1.54 Tue Sep 15 15:02:25 2015
+++ src/sbin/newfs_lfs/make_lfs.c Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: make_lfs.c,v 1.54 2015/09/15 15:02:25 dholland Exp $ */
+/* $NetBSD: make_lfs.c,v 1.55 2015/09/21 01:22:18 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.54 2015/09/15 15:02:25 dholland Exp $");
+__RCSID("$NetBSD: make_lfs.c,v 1.55 2015/09/21 01:22:18 dholland Exp $");
#endif
#endif /* not lint */
@@ -366,7 +366,7 @@ make_dir(struct lfs *fs, void *bufp,
ep = bufp;
for (i = 0; i < numentries; i++) {
namlen = strlen(protodir[i].dp_name);
- reclen = LFS_DIRECTSIZ(namlen);
+ reclen = LFS_DIRECTSIZ(fs, namlen);
if (spaceleft < reclen)
fatal("%s: %s", special, "directory too big");
Index: src/sys/ufs/lfs/lfs_accessors.h
diff -u src/sys/ufs/lfs/lfs_accessors.h:1.29 src/sys/ufs/lfs/lfs_accessors.h:1.30
--- src/sys/ufs/lfs/lfs_accessors.h:1.29 Sun Sep 20 04:51:43 2015
+++ src/sys/ufs/lfs/lfs_accessors.h Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_accessors.h,v 1.29 2015/09/20 04:51:43 dholland Exp $ */
+/* $NetBSD: lfs_accessors.h,v 1.30 2015/09/21 01:22:18 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 */
@@ -222,9 +222,17 @@
* without the d_name field, plus enough space for the name with a terminating
* null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
*/
-#define LFS_DIRECTSIZ(namlen) \
+#define LFS_DIRECTSIZ(fs, namlen) \
(sizeof(struct lfs_dirheader) + (((namlen)+1 + 3) &~ 3))
+/*
+ * The size of the largest possible directory entry. This is
+ * used by ulfs_dirhash to figure the size of an array, so we
+ * need a single constant value true for both lfs32 and lfs64.
+ */
+#define LFS_MAXDIRENTRYSIZE \
+ (sizeof(struct lfs_dirheader) + (((LFS_MAXNAMLEN+1)+1 + 3) & ~3))
+
#if (BYTE_ORDER == LITTLE_ENDIAN)
#define LFS_OLDDIRSIZ(oldfmt, dp, needswap) \
(((oldfmt) && !(needswap)) ? \
@@ -235,7 +243,7 @@
LFS_DIRECTSIZ((dp)->d_type) : LFS_DIRECTSIZ((dp)->d_namlen))
#endif
-#define LFS_DIRSIZ(fs, dp) LFS_DIRECTSIZ(lfs_dir_getnamlen(fs, dp))
+#define LFS_DIRSIZ(fs, dp) LFS_DIRECTSIZ(fs, lfs_dir_getnamlen(fs, dp))
/* Constants for the first argument of LFS_OLDDIRSIZ */
#define LFS_OLDDIRFMT 1
Index: src/sys/ufs/lfs/lfs_rename.c
diff -u src/sys/ufs/lfs/lfs_rename.c:1.14 src/sys/ufs/lfs/lfs_rename.c:1.15
--- src/sys/ufs/lfs/lfs_rename.c:1.14 Sun Sep 20 04:51:43 2015
+++ src/sys/ufs/lfs/lfs_rename.c Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_rename.c,v 1.14 2015/09/20 04:51:43 dholland Exp $ */
+/* $NetBSD: lfs_rename.c,v 1.15 2015/09/21 01:22:18 dholland Exp $ */
/* from NetBSD: ufs_rename.c,v 1.6 2013/01/22 09:39:18 dholland Exp */
/*-
@@ -89,7 +89,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_rename.c,v 1.14 2015/09/20 04:51:43 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_rename.c,v 1.15 2015/09/21 01:22:18 dholland Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -942,7 +942,7 @@ ulfs_gro_rename(struct mount *mp, kauth_
* the position is the record length of the . entry,
* namely LFS_DIRECTSIZ(1).
*/
- position = LFS_DIRECTSIZ(1);
+ position = LFS_DIRECTSIZ(fs, 1);
error = ulfs_dirrewrite(VTOI(fvp), position,
VTOI(fdvp), VTOI(tdvp)->i_number, LFS_DT_DIR, 0, IN_CHANGE);
#if 0 /* XXX This branch was not in ulfs_rename! */
Index: src/sys/ufs/lfs/lfs_vnops.c
diff -u src/sys/ufs/lfs/lfs_vnops.c:1.291 src/sys/ufs/lfs/lfs_vnops.c:1.292
--- src/sys/ufs/lfs/lfs_vnops.c:1.291 Sun Sep 20 04:51:43 2015
+++ src/sys/ufs/lfs/lfs_vnops.c Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_vnops.c,v 1.291 2015/09/20 04:51:43 dholland Exp $ */
+/* $NetBSD: lfs_vnops.c,v 1.292 2015/09/21 01:22:18 dholland Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -125,7 +125,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.291 2015/09/20 04:51:43 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.292 2015/09/21 01:22:18 dholland Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -942,19 +942,19 @@ lfs_mkdir(void *v)
/* . */
lfs_dir_setino(fs, dirp, ip->i_number);
- lfs_dir_setreclen(fs, dirp, LFS_DIRECTSIZ(1));
+ lfs_dir_setreclen(fs, dirp, LFS_DIRECTSIZ(fs, 1));
lfs_dir_settype(fs, dirp, LFS_DT_DIR);
lfs_dir_setnamlen(fs, dirp, 1);
lfs_copydirname(fs, lfs_dir_nameptr(fs, dirp), ".", 1,
- LFS_DIRECTSIZ(1));
+ LFS_DIRECTSIZ(fs, 1));
dirp = LFS_NEXTDIR(fs, dirp);
/* .. */
lfs_dir_setino(fs, dirp, dp->i_number);
- lfs_dir_setreclen(fs, dirp, dirblksiz - LFS_DIRECTSIZ(1));
+ lfs_dir_setreclen(fs, dirp, dirblksiz - LFS_DIRECTSIZ(fs, 1));
lfs_dir_settype(fs, dirp, LFS_DT_DIR);
lfs_dir_setnamlen(fs, dirp, 2);
lfs_copydirname(fs, lfs_dir_nameptr(fs, dirp), "..", 2,
- dirblksiz - LFS_DIRECTSIZ(1));
+ dirblksiz - LFS_DIRECTSIZ(fs, 1));
/*
* Directory set up; now install its entry in the parent directory.
Index: src/sys/ufs/lfs/ulfs_dirhash.c
diff -u src/sys/ufs/lfs/ulfs_dirhash.c:1.12 src/sys/ufs/lfs/ulfs_dirhash.c:1.13
--- src/sys/ufs/lfs/ulfs_dirhash.c:1.12 Tue Sep 15 15:02:25 2015
+++ src/sys/ufs/lfs/ulfs_dirhash.c Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: ulfs_dirhash.c,v 1.12 2015/09/15 15:02:25 dholland Exp $ */
+/* $NetBSD: ulfs_dirhash.c,v 1.13 2015/09/21 01:22:18 dholland Exp $ */
/* from NetBSD: ufs_dirhash.c,v 1.34 2009/10/05 23:48:08 rmind Exp */
/*
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_dirhash.c,v 1.12 2015/09/15 15:02:25 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_dirhash.c,v 1.13 2015/09/21 01:22:18 dholland Exp $");
/*
* This implements a hash-based lookup scheme for ULFS directories.
@@ -148,7 +148,7 @@ ulfsdirhash_build(struct inode *ip)
vp = ip->i_vnode;
/* Allocate 50% more entries than this dir size could ever need. */
KASSERT(ip->i_size >= dirblksiz);
- nslots = ip->i_size / LFS_DIRECTSIZ(1);
+ nslots = ip->i_size / LFS_DIRECTSIZ(fs, 1);
nslots = (nslots * 3 + 1) / 2;
narrays = howmany(nslots, DH_NBLKOFF);
nslots = narrays * DH_NBLKOFF;
Index: src/sys/ufs/lfs/ulfs_dirhash.h
diff -u src/sys/ufs/lfs/ulfs_dirhash.h:1.6 src/sys/ufs/lfs/ulfs_dirhash.h:1.7
--- src/sys/ufs/lfs/ulfs_dirhash.h:1.6 Tue Sep 15 15:02:25 2015
+++ src/sys/ufs/lfs/ulfs_dirhash.h Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: ulfs_dirhash.h,v 1.6 2015/09/15 15:02:25 dholland Exp $ */
+/* $NetBSD: ulfs_dirhash.h,v 1.7 2015/09/21 01:22:18 dholland Exp $ */
/* from NetBSD: dirhash.h,v 1.6 2008/06/04 11:33:19 ad Exp */
/*
@@ -48,8 +48,8 @@
#define DIRHASH_DEL (-2) /* deleted entry; may be part of chain */
#define DIRALIGN 4
-#define DH_NFSTATS (LFS_DIRECTSIZ(LFS_MAXNAMLEN + 1) / DIRALIGN)
- /* max DIRALIGN words in a directory entry */
+#define DH_NFSTATS (LFS_MAXDIRENTRYSIZE / DIRALIGN)
+ /* max DIRALIGN words in a directory entry */
/*
* Dirhash uses a score mechanism to achieve a hybrid between a
Index: src/sys/ufs/lfs/ulfs_lookup.c
diff -u src/sys/ufs/lfs/ulfs_lookup.c:1.32 src/sys/ufs/lfs/ulfs_lookup.c:1.33
--- src/sys/ufs/lfs/ulfs_lookup.c:1.32 Tue Sep 15 15:02:25 2015
+++ src/sys/ufs/lfs/ulfs_lookup.c Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: ulfs_lookup.c,v 1.32 2015/09/15 15:02:25 dholland Exp $ */
+/* $NetBSD: ulfs_lookup.c,v 1.33 2015/09/21 01:22:18 dholland Exp $ */
/* from NetBSD: ufs_lookup.c,v 1.122 2013/01/22 09:39:18 dholland Exp */
/*
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_lookup.c,v 1.32 2015/09/15 15:02:25 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_lookup.c,v 1.33 2015/09/21 01:22:18 dholland Exp $");
#ifdef _KERNEL_OPT
#include "opt_lfs.h"
@@ -221,7 +221,7 @@ ulfs_lookup(void *v)
slotfreespace = slotsize = slotneeded = 0;
if ((nameiop == CREATE || nameiop == RENAME) && (flags & ISLASTCN)) {
slotstatus = NONE;
- slotneeded = LFS_DIRECTSIZ(cnp->cn_namelen);
+ slotneeded = LFS_DIRECTSIZ(fs, cnp->cn_namelen);
}
/*
@@ -783,7 +783,7 @@ ulfs_direnter(struct vnode *dvp, const s
cr = cnp->cn_cred;
dp = VTOI(dvp);
- newentrysize = LFS_DIRECTSIZ(namlen);
+ newentrysize = LFS_DIRECTSIZ(fs, namlen);
if (ulr->ulr_count == 0) {
/*
Index: src/sys/ufs/lfs/ulfs_vnops.c
diff -u src/sys/ufs/lfs/ulfs_vnops.c:1.32 src/sys/ufs/lfs/ulfs_vnops.c:1.33
--- src/sys/ufs/lfs/ulfs_vnops.c:1.32 Tue Sep 15 15:02:25 2015
+++ src/sys/ufs/lfs/ulfs_vnops.c Mon Sep 21 01:22:18 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: ulfs_vnops.c,v 1.32 2015/09/15 15:02:25 dholland Exp $ */
+/* $NetBSD: ulfs_vnops.c,v 1.33 2015/09/21 01:22:18 dholland Exp $ */
/* from NetBSD: ufs_vnops.c,v 1.213 2013/06/08 05:47:02 kardel Exp */
/*-
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.32 2015/09/15 15:02:25 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.33 2015/09/21 01:22:18 dholland Exp $");
#if defined(_KERNEL_OPT)
#include "opt_lfs.h"
@@ -791,7 +791,7 @@ ulfs_readdir(void *v)
count = uio->uio_resid;
rcount = count - ((uio->uio_offset + count) & (fs->um_dirblksiz - 1));
- if (rcount < LFS_DIRECTSIZ(0) || count < _DIRENT_MINSIZE(ndp))
+ if (rcount < LFS_DIRECTSIZ(fs, 0) || count < _DIRENT_MINSIZE(ndp))
return EINVAL;
startoff = uio->uio_offset & ~(fs->um_dirblksiz - 1);