* Ported to Linux's Second Extended File System as part of the
* dump and restore backup suit
* Remy Card <card@Linux.EU.Org>, 1994-1997
- * Stelian Pop <pop@noos.fr>, 1999-2000
- * Stelian Pop <pop@noos.fr> - Alcôve <www.alcove.fr>, 2000
+ * Stelian Pop <stelian@popies.net>, 1999-2000
+ * Stelian Pop <stelian@popies.net> - Alcôve <www.alcove.com>, 2000-2002
*/
/*-
#ifndef lint
static const char rcsid[] =
- "$Id: traverse.c,v 1.38 2001/08/17 09:55:09 stelian Exp $";
+ "$Id: traverse.c,v 1.41 2002/01/25 14:59:53 stelian Exp $";
#endif /* not lint */
#include <config.h>
writerec(cp, 0);
}
-/*
- * Write a header record to the dump tape.
- */
#if defined __linux__ && !defined(int32_t)
#define int32_t __s32
#endif
+
+/*
+ * Compute and fill in checksum information.
+ */
void
-writeheader(dump_ino_t ino)
+mkchecksum(union u_spcl *tmpspcl)
{
- register int32_t sum, cnt, *lp;
+ int32_t sum, cnt, *lp;
- spcl.c_inumber = ino;
- spcl.c_magic = NFS_MAGIC;
- spcl.c_checksum = 0;
- lp = (int32_t *)&spcl;
+ tmpspcl->s_spcl.c_checksum = 0;
+ lp = (int32_t *)&tmpspcl->s_spcl;
sum = 0;
cnt = sizeof(union u_spcl) / (4 * sizeof(int32_t));
while (--cnt >= 0) {
sum += *lp++;
sum += *lp++;
}
- spcl.c_checksum = CHECKSUM - sum;
+ tmpspcl->s_spcl.c_checksum = CHECKSUM - sum;
+}
+
+/*
+ * Write a header record to the dump tape.
+ */
+void
+writeheader(dump_ino_t ino)
+{
+ spcl.c_inumber = ino;
+ spcl.c_magic = NFS_MAGIC;
+ mkchecksum((union u_spcl *)&spcl);
writerec((char *)&spcl, 1);
}
/*
* 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;
-#define BREADEMAX 32
void
bread(daddr_t blkno, char *buf, int size)
else
msg("short read error from %s: [block %d]: count=%d, got=%d\n",
disk, blkno, size, cnt);
- if (++breaderrors > BREADEMAX) {
+ if (++breaderrors > breademax) {
msg("More than %d block read errors from %d\n",
- BREADEMAX, disk);
+ breademax, disk);
broadcast("DUMP IS AILING!\n");
msg("This is an unrecoverable error.\n");
if (!query("Do you want to attempt to continue?")){