X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=dump%2Ftape.c;h=5e79fd2f66a7abac0c70d893a186d21928c1b71c;hb=8cef350eb9ffa2e543a95756a8f605175380f7b0;hp=5666b39329d2e774ae52ee64e9c40eeec40f1a85;hpb=c534413c6ada5778ccbb76f36bdcff672037d0cc;p=dump.git diff --git a/dump/tape.c b/dump/tape.c index 5666b39..5e79fd2 100644 --- a/dump/tape.c +++ b/dump/tape.c @@ -41,7 +41,7 @@ #ifndef lint static const char rcsid[] = - "$Id: tape.c,v 1.50 2001/07/18 12:54:06 stelian Exp $"; + "$Id: tape.c,v 1.53 2001/07/20 11:02:45 stelian Exp $"; #endif /* not lint */ #include @@ -112,7 +112,7 @@ long long tapea_bytes = 0; /* bytes_written at start of current volume */ static ssize_t atomic_read __P((int, void *, size_t)); static ssize_t atomic_write __P((int, const void *, size_t)); -static void doslave __P((int, int)); +static void doslave __P((int, int, int)); static void enslave __P((void)); static void flushtape __P((void)); static void killall __P((void)); @@ -443,12 +443,11 @@ flushtape(void) nextblock = slp->tblock; trecno = 0; asize += tenths + returned.clen / density; - csize += returned.clen; blockswritten += ntrec; blocksthisvol += ntrec; if (!pipeout && !unlimited) { if (blocksperfile) { - if ( compressed ? csize >= blocksperfile * 1024 + if ( compressed ? (bytes_written - tapea_bytes + SLAVES * (writesize + sizeof(struct tapebuf))) >= blocksperfile * 1024 : blocksthisvol >= blocksperfile ) { close_rewind(); startnewtape(0); @@ -693,7 +692,6 @@ rollforward(void) slp->count = lastspclrec + blks + 1 - spcl.c_tapea; slp->inode = curino; asize += tenths + returned.clen / density; - csize += returned.clen; blockswritten += ntrec; blocksthisvol += ntrec; #endif @@ -850,7 +848,6 @@ restore_check_point: enslave(); /* Share open tape file descriptor with slaves */ asize = 0; - csize = 0; blocksthisvol = 0; if (top) newtape++; /* new tape signal */ @@ -968,7 +965,7 @@ enslave(void) != sizeof i) quit("master/slave protocol botched 3\n"); #endif - doslave(cmd[0], i); + doslave(cmd[0], i, (slaves[i].pid == slp->pid)); Exit(X_FINOK); } else @@ -1014,7 +1011,7 @@ killall(void) * slaves. */ static void -doslave(int cmd, int slave_number) +doslave(int cmd, int slave_number, int first) { register int nread; int nextslave, size, eot_count, bufsize; @@ -1022,7 +1019,7 @@ doslave(int cmd, int slave_number) char *buffer; #ifdef HAVE_ZLIB struct tapebuf *comp_buf = NULL; - int compresult, do_compress = slave_number > 0; + int compresult, do_compress = !first; unsigned long worklen; #endif /* HAVE_ZLIB */ struct slave_results returns; @@ -1146,7 +1143,8 @@ doslave(int cmd, int slave_number) uspclptr = (union u_spcl *)&slp->tblock[0]; spclptr = &uspclptr->s_spcl; if ((spclptr->c_magic == NFS_MAGIC) && - (spclptr->c_type == TS_INODE)) { + (spclptr->c_type == TS_INODE) && + (spclptr->c_date == gThisDumpDate)) { /* if an error occured previously don't * try again */ if (gtperr == 0) {