From 6bfd0bdc800a6e4a61cfaabca9b3f8f48c57971d Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Tue, 3 Dec 2002 05:12:53 +0000 Subject: [PATCH] Correct the estimated block count calculated by dump to account for the minimal amount of space used by a snapshot. Sponsored by: DARPA & NAI Labs. --- sbin/dump/dump.h | 1 - sbin/dump/traverse.c | 5 ++++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sbin/dump/dump.h b/sbin/dump/dump.h index a148c6ba8cbe..eb04b0c09b17 100644 --- a/sbin/dump/dump.h +++ b/sbin/dump/dump.h @@ -103,7 +103,6 @@ time_t unctime(char *str); /* mapping rouintes */ union dinode; -long blockest(union dinode *dp); int mapfiles(ino_t maxino, long *tapesize); int mapdirs(ino_t maxino, long *tapesize); diff --git a/sbin/dump/traverse.c b/sbin/dump/traverse.c index 988228389108..ab2ee71aa2a0 100644 --- a/sbin/dump/traverse.c +++ b/sbin/dump/traverse.c @@ -76,6 +76,7 @@ static int dirindir(ino_t ino, ufs2_daddr_t blkno, int level, long *size, static void dmpindir(ino_t ino, ufs2_daddr_t blk, int level, off_t *size); static int searchdir(ino_t ino, ufs2_daddr_t blkno, long size, long filesize, long *tapesize, int nodump); +static long blockest(union dinode *dp); /* * This is an estimation of the number of TP_BSIZE blocks in the file. @@ -84,7 +85,7 @@ static int searchdir(ino_t ino, ufs2_daddr_t blkno, long size, long filesize, * (when some of the blocks are usually used for indirect pointers); * hence the estimate may be high. */ -long +static long blockest(union dinode *dp) { long blkest, sizeest; @@ -103,6 +104,8 @@ blockest(union dinode *dp) * dump blocks (sizeest vs. blkest in the indirect block * calculation). */ + if ((DIP(dp, di_flags) & SF_SNAPSHOT) != 0) + return (1); blkest = howmany(dbtob(DIP(dp, di_blocks)), TP_BSIZE); sizeest = howmany(DIP(dp, di_size), TP_BSIZE); if (blkest > sizeest)