]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #21306 from rzarzynski/wip-bs-bug23333-allow-eio
authorKefu Chai <tchaikov@gmail.com>
Wed, 11 Apr 2018 15:05:46 +0000 (23:05 +0800)
committerGitHub <noreply@github.com>
Wed, 11 Apr 2018 15:05:46 +0000 (23:05 +0800)
os/bluestore: alter the allow_eio policy regarding kernel's error list.

Reviewed-by: Sage Weil <sage@redhat.com>
1  2 
src/os/bluestore/KernelDevice.cc

index 76556a979b5b8abc5380a24a38f98723af95966a,8e883fc88335774b2a59e06c4b6110427cf9bb43..c43eeb4acff69da7889cc072171db566e3d13aeb
@@@ -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