]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/btape.c
Backport more master code
[bacula/bacula] / bacula / src / stored / btape.c
index dc7ecabb47b641cb40e183f448b82be9b9225f2e..967887290d4de97d85527c210001ec3654b60246 100644 (file)
@@ -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; j<len; j++) {
          *p++ = i;
       }
-      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;
       }
@@ -1158,11 +1161,11 @@ static bool write_two_files()
       for (j=0; j<len; j++) {
          *p++ = i;
       }
-      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;
       }
@@ -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<comsize; i++)       /* search for command */