Date: Sun, 15 Dec 2002 14:04:20 -0500 From: Jake Burkholder <jake@locore.ca> To: Kirk McKusick <mckusick@beastie.mckusick.com> Cc: cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org, re@FreeBSD.org Subject: Re: cvs commit: src/sys/ufs/ufs inode.h src/sys/sys conf.h src/sys/ufs/ffs ffs_snapshot.c Message-ID: <20021215140419.B9183@locore.ca> In-Reply-To: <200212142029.gBEKTk59012126@beastie.mckusick.com>; from mckusick@beastie.mckusick.com on Sat, Dec 14, 2002 at 12:29:46PM -0800 References: <200212141656.aa51164@salmon.maths.tcd.ie> <200212142029.gBEKTk59012126@beastie.mckusick.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Apparently, On Sat, Dec 14, 2002 at 12:29:46PM -0800, Kirk McKusick said words to the effect of; > As a followup to my previous message, here is my proposed (and > even tested!) change to use an appropriately wide field. > So is this going to be committed? I'm tired of the tinderbox failing and would like to update my sparcs. I'm glad I had an older perforce tree so I was able to get some work done this weekend. Jake > Kirk McKusick > > =-=-=-=-= > > Index: ufs/ufs/inode.h > =================================================================== > RCS file: /usr/ncvs/src/sys/ufs/ufs/inode.h,v > retrieving revision 1.42 > diff -c -r1.42 inode.h > *** ufs/ufs/inode.h 2002/12/14 01:36:59 1.42 > --- ufs/ufs/inode.h 2002/12/14 20:22:06 > *************** > *** 85,91 **** > ino_t i_ino; /* Inode number of found directory. */ > u_int32_t i_reclen; /* Size of found directory entry. */ > > ! struct dirhash *i_dirhash; /* Hashing for large directories */ > > /* > * Data for extended attribute modification. > --- 85,94 ---- > ino_t i_ino; /* Inode number of found directory. */ > u_int32_t i_reclen; /* Size of found directory entry. */ > > ! union { > ! struct dirhash *dirhash; /* Hashing for large directories. */ > ! daddr_t *snapblklist; /* Collect expunged snapshot blocks. */ > ! } i_un; > > /* > * Data for extended attribute modification. > *************** > *** 124,129 **** > --- 127,134 ---- > #define IN_LAZYMOD 0x0040 /* Modified, but don't write yet. */ > #define IN_SPACECOUNTED 0x0080 /* Blocks to be freed in free count. */ > > + #define i_dirhash i_un.dirhash > + #define i_snapblklist i_un.snapblklist > #define i_din1 dinode_u.din1 > #define i_din2 dinode_u.din2 > > Index: ufs/ffs/ffs_snapshot.c > =================================================================== > RCS file: /usr/ncvs/src/sys/ufs/ffs/ffs_snapshot.c,v > retrieving revision 1.54 > diff -c -r1.54 ffs_snapshot.c > *** ufs/ffs/ffs_snapshot.c 2002/12/14 01:36:59 1.54 > --- ufs/ffs/ffs_snapshot.c 2002/12/14 20:16:37 > *************** > *** 532,549 **** > } > /* > * Allocate the space for the list of preallocated snapshot blocks. > - * The i_offset field is borrowed to pass the value of snapblklist > - * down into the expunge functions. > */ > snaplistsize = fs->fs_ncg + howmany(fs->fs_cssize, fs->fs_bsize) + > FSMAXSNAP + 1 /* superblock */ + 1 /* last block */ + 1 /* size */; > MALLOC(snapblklist, daddr_t *, snaplistsize * sizeof(daddr_t), > M_UFSMNT, M_WAITOK); > ! ((daddr_t *)(ip->i_offset)) = &snapblklist[1]; > /* > * Expunge the blocks used by the snapshots from the set of > * blocks marked as used in the snapshot bitmaps. Also, collect > ! * the list of allocated blocks in i_offset. > */ > if (ip->i_ump->um_fstype == UFS1) > error = expunge_ufs1(vp, ip, copy_fs, mapacct_ufs1, BLK_SNAP); > --- 532,547 ---- > } > /* > * Allocate the space for the list of preallocated snapshot blocks. > */ > snaplistsize = fs->fs_ncg + howmany(fs->fs_cssize, fs->fs_bsize) + > FSMAXSNAP + 1 /* superblock */ + 1 /* last block */ + 1 /* size */; > MALLOC(snapblklist, daddr_t *, snaplistsize * sizeof(daddr_t), > M_UFSMNT, M_WAITOK); > ! ip->i_snapblklist = &snapblklist[1]; > /* > * Expunge the blocks used by the snapshots from the set of > * blocks marked as used in the snapshot bitmaps. Also, collect > ! * the list of allocated blocks in i_snapblklist. > */ > if (ip->i_ump->um_fstype == UFS1) > error = expunge_ufs1(vp, ip, copy_fs, mapacct_ufs1, BLK_SNAP); > *************** > *** 554,562 **** > FREE(snapblklist, M_UFSMNT); > goto done; > } > ! snaplistsize = ((daddr_t *)(ip->i_offset)) - snapblklist; > snapblklist[0] = snaplistsize; > ! ip->i_offset = 0; > /* > * Write out the list of allocated blocks to the end of the snapshot. > */ > --- 552,560 ---- > FREE(snapblklist, M_UFSMNT); > goto done; > } > ! snaplistsize = ip->i_snapblklist - snapblklist; > snapblklist[0] = snaplistsize; > ! ip->i_snapblklist = 0; > /* > * Write out the list of allocated blocks to the end of the snapshot. > */ > *************** > *** 999,1005 **** > if (blkno == 0 || blkno == BLK_NOCOPY) > continue; > if (expungetype == BLK_SNAP && blkno != BLK_SNAP) > ! *((daddr_t *)(ip->i_offset))++ = lblkno; > if (blkno == BLK_SNAP) > blkno = blkstofrags(fs, lblkno); > ffs_blkfree(fs, vp, blkno, fs->fs_bsize, inum); > --- 997,1003 ---- > if (blkno == 0 || blkno == BLK_NOCOPY) > continue; > if (expungetype == BLK_SNAP && blkno != BLK_SNAP) > ! *ip->i_snapblklist++ = lblkno; > if (blkno == BLK_SNAP) > blkno = blkstofrags(fs, lblkno); > ffs_blkfree(fs, vp, blkno, fs->fs_bsize, inum); > *************** > *** 1275,1281 **** > if (blkno == 0 || blkno == BLK_NOCOPY) > continue; > if (expungetype == BLK_SNAP && blkno != BLK_SNAP) > ! *((daddr_t *)(ip->i_offset))++ = lblkno; > if (blkno == BLK_SNAP) > blkno = blkstofrags(fs, lblkno); > ffs_blkfree(fs, vp, blkno, fs->fs_bsize, inum); > --- 1273,1279 ---- > if (blkno == 0 || blkno == BLK_NOCOPY) > continue; > if (expungetype == BLK_SNAP && blkno != BLK_SNAP) > ! *ip->i_snapblklist++ = lblkno; > if (blkno == BLK_SNAP) > blkno = blkstofrags(fs, lblkno); > ffs_blkfree(fs, vp, blkno, fs->fs_bsize, inum); To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021215140419.B9183>