Module Name: src Committed By: dholland Date: Sat Jun 8 02:14:46 UTC 2013
Modified Files: src/sbin/fsck_lfs: dir.c inode.c pass1.c pass2.c src/sbin/newfs_lfs: make_lfs.c src/sys/ufs/lfs: lfs.h lfs_vfsops.c ulfs_dir.h ulfs_dirhash.c ulfs_dirhash.h ulfs_extattr.c ulfs_lookup.c ulfs_rename.c ulfs_vnops.c Log Message: DIRBLKSIZ -> LFS_DIRBLKSIZ DIRECTSIZ -> LFS_DIRECTSIZ DIRSIZ -> LFS_DIRSIZ OLDDIRFMT -> LFS_OLDDIRFMT NEWDIRFMT -> LFS_NEWDIRFMT IFTODT -> LFS_IFTODT DTTOIF -> LFS_DTTOIF To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sbin/fsck_lfs/dir.c cvs rdiff -u -r1.48 -r1.49 src/sbin/fsck_lfs/inode.c cvs rdiff -u -r1.34 -r1.35 src/sbin/fsck_lfs/pass1.c cvs rdiff -u -r1.21 -r1.22 src/sbin/fsck_lfs/pass2.c cvs rdiff -u -r1.25 -r1.26 src/sbin/newfs_lfs/make_lfs.c cvs rdiff -u -r1.145 -r1.146 src/sys/ufs/lfs/lfs.h cvs rdiff -u -r1.303 -r1.304 src/sys/ufs/lfs/lfs_vfsops.c cvs rdiff -u -r1.6 -r1.7 src/sys/ufs/lfs/ulfs_dir.h cvs rdiff -u -r1.4 -r1.5 src/sys/ufs/lfs/ulfs_dirhash.c \ src/sys/ufs/lfs/ulfs_dirhash.h src/sys/ufs/lfs/ulfs_extattr.c cvs rdiff -u -r1.8 -r1.9 src/sys/ufs/lfs/ulfs_lookup.c \ src/sys/ufs/lfs/ulfs_vnops.c cvs rdiff -u -r1.5 -r1.6 src/sys/ufs/lfs/ulfs_rename.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.29 src/sbin/fsck_lfs/dir.c:1.30 --- src/sbin/fsck_lfs/dir.c:1.29 Sat Jun 8 02:12:56 2013 +++ src/sbin/fsck_lfs/dir.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: dir.c,v 1.29 2013/06/08 02:12:56 dholland Exp $ */ +/* $NetBSD: dir.c,v 1.30 2013/06/08 02:14:46 dholland Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -57,7 +57,7 @@ const char *lfname = "lost+found"; int lfmode = 01700; struct lfs_dirtemplate emptydir = { .dot_ino = 0, - .dot_reclen = DIRBLKSIZ, + .dot_reclen = LFS_DIRBLKSIZ, }; struct lfs_dirtemplate dirhead = { .dot_ino = 0, @@ -66,7 +66,7 @@ struct lfs_dirtemplate dirhead = { .dot_namlen = 1, .dot_name = ".", .dotdot_ino = 0, - .dotdot_reclen = DIRBLKSIZ - 12, + .dotdot_reclen = LFS_DIRBLKSIZ - 12, .dotdot_type = LFS_DT_DIR, .dotdot_namlen = 2, .dotdot_name = ".." @@ -77,7 +77,7 @@ struct lfs_odirtemplate odirhead = { .dot_namlen = 1, .dot_name = ".", .dotdot_ino = 0, - .dotdot_reclen = DIRBLKSIZ - 12, + .dotdot_reclen = LFS_DIRBLKSIZ - 12, .dotdot_namlen = 2, .dotdot_name = ".." }; @@ -135,14 +135,14 @@ dirscan(struct inodesc *idesc) struct ubuf *bp; int dsize, n; long blksiz; - char dbuf[DIRBLKSIZ]; + char dbuf[LFS_DIRBLKSIZ]; struct uvnode *vp; if (idesc->id_type != DATA) errexit("wrong type to dirscan %d", idesc->id_type); if (idesc->id_entryno == 0 && - (idesc->id_filesize & (DIRBLKSIZ - 1)) != 0) - idesc->id_filesize = roundup(idesc->id_filesize, DIRBLKSIZ); + (idesc->id_filesize & (LFS_DIRBLKSIZ - 1)) != 0) + idesc->id_filesize = roundup(idesc->id_filesize, LFS_DIRBLKSIZ); blksiz = idesc->id_numfrags * fs->lfs_fsize; if (chkrange(idesc->id_blkno, idesc->id_numfrags)) { idesc->id_filesize -= blksiz; @@ -181,7 +181,7 @@ fsck_readdir(struct uvnode *vp, struct i blksiz = idesc->id_numfrags * fs->lfs_fsize; bread(vp, idesc->id_lblkno, blksiz, NOCRED, 0, &bp); - if (idesc->id_loc % DIRBLKSIZ == 0 && idesc->id_filesize > 0 && + if (idesc->id_loc % LFS_DIRBLKSIZ == 0 && idesc->id_filesize > 0 && idesc->id_loc < blksiz) { dp = (struct lfs_direct *) (bp->b_data + idesc->id_loc); if (dircheck(idesc, dp)) @@ -192,7 +192,7 @@ fsck_readdir(struct uvnode *vp, struct i fix = dofix(idesc, "DIRECTORY CORRUPTED"); bread(vp, idesc->id_lblkno, blksiz, NOCRED, 0, &bp); dp = (struct lfs_direct *) (bp->b_data + idesc->id_loc); - dp->d_reclen = DIRBLKSIZ; + dp->d_reclen = LFS_DIRBLKSIZ; dp->d_ino = 0; dp->d_type = 0; dp->d_namlen = 0; @@ -201,8 +201,8 @@ fsck_readdir(struct uvnode *vp, struct i VOP_BWRITE(bp); else brelse(bp, 0); - idesc->id_loc += DIRBLKSIZ; - idesc->id_filesize -= DIRBLKSIZ; + idesc->id_loc += LFS_DIRBLKSIZ; + idesc->id_filesize -= LFS_DIRBLKSIZ; return (dp); } dpok: @@ -214,7 +214,7 @@ dpok: dp = (struct lfs_direct *) (bp->b_data + dploc); idesc->id_loc += dp->d_reclen; idesc->id_filesize -= dp->d_reclen; - if ((idesc->id_loc % DIRBLKSIZ) == 0) { + if ((idesc->id_loc % LFS_DIRBLKSIZ) == 0) { brelse(bp, 0); return dp; } @@ -222,7 +222,7 @@ dpok: if (idesc->id_loc < blksiz && idesc->id_filesize > 0 && dircheck(idesc, ndp) == 0) { brelse(bp, 0); - size = DIRBLKSIZ - (idesc->id_loc % DIRBLKSIZ); + size = LFS_DIRBLKSIZ - (idesc->id_loc % LFS_DIRBLKSIZ); idesc->id_loc += size; idesc->id_filesize -= size; if (idesc->id_fix == IGNORE) @@ -253,7 +253,7 @@ dircheck(struct inodesc *idesc, struct l u_char namlen, type; int spaceleft; - spaceleft = DIRBLKSIZ - (idesc->id_loc % DIRBLKSIZ); + spaceleft = LFS_DIRBLKSIZ - (idesc->id_loc % LFS_DIRBLKSIZ); if (dp->d_ino >= maxino || dp->d_reclen == 0 || dp->d_reclen > spaceleft || @@ -267,7 +267,7 @@ dircheck(struct inodesc *idesc, struct l } if (dp->d_ino == 0) return (1); - size = DIRSIZ(0, dp, 0); + size = LFS_DIRSIZ(0, dp, 0); namlen = dp->d_namlen; type = dp->d_type; if (dp->d_reclen < size || @@ -363,9 +363,9 @@ mkentry(struct inodesc *idesc) int newlen, oldlen; newent.d_namlen = strlen(idesc->id_name); - newlen = DIRSIZ(0, &newent, 0); + newlen = LFS_DIRSIZ(0, &newent, 0); if (dirp->d_ino != 0) - oldlen = DIRSIZ(0, dirp, 0); + oldlen = LFS_DIRSIZ(0, dirp, 0); else oldlen = 0; if (dirp->d_reclen - oldlen < newlen) @@ -541,8 +541,8 @@ makeentry(ino_t parent, ino_t ino, const idesc.id_name = name; vp = vget(fs, parent); dp = VTOD(vp); - if (dp->di_size % DIRBLKSIZ) { - dp->di_size = roundup(dp->di_size, DIRBLKSIZ); + if (dp->di_size % LFS_DIRBLKSIZ) { + dp->di_size = roundup(dp->di_size, LFS_DIRBLKSIZ); inodirty(VTOI(vp)); } if ((ckinode(dp, &idesc) & ALTERED) != 0) @@ -563,7 +563,7 @@ expanddir(struct uvnode *vp, struct ulfs { daddr_t lastbn; struct ubuf *bp; - char *cp, firstblk[DIRBLKSIZ]; + char *cp, firstblk[LFS_DIRBLKSIZ]; lastbn = lblkno(fs, dp->di_size); if (lastbn >= ULFS_NDADDR - 1 || dp->di_db[lastbn] == 0 || dp->di_size == 0) @@ -578,14 +578,14 @@ expanddir(struct uvnode *vp, struct ulfs (long) dblksize(fs, dp, lastbn + 1), NOCRED, 0, &bp); if (bp->b_flags & B_ERROR) goto bad; - memcpy(firstblk, bp->b_data, DIRBLKSIZ); + memcpy(firstblk, bp->b_data, LFS_DIRBLKSIZ); bread(vp, lastbn, fs->lfs_bsize, NOCRED, 0, &bp); if (bp->b_flags & B_ERROR) goto bad; - memcpy(bp->b_data, firstblk, DIRBLKSIZ); - for (cp = &bp->b_data[DIRBLKSIZ]; + memcpy(bp->b_data, firstblk, LFS_DIRBLKSIZ); + for (cp = &bp->b_data[LFS_DIRBLKSIZ]; cp < &bp->b_data[fs->lfs_bsize]; - cp += DIRBLKSIZ) + cp += LFS_DIRBLKSIZ) memcpy(cp, &emptydir, sizeof emptydir); VOP_BWRITE(bp); bread(vp, dp->di_db[lastbn + 1], @@ -635,9 +635,9 @@ allocdir(ino_t parent, ino_t request, in return (0); } memcpy(bp->b_data, dirp, sizeof(struct lfs_dirtemplate)); - for (cp = &bp->b_data[DIRBLKSIZ]; + for (cp = &bp->b_data[LFS_DIRBLKSIZ]; cp < &bp->b_data[fs->lfs_fsize]; - cp += DIRBLKSIZ) + cp += LFS_DIRBLKSIZ) memcpy(cp, &emptydir, sizeof emptydir); VOP_BWRITE(bp); dp->di_nlink = 2; Index: src/sbin/fsck_lfs/inode.c diff -u src/sbin/fsck_lfs/inode.c:1.48 src/sbin/fsck_lfs/inode.c:1.49 --- src/sbin/fsck_lfs/inode.c:1.48 Sat Jun 8 02:12:56 2013 +++ src/sbin/fsck_lfs/inode.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: inode.c,v 1.48 2013/06/08 02:12:56 dholland Exp $ */ +/* $NetBSD: inode.c,v 1.49 2013/06/08 02:14:46 dholland Exp $ */ /*- * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. @@ -619,7 +619,7 @@ allocino(ino_t request, int type) dp->di_blocks = btofsb(fs, fs->lfs_fsize); n_files++; inodirty(VTOI(vp)); - typemap[ino] = IFTODT(type); + typemap[ino] = LFS_IFTODT(type); return (ino); } Index: src/sbin/fsck_lfs/pass1.c diff -u src/sbin/fsck_lfs/pass1.c:1.34 src/sbin/fsck_lfs/pass1.c:1.35 --- src/sbin/fsck_lfs/pass1.c:1.34 Sat Jun 8 02:11:11 2013 +++ src/sbin/fsck_lfs/pass1.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: pass1.c,v 1.34 2013/06/08 02:11:11 dholland Exp $ */ +/* $NetBSD: pass1.c,v 1.35 2013/06/08 02:14:46 dholland Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -293,7 +293,7 @@ checkinode(ino_t inumber, struct inodesc brelse(bp, 0); } - typemap[inumber] = IFTODT(mode); + typemap[inumber] = LFS_IFTODT(mode); badblk = dupblk = 0; idesc->id_number = inumber; (void) ckinode(VTOD(vp), idesc); Index: src/sbin/fsck_lfs/pass2.c diff -u src/sbin/fsck_lfs/pass2.c:1.21 src/sbin/fsck_lfs/pass2.c:1.22 --- src/sbin/fsck_lfs/pass2.c:1.21 Sat Jun 8 02:12:56 2013 +++ src/sbin/fsck_lfs/pass2.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: pass2.c,v 1.21 2013/06/08 02:12:56 dholland Exp $ */ +/* $NetBSD: pass2.c,v 1.22 2013/06/08 02:14:46 dholland Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -133,21 +133,21 @@ pass2(void) continue; if (inp->i_isize < MINDIRSIZE) { direrror(inp->i_number, "DIRECTORY TOO SHORT"); - inp->i_isize = roundup(MINDIRSIZE, DIRBLKSIZ); + inp->i_isize = roundup(MINDIRSIZE, LFS_DIRBLKSIZ); if (reply("FIX") == 1) { vp = vget(fs, inp->i_number); dp = VTOD(vp); dp->di_size = inp->i_isize; inodirty(VTOI(vp)); } - } else if ((inp->i_isize & (DIRBLKSIZ - 1)) != 0) { + } else if ((inp->i_isize & (LFS_DIRBLKSIZ - 1)) != 0) { getpathname(pathbuf, sizeof(pathbuf), inp->i_number, inp->i_number); pwarn("DIRECTORY %s: LENGTH %lu NOT MULTIPLE OF %d", - pathbuf, (unsigned long) inp->i_isize, DIRBLKSIZ); + pathbuf, (unsigned long) inp->i_isize, LFS_DIRBLKSIZ); if (preen) printf(" (ADJUSTED)\n"); - inp->i_isize = roundup(inp->i_isize, DIRBLKSIZ); + inp->i_isize = roundup(inp->i_isize, LFS_DIRBLKSIZ); if (preen || reply("ADJUST") == 1) { vp = vget(fs, inp->i_number); dp = VTOD(vp); @@ -235,7 +235,7 @@ pass2check(struct inodesc * idesc) proto.d_type = LFS_DT_DIR; proto.d_namlen = 1; (void) strlcpy(proto.d_name, ".", sizeof(proto.d_name)); - entrysize = DIRSIZ(0, &proto, 0); + entrysize = LFS_DIRSIZ(0, &proto, 0); if (dirp->d_ino != 0 && strcmp(dirp->d_name, "..") != 0) { pfatal("CANNOT FIX, FIRST ENTRY IN DIRECTORY CONTAINS %s\n", dirp->d_name); @@ -266,9 +266,9 @@ chk1: proto.d_type = LFS_DT_DIR; proto.d_namlen = 2; (void) strlcpy(proto.d_name, "..", sizeof(proto.d_name)); - entrysize = DIRSIZ(0, &proto, 0); + entrysize = LFS_DIRSIZ(0, &proto, 0); if (idesc->id_entryno == 0) { - n = DIRSIZ(0, dirp, 0); + n = LFS_DIRSIZ(0, dirp, 0); if (dirp->d_reclen < n + entrysize) goto chk2; proto.d_reclen = dirp->d_reclen - n; Index: src/sbin/newfs_lfs/make_lfs.c diff -u src/sbin/newfs_lfs/make_lfs.c:1.25 src/sbin/newfs_lfs/make_lfs.c:1.26 --- src/sbin/newfs_lfs/make_lfs.c:1.25 Sat Jun 8 02:12:56 2013 +++ src/sbin/newfs_lfs/make_lfs.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: make_lfs.c,v 1.25 2013/06/08 02:12:56 dholland Exp $ */ +/* $NetBSD: make_lfs.c,v 1.26 2013/06/08 02:14:46 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.25 2013/06/08 02:12:56 dholland Exp $"); +__RCSID("$NetBSD: make_lfs.c,v 1.26 2013/06/08 02:14:46 dholland Exp $"); #endif #endif /* not lint */ @@ -285,16 +285,16 @@ make_dir(void *bufp, struct lfs_direct * char *cp; int i, spcleft; - spcleft = DIRBLKSIZ; + spcleft = LFS_DIRBLKSIZ; for (cp = bufp, i = 0; i < entries - 1; i++) { - protodir[i].d_reclen = DIRSIZ(NEWDIRFMT, &protodir[i], 0); + protodir[i].d_reclen = LFS_DIRSIZ(LFS_NEWDIRFMT, &protodir[i], 0); memmove(cp, &protodir[i], protodir[i].d_reclen); cp += protodir[i].d_reclen; if ((spcleft -= protodir[i].d_reclen) < 0) fatal("%s: %s", special, "directory too big"); } protodir[i].d_reclen = spcleft; - memmove(cp, &protodir[i], DIRSIZ(NEWDIRFMT, &protodir[i], 0)); + memmove(cp, &protodir[i], LFS_DIRSIZ(LFS_NEWDIRFMT, &protodir[i], 0)); } int @@ -679,21 +679,21 @@ make_lfs(int devfd, uint secsize, struct /* Initialize root directory */ vp = lfs_raw_vget(fs, ULFS_ROOTINO, devfd, 0x0); dip = VTOI(vp)->i_din.ffs1_din; - make_dinode(ULFS_ROOTINO, dip, howmany(DIRBLKSIZ,fs->lfs_fsize), fs); + make_dinode(ULFS_ROOTINO, dip, howmany(LFS_DIRBLKSIZ,fs->lfs_fsize), fs); dip->di_mode = LFS_IFDIR | UMASK; - VTOI(vp)->i_lfs_osize = dip->di_size = DIRBLKSIZ; + VTOI(vp)->i_lfs_osize = dip->di_size = LFS_DIRBLKSIZ; #ifdef MAKE_LF_DIR VTOI(vp)->i_nlink = dip->di_nlink = 3; #else VTOI(vp)->i_nlink = dip->di_nlink = 2; #endif VTOI(vp)->i_lfs_effnblks = dip->di_blocks = - btofsb(fs, roundup(DIRBLKSIZ,fs->lfs_fsize)); - for (i = 0; i < ULFS_NDADDR && i < howmany(DIRBLKSIZ, fs->lfs_bsize); i++) + btofsb(fs, roundup(LFS_DIRBLKSIZ,fs->lfs_fsize)); + for (i = 0; i < ULFS_NDADDR && i < howmany(LFS_DIRBLKSIZ, fs->lfs_bsize); i++) VTOI(vp)->i_lfs_fragsize[i] = fs->lfs_bsize; - if (DIRBLKSIZ < fs->lfs_bsize) + if (LFS_DIRBLKSIZ < fs->lfs_bsize) VTOI(vp)->i_lfs_fragsize[i - 1] = - roundup(DIRBLKSIZ,fs->lfs_fsize); + roundup(LFS_DIRBLKSIZ,fs->lfs_fsize); bread(vp, 0, fs->lfs_fsize, NOCRED, 0, &bp); make_dir(bp->b_data, lfs_root_dir, sizeof(lfs_root_dir) / sizeof(struct lfs_direct)); Index: src/sys/ufs/lfs/lfs.h diff -u src/sys/ufs/lfs/lfs.h:1.145 src/sys/ufs/lfs/lfs.h:1.146 --- src/sys/ufs/lfs/lfs.h:1.145 Sat Jun 8 02:13:33 2013 +++ src/sys/ufs/lfs/lfs.h Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: lfs.h,v 1.145 2013/06/08 02:13:33 dholland Exp $ */ +/* $NetBSD: lfs.h,v 1.146 2013/06/08 02:14:46 dholland Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc. @@ -202,6 +202,63 @@ typedef struct lfs_res_blk { */ /* + * A directory consists of some number of blocks of LFS_DIRBLKSIZ + * bytes, where LFS_DIRBLKSIZ is chosen such that it can be transferred + * to disk in a single atomic operation (e.g. 512 bytes on most machines). + * + * Each LFS_DIRBLKSIZ byte block contains some number of directory entry + * structures, which are of variable length. Each directory entry has + * a struct lfs_direct at the front of it, containing its inode number, + * the length of the entry, and the length of the name contained in + * the entry. These are followed by the name padded to a 4 byte boundary. + * All names are guaranteed null terminated. + * The maximum length of a name in a directory is LFS_MAXNAMLEN. + * + * The macro DIRSIZ(fmt, 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 LFS_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 + * space is returned to the previous entry in the same directory + * block by increasing its dp->d_reclen. If the first entry of + * a directory block is free, then its dp->d_ino is set to 0. + * Entries other than the first in a directory do not normally have + * dp->d_ino set to 0. + */ + +/* + * Directory block size. + */ +#undef LFS_DIRBLKSIZ +#define LFS_DIRBLKSIZ DEV_BSIZE + +/* + * Convert between stat structure types and directory types. + */ +#define LFS_IFTODT(mode) (((mode) & 0170000) >> 12) +#define LFS_DTTOIF(dirtype) ((dirtype) << 12) + +/* + * The LFS_DIRSIZ macro gives the minimum record length which will hold + * the directory entry. This requires the amount of space in struct lfs_direct + * 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) \ + ((sizeof(struct lfs_direct) - (LFS_MAXNAMLEN+1)) + (((namlen)+1 + 3) &~ 3)) + +#if (BYTE_ORDER == LITTLE_ENDIAN) +#define LFS_DIRSIZ(oldfmt, dp, needswap) \ + (((oldfmt) && !(needswap)) ? \ + LFS_DIRECTSIZ((dp)->d_type) : LFS_DIRECTSIZ((dp)->d_namlen)) +#else +#define LFS_DIRSIZ(oldfmt, dp, needswap) \ + (((oldfmt) && (needswap)) ? \ + LFS_DIRECTSIZ((dp)->d_type) : LFS_DIRECTSIZ((dp)->d_namlen)) +#endif + +/* * Theoretically, directories can be more than 2Gb in length; however, in * practice this seems unlikely. So, we define the type doff_t as a 32-bit * quantity to keep down the cost of doing lookup on a 32-bit machine. Index: src/sys/ufs/lfs/lfs_vfsops.c diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.303 src/sys/ufs/lfs/lfs_vfsops.c:1.304 --- src/sys/ufs/lfs/lfs_vfsops.c:1.303 Sat Jun 8 02:11:11 2013 +++ src/sys/ufs/lfs/lfs_vfsops.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: lfs_vfsops.c,v 1.303 2013/06/08 02:11:11 dholland Exp $ */ +/* $NetBSD: lfs_vfsops.c,v 1.304 2013/06/08 02:14:46 dholland Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007 @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.303 2013/06/08 02:11:11 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.304 2013/06/08 02:14:46 dholland Exp $"); #if defined(_KERNEL_OPT) #include "opt_lfs.h" @@ -1027,7 +1027,7 @@ lfs_mountfs(struct vnode *devvp, struct for (i = 0; i < ULFS_MAXQUOTAS; i++) ump->um_quotas[i] = NULLVP; ump->um_maxsymlinklen = fs->lfs_maxsymlinklen; - ump->um_dirblksiz = DIRBLKSIZ; + ump->um_dirblksiz = LFS_DIRBLKSIZ; ump->um_maxfilesize = fs->lfs_maxfilesize; if (ump->um_maxsymlinklen > 0) mp->mnt_iflag |= IMNT_DTYPE; Index: src/sys/ufs/lfs/ulfs_dir.h diff -u src/sys/ufs/lfs/ulfs_dir.h:1.6 src/sys/ufs/lfs/ulfs_dir.h:1.7 --- src/sys/ufs/lfs/ulfs_dir.h:1.6 Sat Jun 8 02:13:33 2013 +++ src/sys/ufs/lfs/ulfs_dir.h Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ulfs_dir.h,v 1.6 2013/06/08 02:13:33 dholland Exp $ */ +/* $NetBSD: ulfs_dir.h,v 1.7 2013/06/08 02:14:46 dholland Exp $ */ /* from NetBSD: dir.h,v 1.21 2009/07/22 04:49:19 dholland Exp */ /* @@ -40,60 +40,7 @@ #ifndef _UFS_LFS_ULFS_DIR_H_ #define _UFS_LFS_ULFS_DIR_H_ -/* - * A directory consists of some number of blocks of DIRBLKSIZ - * bytes, where DIRBLKSIZ is chosen such that it can be transferred - * to disk in a single atomic operation (e.g. 512 bytes on most machines). - * - * Each DIRBLKSIZ byte block contains some number of directory entry - * structures, which are of variable length. Each directory entry has - * a struct lfs_direct at the front of it, containing its inode number, - * the length of the entry, and the length of the name contained in - * the entry. These are followed by the name padded to a 4 byte boundary. - * All names are guaranteed null terminated. - * The maximum length of a name in a directory is LFS_MAXNAMLEN. - * - * The macro DIRSIZ(fmt, 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 - * 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 - * space is returned to the previous entry in the same directory - * block by increasing its dp->d_reclen. If the first entry of - * a directory block is free, then its dp->d_ino is set to 0. - * Entries other than the first in a directory do not normally have - * dp->d_ino set to 0. - */ -#undef DIRBLKSIZ -#define DIRBLKSIZ DEV_BSIZE - -/* - * Convert between stat structure types and directory types. - */ -#define IFTODT(mode) (((mode) & 0170000) >> 12) -#define DTTOIF(dirtype) ((dirtype) << 12) - -/* - * The DIRSIZ macro gives the minimum record length which will hold - * the directory entry. This requires the amount of space in struct lfs_direct - * 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 DIRECTSIZ(namlen) \ - ((sizeof(struct lfs_direct) - (LFS_MAXNAMLEN+1)) + (((namlen)+1 + 3) &~ 3)) - -#if (BYTE_ORDER == LITTLE_ENDIAN) -#define DIRSIZ(oldfmt, dp, needswap) \ - (((oldfmt) && !(needswap)) ? \ - DIRECTSIZ((dp)->d_type) : DIRECTSIZ((dp)->d_namlen)) -#else -#define DIRSIZ(oldfmt, dp, needswap) \ - (((oldfmt) && (needswap)) ? \ - DIRECTSIZ((dp)->d_type) : DIRECTSIZ((dp)->d_namlen)) -#endif - -#define OLDDIRFMT 1 -#define NEWDIRFMT 0 +#define LFS_OLDDIRFMT 1 +#define LFS_NEWDIRFMT 0 #endif /* !_UFS_LFS_ULFS_DIR_H_ */ Index: src/sys/ufs/lfs/ulfs_dirhash.c diff -u src/sys/ufs/lfs/ulfs_dirhash.c:1.4 src/sys/ufs/lfs/ulfs_dirhash.c:1.5 --- src/sys/ufs/lfs/ulfs_dirhash.c:1.4 Sat Jun 8 02:12:56 2013 +++ src/sys/ufs/lfs/ulfs_dirhash.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ulfs_dirhash.c,v 1.4 2013/06/08 02:12:56 dholland Exp $ */ +/* $NetBSD: ulfs_dirhash.c,v 1.5 2013/06/08 02:14:46 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.4 2013/06/08 02:12:56 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ulfs_dirhash.c,v 1.5 2013/06/08 02:14:46 dholland Exp $"); /* * This implements a hash-based lookup scheme for ULFS directories. @@ -147,7 +147,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 / DIRECTSIZ(1); + nslots = ip->i_size / LFS_DIRECTSIZ(1); nslots = (nslots * 3 + 1) / 2; narrays = howmany(nslots, DH_NBLKOFF); nslots = narrays * DH_NBLKOFF; @@ -240,7 +240,7 @@ ulfsdirhash_build(struct inode *ip) slot = WRAPINCR(slot, dh->dh_hlen); dh->dh_hused++; DH_ENTRY(dh, slot) = pos; - ulfsdirhash_adjfree(dh, pos, -DIRSIZ(0, ep, needswap), + ulfsdirhash_adjfree(dh, pos, -LFS_DIRSIZ(0, ep, needswap), dirblksiz); } pos += ep->d_reclen; @@ -449,7 +449,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, needswap); + dh->dh_seqoff = offset + LFS_DIRSIZ(0, dp, needswap); DIRHASH_UNLOCK(dh); *bpp = bp; @@ -541,7 +541,7 @@ ulfsdirhash_findfree(struct inode *ip, i brelse(bp, 0); return (-1); } - if (dp->d_ino == 0 || dp->d_reclen > DIRSIZ(0, dp, needswap)) + if (dp->d_ino == 0 || dp->d_reclen > LFS_DIRSIZ(0, dp, needswap)) break; i += dp->d_reclen; dp = (struct lfs_direct *)((char *)dp + dp->d_reclen); @@ -558,7 +558,7 @@ ulfsdirhash_findfree(struct inode *ip, i while (i < dirblksiz && freebytes < slotneeded) { freebytes += dp->d_reclen; if (dp->d_ino != 0) - freebytes -= DIRSIZ(0, dp, needswap); + freebytes -= LFS_DIRSIZ(0, dp, needswap); if (dp->d_reclen == 0) { DIRHASH_UNLOCK(dh); brelse(bp, 0); @@ -656,7 +656,7 @@ ulfsdirhash_add(struct inode *ip, struct DH_ENTRY(dh, slot) = offset; /* Update the per-block summary info. */ - ulfsdirhash_adjfree(dh, offset, -DIRSIZ(0, dirp, needswap), dirblksiz); + ulfsdirhash_adjfree(dh, offset, -LFS_DIRSIZ(0, dirp, needswap), dirblksiz); DIRHASH_UNLOCK(dh); } @@ -691,7 +691,7 @@ ulfsdirhash_remove(struct inode *ip, str ulfsdirhash_delslot(dh, slot); /* Update the per-block summary info. */ - ulfsdirhash_adjfree(dh, offset, DIRSIZ(0, dirp, needswap), dirblksiz); + ulfsdirhash_adjfree(dh, offset, LFS_DIRSIZ(0, dirp, needswap), dirblksiz); DIRHASH_UNLOCK(dh); } @@ -869,7 +869,7 @@ ulfsdirhash_checkblock(struct inode *ip, /* Check that the entry exists (will panic if it doesn't). */ ulfsdirhash_findslot(dh, dp->d_name, dp->d_namlen, offset + i); - nfree += dp->d_reclen - DIRSIZ(0, dp, needswap); + nfree += dp->d_reclen - LFS_DIRSIZ(0, dp, needswap); } if (i != dirblksiz) panic("ulfsdirhash_checkblock: bad dir end"); Index: src/sys/ufs/lfs/ulfs_dirhash.h diff -u src/sys/ufs/lfs/ulfs_dirhash.h:1.4 src/sys/ufs/lfs/ulfs_dirhash.h:1.5 --- src/sys/ufs/lfs/ulfs_dirhash.h:1.4 Sat Jun 8 02:13:33 2013 +++ src/sys/ufs/lfs/ulfs_dirhash.h Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ulfs_dirhash.h,v 1.4 2013/06/08 02:13:33 dholland Exp $ */ +/* $NetBSD: ulfs_dirhash.h,v 1.5 2013/06/08 02:14:46 dholland Exp $ */ /* from NetBSD: dirhash.h,v 1.6 2008/06/04 11:33:19 ad Exp */ /* @@ -48,7 +48,7 @@ #define DIRHASH_DEL (-2) /* deleted entry; may be part of chain */ #define DIRALIGN 4 -#define DH_NFSTATS (DIRECTSIZ(LFS_MAXNAMLEN + 1) / DIRALIGN) +#define DH_NFSTATS (LFS_DIRECTSIZ(LFS_MAXNAMLEN + 1) / DIRALIGN) /* max DIRALIGN words in a directory entry */ /* Index: src/sys/ufs/lfs/ulfs_extattr.c diff -u src/sys/ufs/lfs/ulfs_extattr.c:1.4 src/sys/ufs/lfs/ulfs_extattr.c:1.5 --- src/sys/ufs/lfs/ulfs_extattr.c:1.4 Thu Jun 6 00:48:04 2013 +++ src/sys/ufs/lfs/ulfs_extattr.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ulfs_extattr.c,v 1.4 2013/06/06 00:48:04 dholland Exp $ */ +/* $NetBSD: ulfs_extattr.c,v 1.5 2013/06/08 02:14:46 dholland Exp $ */ /* from NetBSD: ufs_extattr.c,v 1.41 2012/12/08 13:42:36 manu Exp */ /*- @@ -49,7 +49,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ulfs_extattr.c,v 1.4 2013/06/06 00:48:04 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ulfs_extattr.c,v 1.5 2013/06/08 02:14:46 dholland Exp $"); #ifdef _KERNEL_OPT #include "opt_lfs.h" @@ -546,7 +546,7 @@ ulfs_extattr_iterate_directory(struct ul if (dvp->v_type != VDIR) return (ENOTDIR); - dirbuf = kmem_alloc(DIRBLKSIZ, KM_SLEEP); + dirbuf = kmem_alloc(LFS_DIRBLKSIZ, KM_SLEEP); auio.uio_iov = &aiov; auio.uio_iovcnt = 1; @@ -563,9 +563,9 @@ ulfs_extattr_iterate_directory(struct ul vargs.a_cookies = NULL; while (!eofflag) { - auio.uio_resid = DIRBLKSIZ; + auio.uio_resid = LFS_DIRBLKSIZ; aiov.iov_base = dirbuf; - aiov.iov_len = DIRBLKSIZ; + aiov.iov_len = LFS_DIRBLKSIZ; error = ulfs_readdir(&vargs); if (error) { printf("ulfs_extattr_iterate_directory: ulfs_readdir " @@ -574,12 +574,12 @@ ulfs_extattr_iterate_directory(struct ul } /* - * XXXRW: While in ULFS, we always get DIRBLKSIZ returns from + * XXXRW: While in LFS, we always get LFS_DIRBLKSIZ returns from * the directory code on success, on other file systems this * may not be the case. For portability, we should check the * read length on return from ulfs_readdir(). */ - edp = (struct dirent *)&dirbuf[DIRBLKSIZ]; + edp = (struct dirent *)&dirbuf[LFS_DIRBLKSIZ]; for (dp = (struct dirent *)dirbuf; dp < edp; ) { if (dp->d_reclen == 0) break; @@ -618,7 +618,7 @@ ulfs_extattr_iterate_directory(struct ul break; } } - kmem_free(dirbuf, DIRBLKSIZ); + kmem_free(dirbuf, LFS_DIRBLKSIZ); return (0); } Index: src/sys/ufs/lfs/ulfs_lookup.c diff -u src/sys/ufs/lfs/ulfs_lookup.c:1.8 src/sys/ufs/lfs/ulfs_lookup.c:1.9 --- src/sys/ufs/lfs/ulfs_lookup.c:1.8 Sat Jun 8 02:13:33 2013 +++ src/sys/ufs/lfs/ulfs_lookup.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ulfs_lookup.c,v 1.8 2013/06/08 02:13:33 dholland Exp $ */ +/* $NetBSD: ulfs_lookup.c,v 1.9 2013/06/08 02:14:46 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.8 2013/06/08 02:13:33 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ulfs_lookup.c,v 1.9 2013/06/08 02:14:46 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 = DIRECTSIZ(cnp->cn_namelen); + slotneeded = LFS_DIRECTSIZ(cnp->cn_namelen); } /* @@ -349,7 +349,7 @@ searchloop: int size = ulfs_rw16(ep->d_reclen, needswap); if (ep->d_ino != 0) - size -= DIRSIZ(FSFMT(vdp), ep, needswap); + size -= LFS_DIRSIZ(FSFMT(vdp), ep, needswap); if (size > 0) { if (size >= slotneeded) { slotstatus = FOUND; @@ -529,10 +529,10 @@ found: * Check that directory length properly reflects presence * of this entry. */ - if (results->ulr_offset + DIRSIZ(FSFMT(vdp), ep, needswap) > dp->i_size) { + if (results->ulr_offset + LFS_DIRSIZ(FSFMT(vdp), ep, needswap) > dp->i_size) { ulfs_dirbad(dp, results->ulr_offset, "i_size too small"); dp->i_size = - results->ulr_offset + DIRSIZ(FSFMT(vdp), ep, needswap); + results->ulr_offset + LFS_DIRSIZ(FSFMT(vdp), ep, needswap); DIP_ASSIGN(dp, size, dp->i_size); dp->i_flag |= IN_CHANGE | IN_UPDATE; ULFS_WAPBL_UPDATE(vdp, NULL, NULL, UPDATE_DIROP); @@ -734,13 +734,13 @@ ulfs_dirbadentry(struct vnode *dp, struc ulfs_rw16(ep->d_reclen, needswap) > dirblksiz - (entryoffsetinblock & (dirblksiz - 1)) || ulfs_rw16(ep->d_reclen, needswap) < - DIRSIZ(FSFMT(dp), ep, needswap) || + LFS_DIRSIZ(FSFMT(dp), ep, needswap) || namlen > LFS_MAXNAMLEN) { /*return (1); */ printf("First bad, reclen=%#x, DIRSIZ=%lu, namlen=%d, " "flags=%#x, entryoffsetinblock=%d, dirblksiz = %d\n", ulfs_rw16(ep->d_reclen, needswap), - (u_long)DIRSIZ(FSFMT(dp), ep, needswap), + (u_long)LFS_DIRSIZ(FSFMT(dp), ep, needswap), namlen, dp->v_mount->mnt_flag, entryoffsetinblock, dirblksiz); goto bad; @@ -776,7 +776,7 @@ ulfs_makedirentry(struct inode *ip, stru if (FSFMT(ITOV(ip))) newdirp->d_type = 0; else - newdirp->d_type = IFTODT(ip->i_mode); + newdirp->d_type = LFS_IFTODT(ip->i_mode); } /* @@ -834,7 +834,7 @@ ulfs_direnter(struct vnode *dvp, const s l = curlwp; dp = VTOI(dvp); - newentrysize = DIRSIZ(0, dirp, 0); + newentrysize = LFS_DIRSIZ(0, dirp, 0); if (ulr->ulr_count == 0) { /* @@ -924,7 +924,7 @@ ulfs_direnter(struct vnode *dvp, const s * ulr_offset + ulr_count would yield the space. */ ep = (struct lfs_direct *)dirbuf; - dsize = (ep->d_ino != 0) ? DIRSIZ(FSFMT(dvp), ep, needswap) : 0; + dsize = (ep->d_ino != 0) ? LFS_DIRSIZ(FSFMT(dvp), ep, needswap) : 0; spacefree = ulfs_rw16(ep->d_reclen, needswap) - dsize; for (loc = ulfs_rw16(ep->d_reclen, needswap); loc < ulr->ulr_count; ) { uint16_t reclen; @@ -951,7 +951,7 @@ ulfs_direnter(struct vnode *dvp, const s dsize = 0; continue; } - dsize = DIRSIZ(FSFMT(dvp), nep, needswap); + dsize = LFS_DIRSIZ(FSFMT(dvp), nep, needswap); spacefree += reclen - dsize; #ifdef LFS_DIRHASH if (dp->i_dirhash != NULL) Index: src/sys/ufs/lfs/ulfs_vnops.c diff -u src/sys/ufs/lfs/ulfs_vnops.c:1.8 src/sys/ufs/lfs/ulfs_vnops.c:1.9 --- src/sys/ufs/lfs/ulfs_vnops.c:1.8 Sat Jun 8 02:12:56 2013 +++ src/sys/ufs/lfs/ulfs_vnops.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ulfs_vnops.c,v 1.8 2013/06/08 02:12:56 dholland Exp $ */ +/* $NetBSD: ulfs_vnops.c,v 1.9 2013/06/08 02:14:46 dholland Exp $ */ /* from NetBSD: ufs_vnops.c,v 1.212 2013/03/18 19:35:48 plunky Exp */ /*- @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.8 2013/06/08 02:12:56 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.9 2013/06/08 02:14:46 dholland Exp $"); #if defined(_KERNEL_OPT) #include "opt_lfs.h" @@ -119,8 +119,8 @@ static int ulfs_chown(struct vnode *, ui * A virgin directory (no blushing please). */ static const struct lfs_dirtemplate mastertemplate = { - 0, 12, LFS_DT_DIR, 1, ".", - 0, DIRBLKSIZ - 12, LFS_DT_DIR, 2, ".." + 0, 12, LFS_DT_DIR, 1, ".", + 0, LFS_DIRBLKSIZ - 12, LFS_DT_DIR, 2, ".." }; /* Index: src/sys/ufs/lfs/ulfs_rename.c diff -u src/sys/ufs/lfs/ulfs_rename.c:1.5 src/sys/ufs/lfs/ulfs_rename.c:1.6 --- src/sys/ufs/lfs/ulfs_rename.c:1.5 Sat Jun 8 02:12:56 2013 +++ src/sys/ufs/lfs/ulfs_rename.c Sat Jun 8 02:14:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: ulfs_rename.c,v 1.5 2013/06/08 02:12:56 dholland Exp $ */ +/* $NetBSD: ulfs_rename.c,v 1.6 2013/06/08 02:14:46 dholland Exp $ */ /* from NetBSD: ufs_rename.c,v 1.6 2013/01/22 09:39:18 dholland Exp */ /*- @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ulfs_rename.c,v 1.5 2013/06/08 02:12:56 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ulfs_rename.c,v 1.6 2013/06/08 02:14:46 dholland Exp $"); #include <sys/param.h> #include <sys/buf.h> @@ -272,8 +272,8 @@ ulfs_gro_remove_check_permitted(struct m * XXX Copypasta from ulfs_vnops.c. Kill! */ static const struct lfs_dirtemplate mastertemplate = { - 0, 12, LFS_DT_DIR, 1, ".", - 0, DIRBLKSIZ - 12, LFS_DT_DIR, 2, ".." + 0, 12, LFS_DT_DIR, 1, ".", + 0, LFS_DIRBLKSIZ - 12, LFS_DT_DIR, 2, ".." }; /* @@ -429,7 +429,7 @@ ulfs_gro_rename(struct mount *mp, kauth_ * figure. */ error = ulfs_dirrewrite(VTOI(tdvp), tulr->ulr_offset, - VTOI(tvp), VTOI(fvp)->i_number, IFTODT(VTOI(fvp)->i_mode), + VTOI(tvp), VTOI(fvp)->i_number, LFS_IFTODT(VTOI(fvp)->i_mode), ((directory_p && reparent_p) ? reparent_p : directory_p), IN_CHANGE | IN_UPDATE); if (error)