diff options
author | mckusick <mckusick@FreeBSD.org> | 2002-11-27 02:18:58 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 2002-11-27 02:18:58 +0000 |
commit | 9251693096205ec24c8f8eec7bd9f516b3bb70e5 (patch) | |
tree | d1928be6bf74e88babe007808d7eaa98444918f3 /sbin | |
parent | 4b6c4bf70dda32c0c61b5380253299edaff0df5b (diff) | |
download | FreeBSD-src-9251693096205ec24c8f8eec7bd9f516b3bb70e5.zip FreeBSD-src-9251693096205ec24c8f8eec7bd9f516b3bb70e5.tar.gz |
Create a new 32-bit fs_flags word in the superblock. Add code to move
the old 8-bit fs_old_flags to the new location the first time that the
filesystem is mounted by a new kernel. One of the unused flags in
fs_old_flags is used to indicate that the flags have been moved.
Leave the fs_old_flags word intact so that it will work properly if
used on an old kernel.
Change the fs_sblockloc superblock location field to be in units
of bytes instead of in units of filesystem fragments. The old units
did not work properly when the fragment size exceeeded the superblock
size (8192). Update old fs_sblockloc values at the same time that
the flags are moved.
Suggested by: BOUWSMA Barry <freebsd-misuser@netscum.dyndns.dk>
Sponsored by: DARPA & NAI Labs.
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/badsect/badsect.c | 2 | ||||
-rw-r--r-- | sbin/clri/clri.c | 2 | ||||
-rw-r--r-- | sbin/dump/main.c | 3 | ||||
-rw-r--r-- | sbin/dumpfs/dumpfs.c | 2 | ||||
-rw-r--r-- | sbin/fsck_ffs/fsutil.c | 4 | ||||
-rw-r--r-- | sbin/fsck_ffs/setup.c | 3 | ||||
-rw-r--r-- | sbin/fsirand/fsirand.c | 3 | ||||
-rw-r--r-- | sbin/growfs/growfs.c | 3 | ||||
-rw-r--r-- | sbin/newfs/mkfs.c | 12 | ||||
-rw-r--r-- | sbin/quotacheck/quotacheck.c | 3 | ||||
-rw-r--r-- | sbin/tunefs/tunefs.c | 2 |
11 files changed, 17 insertions, 22 deletions
diff --git a/sbin/badsect/badsect.c b/sbin/badsect/badsect.c index 519f2b7..417cb1e 100644 --- a/sbin/badsect/badsect.c +++ b/sbin/badsect/badsect.c @@ -144,7 +144,7 @@ main(int argc, char *argv[]) rdfs(sblock_try[i] / dev_bsize, SBLOCKSIZE, (char *)fs); if ((fs->fs_magic == FS_UFS1_MAGIC || (fs->fs_magic == FS_UFS2_MAGIC && - fs->fs_sblockloc == numfrags(fs, sblock_try[i]))) && + fs->fs_sblockloc == sblock_try[i])) && fs->fs_bsize <= MAXBSIZE && fs->fs_bsize >= sizeof(struct fs)) break; diff --git a/sbin/clri/clri.c b/sbin/clri/clri.c index 143e301..0aa9c33 100644 --- a/sbin/clri/clri.c +++ b/sbin/clri/clri.c @@ -102,7 +102,7 @@ main(int argc, char *argv[]) sbp = (struct fs *)sblock; if ((sbp->fs_magic == FS_UFS1_MAGIC || (sbp->fs_magic == FS_UFS2_MAGIC && - sbp->fs_sblockloc == numfrags(sbp, sblock_try[i]))) && + sbp->fs_sblockloc == sblock_try[i])) && sbp->fs_bsize <= MAXBSIZE && sbp->fs_bsize >= (int)sizeof(struct fs)) break; diff --git a/sbin/dump/main.c b/sbin/dump/main.c index f4f108b..bc45eae 100644 --- a/sbin/dump/main.c +++ b/sbin/dump/main.c @@ -350,8 +350,7 @@ main(int argc, char *argv[]) bread(sblock_try[i] >> dev_bshift, (char *) sblock, SBLOCKSIZE); if ((sblock->fs_magic == FS_UFS1_MAGIC || (sblock->fs_magic == FS_UFS2_MAGIC && - sblock->fs_sblockloc == - numfrags(sblock, sblock_try[i]))) && + sblock->fs_sblockloc == sblock_try[i])) && sblock->fs_bsize <= MAXBSIZE && sblock->fs_bsize >= sizeof(struct fs)) break; diff --git a/sbin/dumpfs/dumpfs.c b/sbin/dumpfs/dumpfs.c index f0c21d3..9d5c209 100644 --- a/sbin/dumpfs/dumpfs.c +++ b/sbin/dumpfs/dumpfs.c @@ -130,7 +130,7 @@ dumpfs(const char *name) time = afs.fs_time; printf("magic\t%x (UFS2)\ttime\t%s", afs.fs_magic, ctime(&time)); - printf("offset\t%qd\tid\t[ %x %x ]\n", + printf("superblock location\t%qd\tid\t[ %x %x ]\n", afs.fs_sblockloc, afs.fs_id[0], afs.fs_id[1]); printf("ncg\t%d\tsize\t%qd\tblocks\t%d\n", afs.fs_ncg, fssize, afs.fs_dsize); diff --git a/sbin/fsck_ffs/fsutil.c b/sbin/fsck_ffs/fsutil.c index 60b455b..0ce8663 100644 --- a/sbin/fsck_ffs/fsutil.c +++ b/sbin/fsck_ffs/fsutil.c @@ -296,9 +296,9 @@ ckfini(int markclean) } flush(fswritefd, &sblk); if (havesb && cursnapshot == 0 && sblock.fs_magic == FS_UFS2_MAGIC && - sblk.b_bno != fsbtodb(&sblock, sblock.fs_sblockloc) && + sblk.b_bno != sblock.fs_sblockloc / dev_bsize && !preen && reply("UPDATE STANDARD SUPERBLOCK")) { - sblk.b_bno = fsbtodb(&sblock, sblock.fs_sblockloc); + sblk.b_bno = sblock.fs_sblockloc / dev_bsize; sbdirty(); flush(fswritefd, &sblk); } diff --git a/sbin/fsck_ffs/setup.c b/sbin/fsck_ffs/setup.c index db9feb0..87927dc 100644 --- a/sbin/fsck_ffs/setup.c +++ b/sbin/fsck_ffs/setup.c @@ -313,8 +313,7 @@ readsb(int listerr) return (0); if ((sblock.fs_magic == FS_UFS1_MAGIC || (sblock.fs_magic == FS_UFS2_MAGIC && - sblock.fs_sblockloc == - numfrags(&sblock, sblock_try[i]))) && + sblock.fs_sblockloc == sblock_try[i])) && sblock.fs_ncg >= 1 && sblock.fs_bsize >= MINBSIZE && sblock.fs_bsize >= sizeof(struct fs)) diff --git a/sbin/fsirand/fsirand.c b/sbin/fsirand/fsirand.c index a4d922b..7b6274f 100644 --- a/sbin/fsirand/fsirand.c +++ b/sbin/fsirand/fsirand.c @@ -152,8 +152,7 @@ fsirand(char *device) } if ((sblock->fs_magic == FS_UFS1_MAGIC || (sblock->fs_magic == FS_UFS2_MAGIC && - sblock->fs_sblockloc == - numfrags(sblock, sblock_try[i]))) && + sblock->fs_sblockloc == sblock_try[i])) && sblock->fs_bsize <= MAXBSIZE && sblock->fs_bsize >= sizeof(struct fs)) break; diff --git a/sbin/growfs/growfs.c b/sbin/growfs/growfs.c index 368fa99..a9719ae 100644 --- a/sbin/growfs/growfs.c +++ b/sbin/growfs/growfs.c @@ -2048,8 +2048,7 @@ main(int argc, char **argv) rdfs(sblockloc, (size_t)SBLOCKSIZE, (void *)&(osblock), fsi); if ((osblock.fs_magic == FS_UFS1_MAGIC || (osblock.fs_magic == FS_UFS2_MAGIC && - osblock.fs_sblockloc == - numfrags(&osblock, sblock_try[i]))) && + osblock.fs_sblockloc == sblock_try[i])) && osblock.fs_bsize <= MAXBSIZE && osblock.fs_bsize >= sizeof(struct fs)) break; diff --git a/sbin/newfs/mkfs.c b/sbin/newfs/mkfs.c index 2de9b43..837f608 100644 --- a/sbin/newfs/mkfs.c +++ b/sbin/newfs/mkfs.c @@ -149,6 +149,7 @@ mkfs(struct partition *pp, char *fsys) exit(38); } bzero(iobuf, iobufsize); + sblock.fs_old_flags = FS_FLAGS_UPDATED; sblock.fs_flags = 0; if (Uflag) sblock.fs_flags |= FS_DOSOFTDEP; @@ -243,7 +244,7 @@ mkfs(struct partition *pp, char *fsys) sblock.fs_size = fssize = dbtofsb(&sblock, fssize); if (Oflag == 1) { sblock.fs_magic = FS_UFS1_MAGIC; - sblock.fs_sblockloc = numfrags(&sblock, SBLOCK_UFS1); + sblock.fs_sblockloc = SBLOCK_UFS1; sblock.fs_nindir = sblock.fs_bsize / sizeof(ufs1_daddr_t); sblock.fs_inopb = sblock.fs_bsize / sizeof(struct ufs1_dinode); sblock.fs_maxsymlinklen = ((NDADDR + NIADDR) * @@ -263,15 +264,15 @@ mkfs(struct partition *pp, char *fsys) sblock.fs_old_nrpos = 1; } else { sblock.fs_magic = FS_UFS2_MAGIC; - sblock.fs_sblockloc = numfrags(&sblock, SBLOCK_UFS2); + sblock.fs_sblockloc = SBLOCK_UFS2; sblock.fs_nindir = sblock.fs_bsize / sizeof(ufs2_daddr_t); sblock.fs_inopb = sblock.fs_bsize / sizeof(struct ufs2_dinode); sblock.fs_maxsymlinklen = ((NDADDR + NIADDR) * sizeof(ufs2_daddr_t)); } sblock.fs_sblkno = - roundup(howmany(lfragtosize(&sblock, sblock.fs_sblockloc) + - SBLOCKSIZE, sblock.fs_fsize), sblock.fs_frag); + roundup(howmany(sblock.fs_sblockloc + SBLOCKSIZE, sblock.fs_fsize), + sblock.fs_frag); sblock.fs_cblkno = sblock.fs_sblkno + roundup(howmany(SBLOCKSIZE, sblock.fs_fsize), sblock.fs_frag); sblock.fs_iblkno = sblock.fs_cblkno + sblock.fs_frag; @@ -476,8 +477,7 @@ mkfs(struct partition *pp, char *fsys) sblock.fs_old_cstotal.cs_nifree = sblock.fs_cstotal.cs_nifree; sblock.fs_old_cstotal.cs_nffree = sblock.fs_cstotal.cs_nffree; } - wtfs(lfragtosize(&sblock, sblock.fs_sblockloc) / sectorsize, - SBLOCKSIZE, (char *)&sblock); + wtfs(sblock.fs_sblockloc / sectorsize, SBLOCKSIZE, (char *)&sblock); for (i = 0; i < sblock.fs_cssize; i += sblock.fs_bsize) wtfs(fsbtodb(&sblock, sblock.fs_csaddr + numfrags(&sblock, i)), sblock.fs_cssize - i < sblock.fs_bsize ? diff --git a/sbin/quotacheck/quotacheck.c b/sbin/quotacheck/quotacheck.c index 4c2aa23..88f042e 100644 --- a/sbin/quotacheck/quotacheck.c +++ b/sbin/quotacheck/quotacheck.c @@ -291,8 +291,7 @@ chkquota(fsname, mntpt, qnp) bread(sblock_try[i], (char *)&sblock, (long)SBLOCKSIZE); if ((sblock.fs_magic == FS_UFS1_MAGIC || (sblock.fs_magic == FS_UFS2_MAGIC && - sblock.fs_sblockloc == - numfrags(&sblock, sblock_try[i]))) && + sblock.fs_sblockloc == sblock_try[i])) && sblock.fs_bsize <= MAXBSIZE && sblock.fs_bsize >= sizeof(struct fs)) break; diff --git a/sbin/tunefs/tunefs.c b/sbin/tunefs/tunefs.c index 8b7f5db..5256474 100644 --- a/sbin/tunefs/tunefs.c +++ b/sbin/tunefs/tunefs.c @@ -404,7 +404,7 @@ getsb(fs, file) err(4, "%s: bad super block", file); if ((fs->fs_magic == FS_UFS1_MAGIC || (fs->fs_magic == FS_UFS2_MAGIC && - fs->fs_sblockloc == numfrags(fs, sblock_try[i]))) && + fs->fs_sblockloc == sblock_try[i])) && fs->fs_bsize <= MAXBSIZE && fs->fs_bsize >= sizeof(struct fs)) break; |