#define ASSERT(p) ((void)0)
#endif
-
#define TD_VBD_EIO_RETRIES 10
#define TD_VBD_EIO_SLEEP 1
#define TD_VBD_WATCHDOG_TIMEOUT 10
timeout = tapdisk_vbd_request_ttl(vreq, now) < 0;
if (timeout)
- DBG(TLOG_INFO, "req %s timed out, retried %d times\n",
+ ERR(vreq->error,
+ "req %s timed out, retried %d times\n",
vreq->name, vreq->num_retries);
return timeout;
}
if (err) {
- vreq->error = (vreq->error ? : err);
if (err != -EBUSY) {
+ if (!vreq->error &&
+ err != vreq->prev_error)
+ tlog_drv_error(image->driver, err,
+ "req %s: %s 0x%04x secs @ 0x%08"PRIx64,
+ vreq->name,
+ (treq.op == TD_OP_WRITE ? "write" : "read"),
+ treq.secs, treq.sec);
vbd->errors++;
- ERR(err, "req %s: %s 0x%04x secs @ 0x%08"PRIx64,
- vreq->name,
- (treq.op == TD_OP_WRITE ? "write" : "read"),
- treq.secs, treq.sec);
}
+ vreq->error = (vreq->error ? : err);
}
tapdisk_vbd_complete_vbd_request(vbd, vreq);
vbd->retries++;
vreq->num_retries++;
- vreq->error = 0;
+
+ vreq->prev_error = vreq->error;
+ vreq->error = 0;
+
DBG(TLOG_DBG, "retry #%d of req %s, "
"sec 0x%08"PRIx64", iovcnt: %d\n", vreq->num_retries,
vreq->name, vreq->sec, vreq->iovcnt);