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);