[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