diff options
author | mckusick <mckusick@FreeBSD.org> | 2014-08-06 23:33:16 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 2014-08-06 23:33:16 +0000 |
commit | da77c292102078758ede94b2a5e33359e8fc05f5 (patch) | |
tree | 8e0dc811cd0ca29fc03536567d061432aacd8e2a /sbin | |
parent | 396f2d2c3f2a9f7aa1ec2795623dc08baff69e3d (diff) | |
download | FreeBSD-src-da77c292102078758ede94b2a5e33359e8fc05f5.zip FreeBSD-src-da77c292102078758ede94b2a5e33359e8fc05f5.tar.gz |
MFC of r269303:
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
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/restore/tape.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sbin/restore/tape.c b/sbin/restore/tape.c index 4f34549..225fe32 100644 --- a/sbin/restore/tape.c +++ b/sbin/restore/tape.c @@ -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"); |