]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/device.c
Remove debug code
[bacula/bacula] / bacula / src / stored / device.c
index 0d84404ea744bfc414c97cab5f1dcdcb8d7c4b4e..a3eb0c5d982593dc3c065fac09b945675ac5d4c4 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2009 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.
@@ -20,7 +20,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Bacula® is a registered trademark of John Walker.
+   Bacula® is a registered trademark of Kern Sibbald.
    The licensor of Bacula is the Free Software Foundation Europe
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
@@ -82,7 +82,7 @@
  *  Returns: true  on success
  *           false on failure
  */
-bool fixup_device_block_write_error(DCR *dcr)
+bool fixup_device_block_write_error(DCR *dcr, int retries)
 {
    char PrevVolName[MAX_NAME_LENGTH];
    DEV_BLOCK *label_blk;
@@ -97,7 +97,7 @@ bool fixup_device_block_write_error(DCR *dcr)
 
    wait_time = time(NULL);
 
-   Dmsg0(100, "Enter fixup_device_block_write_error\n");
+   Dmsg0(100, "=== Enter fixup_device_block_write_error\n");
 
    /*
     * If we are blocked at entry, unblock it, and set our own block status
@@ -122,14 +122,15 @@ bool fixup_device_block_write_error(DCR *dcr)
         edit_uint64_with_commas(dev->VolCatInfo.VolCatBlocks, b2),
         bstrftime(dt, sizeof(dt), time(NULL)));
 
-   /* Called with have_vol=false, release=true */
-   dcr->unload_device = true;
+   Dmsg0(050, "set_unload\n");
+   dev->set_unload();
    if (!dcr->mount_next_write_volume()) {
       free_block(label_blk);
       dcr->block = block;
       dev->dlock();  
       goto bail_out;
    }
+   Dmsg1(050, "must_unload=%d\n", dev->must_unload());
    dev->dlock();                    /* lock again */
 
    dev->VolCatInfo.VolCatJobs++;              /* increment number of jobs on vol */
@@ -159,7 +160,7 @@ bool fixup_device_block_write_error(DCR *dcr)
    /*
     * Walk through all attached jcrs indicating the volume has changed
     */
-   Dmsg1(100, "Walk attached dcrs. Volume=%s\n", dev->VolCatInfo.VolCatName);
+   Dmsg1(100, "Notify vol change. Volume=%s\n", dev->VolCatInfo.VolCatName);
    DCR *mdcr;
    foreach_dlist(mdcr, dev->attached_dcrs) {
       JCR *mjcr = mdcr->jcr;
@@ -182,9 +183,15 @@ bool fixup_device_block_write_error(DCR *dcr)
    Dmsg0(190, "Write overflow block to dev\n");
    if (!write_block_to_dev(dcr)) {
       berrno be;
-      Pmsg1(0, _("write_block_to_device overflow block failed. ERR=%s"),
+      Dmsg1(0, _("write_block_to_device overflow block failed. ERR=%s"),
         be.bstrerror(dev->dev_errno));
-      goto bail_out;
+      /* Note: recursive call */
+      if (retries-- <= 0 || !fixup_device_block_write_error(dcr, retries)) {
+         Jmsg2(jcr, M_FATAL, 0, 
+              _("Catastrophic error. Cannot write overflow block to device %s. ERR=%s"),
+              dev->print_name(), be.bstrerror(dev->dev_errno));
+         goto bail_out;
+      }
    }
    ok = true;