]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/block.c
ebl fix debug message
[bacula/bacula] / bacula / src / stored / block.c
index c567fe3742a1fcd406715afc75ea1e133759d299..2db124e5ba57c7b97d586988a4ea29ed9239caf7 100644 (file)
@@ -11,7 +11,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2001-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2001-2007 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.
@@ -346,7 +346,7 @@ bool write_block_to_device(DCR *dcr)
    }
 
    if (!dcr->dev_locked) {            /* device already locked? */
-      lock_device(dev);               /* no, lock it */
+      dev->r_dlock();                  /* no, lock it */
    }
 
    /*
@@ -388,7 +388,7 @@ bool write_block_to_device(DCR *dcr)
 
 bail_out:
    if (!dcr->dev_locked) {            /* did we lock dev above? */
-      unlock_device(dev);             /* unlock it now */
+      dev->dunlock();                  /* unlock it now */
    }
    return stat;
 }
@@ -533,15 +533,12 @@ bool write_block_to_dev(DCR *dcr)
       if (retry > 0 && stat == -1 && errno == EBUSY) {
          berrno be;
          Dmsg4(100, "===== write retry=%d stat=%d errno=%d: ERR=%s\n",
-               retry, stat, errno, be.strerror());
+               retry, stat, errno, be.bstrerror());
          bmicrosleep(5, 0);    /* pause a bit if busy or lots of errors */
          dev->clrerror(-1);
       }
-      if (dev->is_tape()) {
-         stat = tape_write(dev->fd, block->buf, (size_t)wlen);
-      } else {
-         stat = write(dev->fd, block->buf, (size_t)wlen);
-      }
+      stat = dev->write(block->buf, (size_t)wlen);
+
    } while (stat == -1 && (errno == EBUSY || errno == EIO) && retry++ < 3);
 
 #ifdef DEBUG_BLOCK_ZEROING
@@ -566,7 +563,7 @@ bool write_block_to_dev(DCR *dcr)
          if (dev->dev_errno != ENOSPC) {
             dev->VolCatInfo.VolCatErrors++;
             Jmsg4(jcr, M_ERROR, 0, _("Write error at %u:%u on device %s. ERR=%s.\n"),
-               dev->file, dev->block_num, dev->print_name(), be.strerror());
+               dev->file, dev->block_num, dev->print_name(), be.bstrerror());
          }
       } else {
         dev->dev_errno = ENOSPC;            /* out of space */
@@ -577,7 +574,7 @@ bool write_block_to_dev(DCR *dcr)
             dev->file, dev->block_num, dev->print_name(), wlen, stat);
       }
       Dmsg7(100, "=== Write error. fd=%d size=%u rtn=%d dev_blk=%d blk_blk=%d errno=%d: ERR=%s\n",
-         dev->fd, wlen, stat, dev->block_num, block->BlockNumber, 
+         dev->fd(), wlen, stat, dev->block_num, block->BlockNumber, 
          dev->dev_errno, strerror(dev->dev_errno));
 
       ok = terminate_writing_volume(dcr);
@@ -649,20 +646,20 @@ static void reread_last_block(DCR *dcr)
          berrno be;
          ok = false;
          Jmsg(jcr, M_ERROR, 0, _("Backspace file at EOT failed. ERR=%s\n"), 
-              be.strerror(dev->dev_errno));
+              be.bstrerror(dev->dev_errno));
       }
       if (ok && dev->has_cap(CAP_TWOEOF) && !dev->bsf(1)) {
          berrno be;
          ok = false;
          Jmsg(jcr, M_ERROR, 0, _("Backspace file at EOT failed. ERR=%s\n"), 
-              be.strerror(dev->dev_errno));
+              be.bstrerror(dev->dev_errno));
       }
       /* Backspace over record */
       if (ok && !dev->bsr(1)) {
          berrno be;
          ok = false;
          Jmsg(jcr, M_ERROR, 0, _("Backspace record at EOT failed. ERR=%s\n"), 
-              be.strerror(dev->dev_errno));
+              be.bstrerror(dev->dev_errno));
          /*
           *  On FreeBSD systems, if the user got here, it is likely that his/her
           *    tape drive is "frozen".  The correct thing to do is a
@@ -729,7 +726,6 @@ static bool terminate_writing_volume(DCR *dcr)
    }
    bstrncpy(dev->VolCatInfo.VolCatStatus, "Full", sizeof(dev->VolCatInfo.VolCatStatus));
    dev->VolCatInfo.VolCatFiles = dev->file;   /* set number of files */
-   dev->VolCatInfo.VolCatJobs++;              /* increment number of jobs */
    
    if (dev->is_dvd()) {
       if (!dvd_write_part(dcr)) {             /* write last part */
@@ -787,11 +783,11 @@ static bool do_new_file_bookkeeping(DCR *dcr)
    if (!dir_create_jobmedia_record(dcr)) {
       Dmsg0(190, "Error from create_job_media.\n");
       dev->dev_errno = EIO;
-       Jmsg(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
-            dcr->VolCatInfo.VolCatName, jcr->Job);
-       terminate_writing_volume(dcr);
-       dev->dev_errno = EIO;
-       return false;
+      Jmsg(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
+           dcr->VolCatInfo.VolCatName, jcr->Job);
+      terminate_writing_volume(dcr);
+      dev->dev_errno = EIO;
+      return false;
    }
    dev->VolCatInfo.VolCatFiles = dev->file;
    if (!dir_update_volume_info(dcr, false)) {
@@ -900,9 +896,9 @@ bool read_block_from_device(DCR *dcr, bool check_block_numbers)
    bool ok;
    DEVICE *dev = dcr->dev;
    Dmsg0(200, "Enter read_block_from_device\n");
-   lock_device(dev);
+   dev->r_dlock();
    ok = read_block_from_dev(dcr, check_block_numbers);
-   unlock_device(dev);
+   dev->dunlock();
    Dmsg0(200, "Leave read_block_from_device\n");
    return ok;
 }
@@ -945,7 +941,7 @@ reread:
    if (dev->at_eof() && dev->is_dvd()) {
       Dmsg1(100, "file_size=%u\n",(unsigned int)dev->file_size);
       Dmsg1(100, "file_addr=%u\n",(unsigned int)dev->file_addr);
-      Dmsg1(100, "lseek=%u\n",(unsigned int)lseek(dev->fd, 0, SEEK_CUR));
+      Dmsg1(100, "lseek=%u\n",(unsigned int)lseek(dev->fd(), 0, SEEK_CUR));
       Dmsg1(100, "part_start=%u\n",(unsigned int)dev->part_start);
       Dmsg1(100, "part_size=%u\n", (unsigned int)dev->part_size);
       Dmsg2(100, "part=%u num_dvd_parts=%u\n", dev->part, dev->num_dvd_parts);
@@ -975,23 +971,20 @@ reread:
       if ((retry > 0 && stat == -1 && errno == EBUSY)) {
          berrno be;
          Dmsg4(100, "===== read retry=%d stat=%d errno=%d: ERR=%s\n",
-               retry, stat, errno, be.strerror());
+               retry, stat, errno, be.bstrerror());
          bmicrosleep(10, 0);    /* pause a bit if busy or lots of errors */
          dev->clrerror(-1);
       }
-      if (dev->is_tape()) {
-         stat = tape_read(dev->fd, block->buf, (size_t)block->buf_len);
-      } else {
-         stat = read(dev->fd, block->buf, (size_t)block->buf_len);
-      }
+      stat = dev->read(block->buf, (size_t)block->buf_len);
+
    } while (stat == -1 && (errno == EBUSY || errno == EINTR || errno == EIO) && retry++ < 3);
    if (stat < 0) {
       berrno be;
       dev->clrerror(-1);
-      Dmsg1(200, "Read device got: ERR=%s\n", be.strerror());
+      Dmsg1(200, "Read device got: ERR=%s\n", be.bstrerror());
       block->read_len = 0;
       Mmsg5(dev->errmsg, _("Read error on fd=%d at file:blk %u:%u on device %s. ERR=%s.\n"),
-         dev->fd, dev->file, dev->block_num, dev->print_name(), be.strerror());
+         dev->fd(), dev->file, dev->block_num, dev->print_name(), be.bstrerror());
       Jmsg(jcr, M_ERROR, 0, "%s", dev->errmsg);
       if (dev->at_eof()) {        /* EOF just seen? */
          dev->set_eot();          /* yes, error => EOT */
@@ -1088,11 +1081,6 @@ reread:
    dev->VolCatInfo.VolCatReads++;
    dev->VolCatInfo.VolCatRBytes += block->read_len;
 
-   dev->VolCatInfo.VolCatBytes += block->block_len;
-   dev->VolCatInfo.VolCatBlocks++;
-   if (dev->VolCatInfo.VolFirstWritten == 0) {
-      dev->VolCatInfo.VolFirstWritten = (utime_t)time(NULL);    /* Set first written time */
-   }
    dev->EndBlock = dev->block_num;
    dev->EndFile  = dev->file;
    dev->block_num++;