Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Feb 2010 03:04:31 +0000 (UTC)
From:      Jeff Roberson <jeff@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r203981 - projects/suj/head/sbin/tunefs
Message-ID:  <201002170304.o1H34VWL014867@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jeff
Date: Wed Feb 17 03:04:31 2010
New Revision: 203981
URL: http://svn.freebsd.org/changeset/base/203981

Log:
   - Fix clearing of the immutable journal flags so it may be more easily
     removed by administrators.
   - Set the NODUMP flag as suggested by rwatson.

Modified:
  projects/suj/head/sbin/tunefs/tunefs.c

Modified: projects/suj/head/sbin/tunefs/tunefs.c
==============================================================================
--- projects/suj/head/sbin/tunefs/tunefs.c	Wed Feb 17 01:14:28 2010	(r203980)
+++ projects/suj/head/sbin/tunefs/tunefs.c	Wed Feb 17 03:04:31 2010	(r203981)
@@ -600,6 +600,7 @@ journal_findfile(void)
 {
 	struct ufs1_dinode *dp1;
 	struct ufs2_dinode *dp2;
+	ino_t ino;
 	int mode;
 	void *ip;
 	int i;
@@ -618,9 +619,9 @@ journal_findfile(void)
 		for (i = 0; i < NDADDR; i++) {
 			if (dp1->di_db[i] == 0)
 				break;
-			if (dir_search(dp1->di_db[i],
-			    sblksize(&sblock, (off_t)dp1->di_size, i)) != 0)
-				return (-1);
+			if ((ino = dir_search(dp1->di_db[i],
+			    sblksize(&sblock, (off_t)dp1->di_size, i))) != 0)
+				return (ino);
 		}
 	} else {
 		if ((off_t)dp1->di_size >= lblktosize(&sblock, NDADDR)) {
@@ -630,9 +631,9 @@ journal_findfile(void)
 		for (i = 0; i < NDADDR; i++) {
 			if (dp2->di_db[i] == 0)
 				break;
-			if (dir_search(dp2->di_db[i],
-			    sblksize(&sblock, (off_t)dp2->di_size, i)) != 0)
-				return (-1);
+			if ((ino = dir_search(dp2->di_db[i],
+			    sblksize(&sblock, (off_t)dp2->di_size, i))) != 0)
+				return (ino);
 		}
 	}
 
@@ -831,10 +832,11 @@ journal_clear(void)
 	void *ip;
 
 	ino = journal_findfile();
-	if (ino <= 0) {
+	if (ino == (ino_t)-1 || ino == 0) {
 		warnx("Journal file does not exist");
 		return;
 	}
+	printf("Clearing journal flags from inode %d\n", ino);
 	if (getino(&disk, &ip, ino, &mode) != 0) {
 		warn("Failed to get journal inode");
 		return;
@@ -872,11 +874,13 @@ journal_alloc(int64_t size)
 	 * If the journal file exists we can't allocate it.
 	 */
 	ino = journal_findfile();
-	if (ino > 0)
+	if (ino == (ino_t)-1)
+		return (-1);
+	if (ino > 0) {
 		warnx("Journal file %s already exists, please remove.",
 		    SUJ_FILE);
-	if (ino != 0)
 		return (-1);
+	}
 	/*
 	 * If the user didn't supply a size pick one based on the filesystem
 	 * size constrained with hardcoded MIN and MAX values.  We opt for
@@ -930,13 +934,13 @@ journal_alloc(int64_t size)
 			dp1->di_size = size;
 			dp1->di_mode = IFREG | IREAD;
 			dp1->di_nlink = 1;
-			dp1->di_flags = SF_IMMUTABLE | SF_NOUNLINK;
+			dp1->di_flags = SF_IMMUTABLE | SF_NOUNLINK | UF_NODUMP;
 		} else {
 			bzero(dp2, sizeof(*dp2));
 			dp2->di_size = size;
 			dp2->di_mode = IFREG | IREAD;
 			dp2->di_nlink = 1;
-			dp2->di_flags = SF_IMMUTABLE | SF_NOUNLINK;
+			dp2->di_flags = SF_IMMUTABLE | SF_NOUNLINK | UF_NODUMP;
 		}
 		for (i = 0; i < NDADDR && resid; i++, resid--) {
 			blk = journal_balloc();



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002170304.o1H34VWL014867>