#ifndef lint
static const char rcsid[] =
- "$Id: traverse.c,v 1.55 2003/03/30 15:40:37 stelian Exp $";
+ "$Id: traverse.c,v 1.60 2004/03/10 16:26:30 stelian Exp $";
#endif /* not lint */
#include <config.h>
* dump blocks (sizeest vs. blkest in the indirect block
* calculation).
*/
- blkest = howmany((u_quad_t)dp->di_blocks * 512, TP_BSIZE);
+ blkest = howmany((u_quad_t)dp->di_blocks * 512, fs->blocksize) * (fs->blocksize / TP_BSIZE);
i_size = dp->di_size + ((u_quad_t) dp->di_size_high << 32);
- sizeest = howmany(i_size, TP_BSIZE);
+ sizeest = howmany(i_size, fs->blocksize) * (fs->blocksize / TP_BSIZE);
if (blkest > sizeest)
blkest = sizeest;
#ifdef __linux__
+ if ((dp->di_mode & IFMT) == IFDIR) {
+ /*
+ * for directories, assume only half of space is filled
+ * with entries.
+ */
+ blkest = blkest / 2;
+ sizeest = sizeest / 2;
+ }
if (i_size > (u_quad_t)fs->blocksize * NDADDR) {
/* calculate the number of indirect blocks on the dump tape */
blkest +=
howmany(sizeest - NDADDR * fs->blocksize / TP_BSIZE,
- NINDIR(sblock) * EXT2_FRAGS_PER_BLOCK(fs->super));
+ TP_NINDIR);
}
#else
if (i_size > sblock->fs_bsize * NDADDR) {
writerec(cp, 0);
}
-#if defined __linux__ && !defined(int32_t)
+#if defined(__linux__) && !defined(int32_t)
#define int32_t __s32
#endif
/*
* Read a chunk of data from the disk.
* Try to recover from hard errors by reading in sector sized pieces.
- * Error recovery is attempted at most breademax times before seeking
+ * Error recovery is attempted at most BREADEMAX times before seeking
* consent from the operator to continue.
*/
int breaderrors = 0;