Module Name: src
Committed By: uch
Date: Tue Aug 9 09:12:07 UTC 2011
Modified Files:
src/sbin/newfs_v7fs: main.c
Log Message:
Check whether superblock is writable sector.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sbin/newfs_v7fs/main.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/newfs_v7fs/main.c
diff -u src/sbin/newfs_v7fs/main.c:1.7 src/sbin/newfs_v7fs/main.c:1.8
--- src/sbin/newfs_v7fs/main.c:1.7 Fri Jul 22 09:15:10 2011
+++ src/sbin/newfs_v7fs/main.c Tue Aug 9 09:12:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.7 2011/07/22 09:15:10 uch Exp $ */
+/* $NetBSD: main.c,v 1.8 2011/08/09 09:12:07 uch Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: main.c,v 1.7 2011/07/22 09:15:10 uch Exp $");
+__RCSID("$NetBSD: main.c,v 1.8 2011/08/09 09:12:07 uch Exp $");
#endif /* not lint */
#include <sys/param.h>
@@ -72,6 +72,26 @@
}
static int
+partition_check(struct v7fs_self *fs)
+{
+ struct v7fs_superblock *sb = &fs->superblock;
+ int error;
+
+ if ((error = v7fs_superblock_load(fs))) {
+ warnx("Can't read superblock sector.");
+ }
+ sb->modified = 1;
+ if ((error = v7fs_superblock_writeback(fs))) {
+ if (errno == EROFS) {
+ warnx("Overwriting disk label? ");
+ }
+ warnx("Can't write superblock sector.");
+ }
+
+ return error;
+}
+
+static int
make_root(struct v7fs_self *fs)
{
struct v7fs_inode inode;
@@ -126,7 +146,7 @@
v7fs_inode_writeback(fs, &inode);
if ((error = v7fs_superblock_writeback(fs))) {
errno = error;
- warn("Can't write superblock.");
+ warnx("Can't write superblock.");
}
return error;
@@ -272,6 +292,10 @@
fs->endian = mount->endian;
v7fs_endian_init(fs);
+ if ((error = partition_check(fs))) {
+ return error;
+ }
+
/* Construct filesystem. */
if ((error = make_filesystem(fs, volume_size, ilist_size))) {
return error;