From: Kefu Chai Date: Wed, 11 Apr 2018 15:05:46 +0000 (+0800) Subject: Merge pull request #21306 from rzarzynski/wip-bs-bug23333-allow-eio X-Git-Tag: v13.1.0~316 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=80667e8d71b31b877df47dcadc321e01c6f9ba6a;p=ceph.git Merge pull request #21306 from rzarzynski/wip-bs-bug23333-allow-eio os/bluestore: alter the allow_eio policy regarding kernel's error list. Reviewed-by: Sage Weil --- 80667e8d71b31b877df47dcadc321e01c6f9ba6a diff --cc src/os/bluestore/KernelDevice.cc index 76556a979b5,8e883fc8833..c43eeb4acff --- a/src/os/bluestore/KernelDevice.cc +++ b/src/os/bluestore/KernelDevice.cc @@@ -441,13 -417,17 +450,17 @@@ void KernelDevice::_aio_thread( // 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