X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Fbtape.c;h=967887290d4de97d85527c210001ec3654b60246;hb=c961a7fccda3a0bdb1f8decf16d3602b4b394d51;hp=dc7ecabb47b641cb40e183f448b82be9b9225f2e;hpb=d0259238e935e78c61a814360a7c31b06c837f20;p=bacula%2Fbacula diff --git a/bacula/src/stored/btape.c b/bacula/src/stored/btape.c index dc7ecabb47..967887290d 100644 --- a/bacula/src/stored/btape.c +++ b/bacula/src/stored/btape.c @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2012 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -317,7 +317,10 @@ int main(int margc, char *margv[]) static void terminate_btape(int stat) { - sm_check(__FILE__, __LINE__, false); + Dsm_check(200); + free_jcr(jcr); + jcr = NULL; + if (configfile) { free(configfile); } @@ -339,8 +342,6 @@ static void terminate_btape(int stat) free_bsr(bsr); } - free_jcr(jcr); - jcr = NULL; free_volume_lists(); @@ -468,7 +469,7 @@ static bool open_the_device() block = new_block(dev); dev->r_dlock(); Dmsg1(200, "Opening device %s\n", dcr->VolumeName); - if (dev->open(dcr, OPEN_READ_WRITE) < 0) { + if (!dev->open(dcr, OPEN_READ_WRITE)) { Emsg1(M_FATAL, 0, _("dev open failed: %s\n"), dev->errmsg); ok = false; goto bail_out; @@ -732,7 +733,7 @@ static void capcmd() */ static void rectestcmd() { - DEV_BLOCK *block; + DEV_BLOCK *save_block; DEV_RECORD *rec; int i, blkno = 0; @@ -748,27 +749,29 @@ static void rectestcmd() return; } - sm_check(__FILE__, __LINE__, false); - block = new_block(dev); + Dsm_check(200); + save_block = dcr->block; + dcr->block = new_block(dev); rec = new_record(); for (i=1; i<500000; i++) { rec->data = check_pool_memory_size(rec->data, i); memset(rec->data, i & 0xFF, i); rec->data_len = i; - sm_check(__FILE__, __LINE__, false); - if (write_record_to_block(block, rec)) { - empty_block(block); + Dsm_check(200); + if (write_record_to_block(dcr, rec)) { + empty_block(dcr->block); blkno++; Pmsg2(0, _("Block %d i=%d\n"), blkno, i); } else { break; } - sm_check(__FILE__, __LINE__, false); + Dsm_check(200); } free_record(rec); - free_block(block); - sm_check(__FILE__, __LINE__, false); + free_block(dcr->block); + dcr->block = save_block; /* restore block to dcr */ + Dsm_check(200); } /* @@ -802,33 +805,33 @@ static bool re_read_block_test() rec->data = check_pool_memory_size(rec->data, block->buf_len); len = rec->data_len = block->buf_len-100; memset(rec->data, 1, rec->data_len); - if (!write_record_to_block(block, rec)) { + if (!write_record_to_block(dcr, rec)) { Pmsg0(0, _("Error writing record to block.\n")); goto bail_out; } - if (!write_block_to_dev(dcr)) { + if (!dcr->write_block_to_dev()) { Pmsg0(0, _("Error writing block to device.\n")); goto bail_out; } else { Pmsg1(0, _("Wrote first record of %d bytes.\n"), rec->data_len); } memset(rec->data, 2, rec->data_len); - if (!write_record_to_block(block, rec)) { + if (!write_record_to_block(dcr, rec)) { Pmsg0(0, _("Error writing record to block.\n")); goto bail_out; } - if (!write_block_to_dev(dcr)) { + if (!dcr->write_block_to_dev()) { Pmsg0(0, _("Error writing block to device.\n")); goto bail_out; } else { Pmsg1(0, _("Wrote second record of %d bytes.\n"), rec->data_len); } memset(rec->data, 3, rec->data_len); - if (!write_record_to_block(block, rec)) { + if (!write_record_to_block(dcr, rec)) { Pmsg0(0, _("Error writing record to block.\n")); goto bail_out; } - if (!write_block_to_dev(dcr)) { + if (!dcr->write_block_to_dev()) { Pmsg0(0, _("Error writing block to device.\n")); goto bail_out; } else { @@ -854,13 +857,13 @@ static bool re_read_block_test() goto bail_out; } Pmsg0(0, _("Backspace record OK.\n")); - if (!read_block_from_dev(dcr, NO_BLOCK_NUMBER_CHECK)) { + if (!dcr->read_block_from_dev(NO_BLOCK_NUMBER_CHECK)) { berrno be; Pmsg1(0, _("Read block failed! ERR=%s\n"), be.bstrerror(dev->dev_errno)); goto bail_out; } memset(rec->data, 0, rec->data_len); - if (!read_record_from_block(dcr, block, rec)) { + if (!read_record_from_block(dcr, rec)) { berrno be; Pmsg1(0, _("Read block failed! ERR=%s\n"), be.bstrerror(dev->dev_errno)); goto bail_out; @@ -964,11 +967,11 @@ static bool speed_test_bacula(fill_mode_t mode, uint64_t nb_gb, uint32_t nb) init_speed(); for ( ; written < nb_gb; ) { - if (!write_record_to_block(block, rec)) { + if (!write_record_to_block(dcr, rec)) { Pmsg0(0, _("\nError writing record to block.\n")); goto bail_out; } - if (!write_block_to_dev(dcr)) { + if (!dcr->write_block_to_dev()) { Pmsg0(0, _("\nError writing block to device.\n")); goto bail_out; } @@ -1142,11 +1145,11 @@ static bool write_two_files() for (j=0; jwrite_block_to_dev()) { Pmsg0(0, _("Error writing block to device.\n")); goto bail_out; } @@ -1158,11 +1161,11 @@ static bool write_two_files() for (j=0; jwrite_block_to_dev()) { Pmsg0(0, _("Error writing block to device.\n")); goto bail_out; } @@ -1219,7 +1222,7 @@ static bool write_read_test() /* Now read it back */ for (i=1; i<=2*num_recs; i++) { read_again: - if (!read_block_from_dev(dcr, NO_BLOCK_NUMBER_CHECK)) { + if (!dcr->read_block_from_dev(NO_BLOCK_NUMBER_CHECK)) { berrno be; if (dev_state(dev, ST_EOF)) { Pmsg0(-1, _("Got EOF on tape.\n")); @@ -1231,7 +1234,7 @@ read_again: goto bail_out; } memset(rec->data, 0, rec->data_len); - if (!read_record_from_block(dcr, block, rec)) { + if (!read_record_from_block(dcr, rec)) { berrno be; Pmsg2(0, _("Read record failed. Block %d! ERR=%s\n"), i, be.bstrerror(dev->dev_errno)); goto bail_out; @@ -1338,7 +1341,7 @@ static bool position_test() goto bail_out; } read_again: - if (!read_block_from_dev(dcr, NO_BLOCK_NUMBER_CHECK)) { + if (!dcr->read_block_from_dev(NO_BLOCK_NUMBER_CHECK)) { berrno be; if (dev_state(dev, ST_EOF)) { Pmsg0(-1, _("Got EOF on tape.\n")); @@ -1363,7 +1366,7 @@ read_again: goto bail_out; } memset(rec->data, 0, rec->data_len); - if (!read_record_from_block(dcr, block, rec)) { + if (!read_record_from_block(dcr, rec)) { berrno be; Pmsg1(0, _("Read record failed! ERR=%s\n"), be.bstrerror(dev->dev_errno)); goto bail_out; @@ -1873,7 +1876,7 @@ static void fsrcmd() static void rbcmd() { dev->open(dcr, OPEN_READ_ONLY); - read_block_from_dev(dcr, NO_BLOCK_NUMBER_CHECK); + dcr->read_block_from_dev(NO_BLOCK_NUMBER_CHECK); } /* @@ -1888,7 +1891,7 @@ static void wrcmd() if (!dev->is_open()) { open_the_device(); } - sm_check(__FILE__, __LINE__, false); + Dsm_check(200); empty_block(block); if (verbose > 1) { dump_block(block, "test"); @@ -1899,12 +1902,12 @@ static void wrcmd() rec->data = check_pool_memory_size(rec->data, i); memset(rec->data, i & 0xFF, i); rec->data_len = i; - sm_check(__FILE__, __LINE__, false); - if (!write_record_to_block(block, rec)) { + Dsm_check(200); + if (!write_record_to_block(dcr, rec)) { Pmsg0(0, _("Error writing record to block.\n")); goto bail_out; } - if (!write_block_to_dev(dcr)) { + if (!dcr->write_block_to_dev()) { Pmsg0(0, _("Error writing block to device.\n")); goto bail_out; } else { @@ -1913,8 +1916,7 @@ static void wrcmd() Pmsg0(0, _("Wrote block to device.\n")); bail_out: - sm_check(__FILE__, __LINE__, false); - sm_check(__FILE__, __LINE__, false); + Dsm_check(200); } /* @@ -2050,7 +2052,7 @@ static void scan_blocks() dev->update_pos(dcr); tot_files = dev->file; for (;;) { - if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) { + if (!dcr->read_block_from_device(NO_BLOCK_NUMBER_CHECK)) { Dmsg1(100, "!read_block(): ERR=%s\n", dev->bstrerror()); if (dev->state & ST_EOT) { if (blocks > 0) { @@ -2113,7 +2115,7 @@ static void scan_blocks() block->VolSessionId, block->VolSessionTime); if (verbose == 1) { DEV_RECORD *rec = new_record(); - read_record_from_block(dcr, block, rec); + read_record_from_block(dcr, rec); Pmsg9(-1, _("Block=%u file,blk=%u,%u blen=%u First rec FI=%s SessId=%u SessTim=%u Strm=%s rlen=%d\n"), block->BlockNumber, dev->file, dev->block_num, block->block_len, FI_to_ascii(buf1, rec->FileIndex), rec->VolSessionId, rec->VolSessionTime, @@ -2272,7 +2274,7 @@ static void fillcmd() stream_to_ascii(buf1, rec.Stream, rec.FileIndex), rec.data_len); - while (!write_record_to_block(block, &rec)) { + while (!write_record_to_block(dcr, &rec)) { /* * When we get here we have just filled a block */ @@ -2354,7 +2356,7 @@ static void fillcmd() exit_code = 1; } /* Write out final block of this session */ - if (!write_block_to_device(dcr)) { + if (!dcr->write_block_to_device()) { Pmsg0(-1, _("Set ok=false after write_block_to_device.\n")); ok = false; exit_code = 1; @@ -2552,7 +2554,7 @@ static bool do_unfill() goto bail_out; } Pmsg1(-1, _("Reading block %u.\n"), last_block_num); - if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) { + if (!dcr->read_block_from_device(NO_BLOCK_NUMBER_CHECK)) { Pmsg1(-1, _("Error reading block: ERR=%s\n"), dev->bstrerror()); goto bail_out; } @@ -2604,7 +2606,7 @@ static bool do_unfill() goto bail_out; } Pmsg1(-1, _("Reading block %d.\n"), dev->block_num); - if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) { + if (!dcr->read_block_from_device(NO_BLOCK_NUMBER_CHECK)) { Pmsg1(-1, _("Error reading block: ERR=%s\n"), dev->bstrerror()); goto bail_out; } @@ -2620,7 +2622,7 @@ static bool do_unfill() goto bail_out; } Pmsg1(-1, _("Reading block %d.\n"), dev->block_num); - if (!read_block_from_device(dcr, NO_BLOCK_NUMBER_CHECK)) { + if (!dcr->read_block_from_device(NO_BLOCK_NUMBER_CHECK)) { Pmsg1(-1, _("Error reading block: ERR=%s\n"), dev->bstrerror()); goto bail_out; } @@ -2650,7 +2652,10 @@ static bool quickie_cb(DCR *dcr, DEV_RECORD *rec) static bool compare_blocks(DEV_BLOCK *last_block, DEV_BLOCK *block) { char *p, *q; - uint32_t CheckSum, block_len; + union { + uint32_t CheckSum; + uint32_t block_len; + }; ser_declare; p = last_block->buf; @@ -2704,7 +2709,7 @@ static int flush_block(DEV_BLOCK *block, int dump) /* Copy block */ this_file = dev->file; this_block_num = dev->block_num; - if (!write_block_to_dev(dcr)) { + if (!dcr->write_block_to_dev()) { Pmsg3(000, _("Last block at: %u:%u this_dev_block_num=%d\n"), last_file, last_block_num, this_block_num); if (vol_num == 1) { @@ -2798,7 +2803,7 @@ static void qfillcmd() count = 1000; } - sm_check(__FILE__, __LINE__, false); + Dsm_check(200); i = block->buf_len - 100; ASSERT (i > 0); @@ -2814,11 +2819,11 @@ static void qfillcmd() printf("+"); fflush(stdout); } - if (!write_record_to_block(block, rec)) { + if (!write_record_to_block(dcr, rec)) { Pmsg0(0, _("Error writing record to block.\n")); goto bail_out; } - if (!write_block_to_dev(dcr)) { + if (!dcr->write_block_to_dev()) { Pmsg0(0, _("Error writing block to device.\n")); goto bail_out; } @@ -2833,7 +2838,7 @@ static void qfillcmd() scan_blocks(); bail_out: - sm_check(__FILE__, __LINE__, false); + Dsm_check(200); } /* @@ -2921,7 +2926,7 @@ do_tape_cmds() bool found; while (!quit && get_cmd("*")) { - sm_check(__FILE__, __LINE__, false); + Dsm_check(200); found = false; parse_args(cmd, &args, &argc, argk, argv, MAX_CMD_ARGS); for (i=0; i