Date: Sun, 16 Dec 2001 13:50:15 +0000 From: Ian Dowse <iedowse@maths.tcd.ie> To: Jake Burkholder <jake@locore.ca> 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: <200112161350.aa62493@salmon.maths.tcd.ie> In-Reply-To: Your message of "Sat, 15 Dec 2001 23:46:03 EST." <20011215234603.B35198@locore.ca>
next in thread | previous in thread | raw e-mail | index | archive | help
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 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? <200112161350.aa62493>