[PATCH] bring incompletely initialized magic to UFS1
Xin LI
delphij at frontfree.net
Mon Jan 26 22:54:34 PST 2004
>Submitter-Id: current-users
>Originator: Xin LI
>Organization: The FreeBSD Simplified Chinese Project
>Confidential: no
>Synopsis: [PATCH] bring incompletely initialized magic to UFS1
>Severity: non-critical
>Priority: low
>Category: bin
>Class: change-request
>Release: FreeBSD 5.2-RELEASE i386
>Environment:
System: FreeBSD beastie.frontfree.net 5.2-RELEASE FreeBSD 5.2-RELEASE #16: Sat Jan 10 15:24:09 CST 2004 delphij at beastie.frontfree.net:/usr/obj/usr/src/sys/BEASTIE i386
>Description:
The attached is a proposal patch to make it possible to mark UFS1 as "incompletely initialized" when newfs(8) did not have it actually initialized. To implement this, I have borrowed the "bad UFS2" magic number.
Please review this patch. Frankly I am not sure if this is useful in most circumstances, but a "incomplete" flag is really useful for certain needs.
>How-To-Repeat:
>Fix:
Apply the attached patch to src/ tree.
--- patch2 begins here ---
Index: sbin/fsck_ffs/setup.c
===================================================================
RCS file: /home/mirror/freebsd/ncvs/src/sbin/fsck_ffs/setup.c,v
retrieving revision 1.46
diff -u -r1.46 setup.c
--- sbin/fsck_ffs/setup.c 26 Jan 2004 15:05:30 -0000 1.46
+++ sbin/fsck_ffs/setup.c 27 Jan 2004 03:48:07 -0000
@@ -310,7 +310,7 @@
super = bflag;
if ((bread(fsreadfd, (char *)&sblock, super, (long)SBLOCKSIZE)))
return (0);
- if (sblock.fs_magic == FS_BAD2_MAGIC) {
+ if (sblock.fs_magic == FS_BAD_MAGIC) {
fprintf(stderr, BAD_MAGIC_MSG);
exit(11);
}
@@ -326,7 +326,7 @@
if ((bread(fsreadfd, (char *)&sblock, super,
(long)SBLOCKSIZE)))
return (0);
- if (sblock.fs_magic == FS_BAD2_MAGIC) {
+ if (sblock.fs_magic == FS_BAD_MAGIC) {
fprintf(stderr, BAD_MAGIC_MSG);
exit(11);
}
Index: sbin/newfs/mkfs.c
===================================================================
RCS file: /home/mirror/freebsd/ncvs/src/sbin/newfs/mkfs.c,v
retrieving revision 1.83
diff -u -r1.83 mkfs.c
--- sbin/newfs/mkfs.c 27 Nov 2003 01:19:23 -0000 1.83
+++ sbin/newfs/mkfs.c 27 Jan 2004 04:17:01 -0000
@@ -238,8 +238,14 @@
}
sblock.fs_fsbtodb = ilog2(sblock.fs_fsize / sectorsize);
sblock.fs_size = fssize = dbtofsb(&sblock, fssize);
+
+ /*
+ * Before the filesystem is finally initialized, mark it
+ * as incompletely initialized.
+ */
+ sblock.fs_magic = FS_BAD_MAGIC;
+
if (Oflag == 1) {
- sblock.fs_magic = FS_UFS1_MAGIC;
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);
@@ -259,7 +265,6 @@
sblock.fs_old_postblformat = 1;
sblock.fs_old_nrpos = 1;
} else {
- sblock.fs_magic = FS_BAD2_MAGIC;
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);
@@ -457,8 +462,8 @@
}
if (Eflag == 2)
printf("** Leaving BAD MAGIC on Eflag 2\n");
- else if (Oflag != 1)
- sblock.fs_magic = FS_UFS2_MAGIC;
+ else
+ sblock.fs_magic = (Oflag != 1) ? FS_UFS2_MAGIC : FS_UFS1_MAGIC;
/*
* Now build the cylinders group blocks and
Index: sys/ufs/ffs/fs.h
===================================================================
RCS file: /home/mirror/freebsd/ncvs/src/sys/ufs/ffs/fs.h,v
retrieving revision 1.40
diff -u -r1.40 fs.h
--- sys/ufs/ffs/fs.h 16 Nov 2003 07:08:27 -0000 1.40
+++ sys/ufs/ffs/fs.h 27 Jan 2004 03:53:58 -0000
@@ -361,7 +361,7 @@
*/
#define FS_UFS1_MAGIC 0x011954 /* UFS1 fast filesystem magic number */
#define FS_UFS2_MAGIC 0x19540119 /* UFS2 fast filesystem magic number */
-#define FS_BAD2_MAGIC 0x19960408 /* UFS2 incomplete newfs magic number */
+#define FS_BAD_MAGIC 0x19960408 /* UFS incomplete newfs magic number */
#define FS_OKAY 0x7c269d38 /* superblock checksum */
#define FS_42INODEFMT -1 /* 4.2BSD inode format */
#define FS_44INODEFMT 2 /* 4.4BSD inode format */
--- patch2 ends here ---
More information about the freebsd-fs
mailing list