// later flush() occurs.
io_since_flush.store(true);
- int r = aio[i]->get_return_value();
+ long r = aio[i]->get_return_value();
if (r < 0) {
- derr << __func__ << " got " << cpp_strerror(r) << dendl;
- if (ioc->allow_eio && r == -EIO) {
- ioc->set_return_value(r);
+ derr << __func__ << " got r=" << r << " (" << cpp_strerror(r) << ")"
+ << dendl;
+ if (ioc->allow_eio && is_expected_ioerr(r)) {
+ derr << __func__ << " translating the error to EIO for upper layer"
+ << dendl;
+ ioc->set_return_value(-EIO);
} else {
- assert(0 == "got unexpected error from io_getevents");
+ assert(0 == "got unexpected error from aio_t::get_return_value. "
+ "This may suggest HW issue. Please check your dmesg!");
}
} else if (aio[i]->length != (uint64_t)r) {
derr << "aio to " << aio[i]->offset << "~" << aio[i]->length