newfs for UFS2 problems
Alex Popa
razor at ldc.ro
Tue Apr 29 15:24:54 PDT 2003
Hello, sorry for the delay in testing and answering.
The patch seems to work with a little modification, deduced from this:
lib/libufs/block.c, line 80:
bwrite(struct uufsd *disk, ufs2_daddr_t blockno, const void *data, size_t size)
...
cnt = pwrite(disk->d_fd, data, size, (off_t)(blockno * disk->d_bsize));
...
It look that it multiplies by a block size. However, in
sys/ufs/ffs/fs.h, lines 68-69 mention the superblock offset is defined
in bytes, not blocks.
So it seems we need to change your "SBLOCK_UFS1" to
"SBLOCK_UFS1 / disk.d_bsize", to get the expected result (overwriting
the old ufs1 superblock). This is all I have changed in your patch
(the modified patch is below). I have tested it, and dumpfs and mount
from 4.8 now complain about a missing magic number / incorrect
superblock.
Thanks for your help
Alex
---8<---
Index: sbin/newfs/mkfs.c
===================================================================
RCS file: /home/ncvs/src/sbin/newfs/mkfs.c,v
retrieving revision 1.74
diff -u -r1.74 mkfs.c
--- sbin/newfs/mkfs.c 22 Feb 2003 23:26:11 -0000 1.74
+++ sbin/newfs/mkfs.c 29 Apr 2003 21:57:33 -0000
@@ -113,6 +113,7 @@
quad_t sizepb;
int width;
char tmpbuf[100]; /* XXX this will break in about 2,500 years */
+ char dummy[SBLOCKSIZE];
/*
* Our blocks == sector size, and the version of UFS we are using is
@@ -479,8 +480,13 @@
sblock.fs_old_cstotal.cs_nifree = sblock.fs_cstotal.cs_nifree;
sblock.fs_old_cstotal.cs_nffree = sblock.fs_cstotal.cs_nffree;
}
- if (!Nflag)
+ if (!Nflag) {
+ if (Oflag != 1) {
+ memset(dummy, '\0', SBLOCKSIZE);
+ bwrite(&disk, SBLOCK_UFS1 / disk.d_bsize, dummy, SBLOCKSIZE);
+ }
sbwrite(&disk, 0);
+ }
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 ?
---8<---
On Sat, Apr 26, 2003 at 11:01:41PM +0200, Lukas Ertl wrote:
> Alex Popa wrote:
>
> > It seems the problem is partly caused by newfs on -current, which does
> > not remove the old UFS1 magic when creating an UFS2 superblock at a
> > different location. This leftover magic is seen by the -stable kernel
> > and therefore used.
>
> Hi Alex,
>
> could you try this patch to newfs(8)? It wipes the old UFS1 superblock
> at location SBLOCK_UFS1 before writing the new superblock at location
> SBLOCK_UFS2.
>
>
> best regards,
> le
>
> --
> Lukas Ertl eMail: l.ertl at univie.ac.at
> UNIX-Systemadministrator Tel.: (+43 1) 4277-14073
> Zentraler Informatikdienst (ZID) Fax.: (+43 1) 4277-9140
> der Universit?t Wien http://mailbox.univie.ac.at/~le/
------------+-------------------------------------------------------
Alex Popa, | "Computer science is no more about computers than
razor at ldc.ro| astronomy is about telescopes" -- E. W. Dijkstra
------------+------------------------------------------------------
More information about the freebsd-current
mailing list