]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/device.c
Add debug code for FreeBSD regress failures
[bacula/bacula] / bacula / src / stored / device.c
index 20a6c3a8a33f5e0c3f7a763c5fa24963b27262c2..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.
@@ -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;
@@ -185,10 +185,13 @@ bool fixup_device_block_write_error(DCR *dcr)
       berrno be;
       Dmsg1(0, _("write_block_to_device overflow block failed. ERR=%s"),
         be.bstrerror(dev->dev_errno));
-      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;
+      /* 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;