Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Apr 2001 18:00:25 -0700
From:      Dima Dorfman <dima@unixfreak.org>
To:        Jordan Hubbard <jkh@osd.bsdi.com>
Cc:        freebsd-stable@FreeBSD.ORG
Subject:   Re: Dump problem 
Message-ID:  <20010419010025.B88293E09@bazooka.unixfreak.org>
In-Reply-To: <20010418175053L.jkh@osd.bsdi.com>; from jkh@osd.bsdi.com on "Wed, 18 Apr 2001 17:50:53 -0700"

next in thread | previous in thread | raw e-mail | index | archive | help
Jordan Hubbard <jkh@osd.bsdi.com> writes:
> This close to release, I just want it fixed, we can argue about
> process later. :)

I'm sorry if I sounded like I wanted to argue about it.  I'm not
complaining.  Please feel free to commit the patch to -current and
-stable, find someone else to do it, or failing that hand me approval
to do it in both branches.  It seems it fixes the problem for everyone
who has tried it.  It's attached below for your convenience.

Regards,

					Dima Dorfman
					dima@unixfreak.org


Index: traverse.c
===================================================================
RCS file: /st/src/FreeBSD/src/sbin/dump/traverse.c,v
retrieving revision 1.12
diff -u -r1.12 traverse.c
--- traverse.c	2001/03/03 11:35:50	1.12
+++ traverse.c	2001/04/07 22:50:35
@@ -155,13 +155,15 @@
 		if ((mode = (dp->di_mode & IFMT)) == 0)
 			continue;
 		/*
-		 * All dirs go in dumpdirmap; only inodes that are to
-		 * be dumped go in usedinomap and dumpinomap, however.
+		 * Everything must go in usedinomap so that a check
+		 * for "in dumpdirmap but not in usedinomap" to detect
+		 * dirs with nodump set has a chance of succeeding
+		 * (this is used in mapdirs()).
 		 */
+		SETINO(ino, usedinomap);
 		if (mode == IFDIR)
 			SETINO(ino, dumpdirmap);
 		if (WANTTODUMP(dp)) {
-			SETINO(ino, usedinomap);
 			SETINO(ino, dumpinomap);
 			if (mode != IFREG && mode != IFDIR && mode != IFLNK)
 				*tapesize += 1;
@@ -169,8 +171,11 @@
 				*tapesize += blockest(dp);
 			continue;
 		}
-		if (mode == IFDIR)
+		if (mode == IFDIR) {
+			if (!nonodump && (dp->di_flags & UF_NODUMP))
+				CLRINO(ino, usedinomap);
 			anydirskipped = 1;
+		}
 	}
 	/*
 	 * Restore gets very upset if the root is not dumped,
@@ -218,7 +223,7 @@
 		 * it isn't in usedinomap, we have to go through it to
 		 * propagate the nodump flag.
 		 */
-		nodump = (TSTINO(ino, usedinomap) == 0);
+		nodump = !nonodump && (TSTINO(ino, usedinomap) == 0);
 		if ((isdir & 1) == 0 || (TSTINO(ino, dumpinomap) && !nodump))
 			continue;
 		dp = getino(ino);

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




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