Date: Sun, 16 Dec 2001 10:09:38 -0500 From: Jake Burkholder <jake@locore.ca> To: Ian Dowse <iedowse@maths.tcd.ie> Cc: Kirk McKusick <mckusick@FreeBSD.org>, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/ufs/ffs ffs_alloc.c ffs_snapshot.c ffs_vfsops.c fs.h Message-ID: <20011216100938.E35198@locore.ca> In-Reply-To: <200112161350.aa62493@salmon.maths.tcd.ie>; from iedowse@maths.tcd.ie on Sun, Dec 16, 2001 at 01:50:15PM %2B0000 References: <20011215234603.B35198@locore.ca> <200112161350.aa62493@salmon.maths.tcd.ie>
next in thread | previous in thread | raw e-mail | index | archive | help
Apparently, On Sun, Dec 16, 2001 at 01:50:15PM +0000, Ian Dowse said words to the effect of; > In message <20011215234603.B35198@locore.ca>, Jake Burkholder writes: > >This breaks compatibility with existing filesystems for 64 bit > >platforms. You added a pointer field to struct fs and decreased > >the size of the sparecon array by 4 bytes. Pointers are 8 bytes > >on 64 bit platforms, so the magic number ends up in a different > >place. > > Does the following patch help? It moves fs_active to a section of > the superblock that already correctly deals with pointer fields. > > Ian Yes, that fixes it. Thanks. Jake > > Index: ffs_vfsops.c > =================================================================== > RCS file: /home/iedowse/CVS/src/sys/ufs/ffs/ffs_vfsops.c,v > retrieving revision 1.164 > diff -u -r1.164 ffs_vfsops.c > --- ffs_vfsops.c 14 Dec 2001 00:15:05 -0000 1.164 > +++ ffs_vfsops.c 16 Dec 2001 13:44:08 -0000 > @@ -430,6 +430,7 @@ > newfs->fs_csp = fs->fs_csp; > newfs->fs_maxcluster = fs->fs_maxcluster; > newfs->fs_contigdirs = fs->fs_contigdirs; > + newfs->fs_active = fs->fs_active; > bcopy(newfs, fs, (u_int)fs->fs_sbsize); > if (fs->fs_sbsize < SBSIZE) > bp->b_flags |= B_INVAL | B_NOCACHE; > @@ -636,7 +637,6 @@ > fs->fs_pendingblocks = 0; > fs->fs_pendinginodes = 0; > } > - fs->fs_active = 0; > /* XXX updating 4.2 FFS superblocks trashes rotational layout tables */ > if (fs->fs_postblformat == FS_42POSTBLFMT && !ronly) { > error = EROFS; /* needs translation */ > @@ -690,6 +690,7 @@ > size = fs->fs_ncg * sizeof(u_int8_t); > fs->fs_contigdirs = (u_int8_t *)space; > bzero(fs->fs_contigdirs, size); > + fs->fs_active = NULL; > /* Compatibility for old filesystems XXX */ > if (fs->fs_avgfilesize <= 0) /* XXX */ > fs->fs_avgfilesize = AVFILESIZ; /* XXX */ > Index: fs.h > =================================================================== > RCS file: /home/iedowse/CVS/src/sys/ufs/ffs/fs.h,v > retrieving revision 1.24 > diff -u -r1.24 fs.h > --- fs.h 14 Dec 2001 00:15:06 -0000 1.24 > +++ fs.h 16 Dec 2001 13:44:08 -0000 > @@ -108,7 +108,7 @@ > /* > * There is a 128-byte region in the superblock reserved for in-core > * pointers to summary information. Originally this included an array > - * of pointers to blocks of struct csum; now there are just three > + * of pointers to blocks of struct csum; now there are just a few > * pointers and the remaining space is padded with fs_ocsp[]. > * > * NOCSPTRS determines the size of this padding. One pointer (fs_csp) > @@ -116,9 +116,11 @@ > * all cylinder groups; a second (fs_maxcluster) points to an array > * of cluster sizes that is computed as cylinder groups are inspected, > * and the third points to an array that tracks the creation of new > - * directories. > + * directories. A fourth pointer, fs_active, is used when creating > + * snapshots; it points to a bitmap of cylinder groups for which the > + * free-block bitmap has changed since the snapshot operation began. > */ > -#define NOCSPTRS ((128 / sizeof(void *)) - 3) > +#define NOCSPTRS ((128 / sizeof(void *)) - 4) > > /* > * A summary of contiguous blocks of various sizes is maintained > @@ -290,13 +292,13 @@ > u_int8_t *fs_contigdirs; /* # of contiguously allocated dirs */ > struct csum *fs_csp; /* cg summary info buffer for fs_cs */ > int32_t *fs_maxcluster; /* max cluster in each cyl group */ > + u_int8_t *fs_active; /* used by snapshots to track fs */ > int32_t fs_cpc; /* cyl per cycle in postbl */ > int16_t fs_opostbl[16][8]; /* old rotation block list head */ > int32_t fs_snapinum[FSMAXSNAP];/* list of snapshot inode numbers */ > int32_t fs_avgfilesize; /* expected average file size */ > int32_t fs_avgfpdir; /* expected # of files per directory */ > - u_int8_t *fs_active; /* used by snapshots to track fs */ > - int32_t fs_sparecon[25]; /* reserved for future constants */ > + int32_t fs_sparecon[26]; /* reserved for future constants */ > int32_t fs_pendingblocks; /* blocks in process of being freed */ > int32_t fs_pendinginodes; /* inodes in process of being freed */ > int32_t fs_contigsumsize; /* size of cluster summary array */ 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?20011216100938.E35198>