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()) {
*/
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);
JCR *jcr = dcr->jcr;
DEVICE *dev = dcr->dev;
DEV_BLOCK *block = dcr->block;
+
+ ASSERT(dev->is_open());
if (dev->at_eot()) {
return false;
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);
} 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;