svn commit: r269303 - head/sbin/restore

Kirk McKusick mckusick at FreeBSD.org
Wed Jul 30 14:52:05 UTC 2014


Author: mckusick
Date: Wed Jul 30 14:52:04 2014
New Revision: 269303
URL: http://svnweb.freebsd.org/changeset/base/269303

Log:
  When restoring a UFS dump onto a ZFS filesystem, an assertion in
  restore was failing because ZFS was reporting a blocksize that was
  not a multiple of 1024.  Replace restore's failed assertion with
  code that writes restored files in a blocksize that works for
  restore (a multiple of 1024) despite being non-optimal for ZFS.
  
  Submitted by: Dmitry Morozovsky
  Tested by:    Dmitry Morozovsky
  MFC after:    1 week

Modified:
  head/sbin/restore/tape.c

Modified: head/sbin/restore/tape.c
==============================================================================
--- head/sbin/restore/tape.c	Wed Jul 30 14:46:39 2014	(r269302)
+++ head/sbin/restore/tape.c	Wed Jul 30 14:52:04 2014	(r269303)
@@ -260,9 +260,11 @@ setup(void)
 		fssize = TP_BSIZE;
 	if (stbuf.st_blksize >= TP_BSIZE && stbuf.st_blksize <= MAXBSIZE)
 		fssize = stbuf.st_blksize;
-	if (((fssize - 1) & fssize) != 0) {
-		fprintf(stderr, "bad block size %ld\n", fssize);
-		done(1);
+	if (((TP_BSIZE - 1) & stbuf.st_blksize) != 0) {
+		fprintf(stderr, "Warning: filesystem with non-multiple-of-%d "
+		    "blocksize (%d);\n", TP_BSIZE, stbuf.st_blksize);
+		fssize = roundup(fssize, TP_BSIZE);
+		fprintf(stderr, "\twriting using blocksize %ld\n", fssize);
 	}
 	if (spcl.c_volume != 1) {
 		fprintf(stderr, "Tape is not volume 1 of the dump\n");


More information about the svn-src-head mailing list