]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/block.c
Start adding back removed code.
[bacula/bacula] / bacula / src / stored / block.c
index 89410716a71d7769558dc8e103377464e0f6db1d..fb36d5a888d24f77a7fe24d8c8d075a861410257 100644 (file)
@@ -401,6 +401,7 @@ bool write_block_to_dev(DCR *dcr)
    return true;
 #endif
    ASSERT(block->binbuf == ((uint32_t) (block->bufp - block->buf)));
+   ASSERT(dev->is_open());
 
    /* dump_block(block, "before write"); */
    if (dev->at_weot()) {
@@ -514,9 +515,14 @@ bool write_block_to_dev(DCR *dcr)
     */ 
    int retry = 0;
    errno = 0;
+   stat = 0;
    do {
-      if ((retry > 0 && errno == EBUSY) || retry > 10) {
-         bmicrosleep(0, 50000);    /* pause a bit if busy or lots of errors */
+      if ((retry > 0 && stat == -1 && errno == EBUSY) || retry > 10) {
+         berrno be;
+         Dmsg4(100, "===== read retry=%d stat=%d errno=%d: ERR=%s\n",
+               retry, stat, errno, be.strerror());
+         bmicrosleep(0, 100000);    /* 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);
@@ -904,6 +910,8 @@ bool read_block_from_dev(DCR *dcr, bool check_block_numbers)
    JCR *jcr = dcr->jcr;
    DEVICE *dev = dcr->dev;
    DEV_BLOCK *block = dcr->block;
+
+   ASSERT(dev->is_open());
    
    if (dev->at_eot()) {
       return false;
@@ -951,9 +959,14 @@ reread:
    
    retry = 0;
    errno = 0;
+   stat = 0;
    do {
-      if ((retry > 0 && errno == EBUSY) || retry > 10) {
-         bmicrosleep(0, 50000);    /* pause a bit if busy or lots of errors */
+      if ((retry > 0 && stat == -1 && errno == EBUSY) || retry > 10) {
+         berrno be;
+         Dmsg4(100, "===== write retry=%d stat=%d errno=%d: ERR=%s\n",
+               retry, stat, errno, be.strerror());
+         bmicrosleep(0, 100000);    /* 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);
@@ -963,7 +976,6 @@ reread:
    } while (stat == -1 && (errno == EBUSY || errno == EINTR || errno == EIO) && retry++ < 30);
    if (stat < 0) {
       berrno be;
-      dev->VolCatInfo.VolCatErrors++;
       dev->clrerror(-1);
       Dmsg1(200, "Read device got: ERR=%s\n", be.strerror());
       block->read_len = 0;