]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: propagate read-EIO to high level callers
authorxie xingguo <xie.xingguo@zte.com.cn>
Fri, 15 Sep 2017 02:30:04 +0000 (10:30 +0800)
committerSage Weil <sage@redhat.com>
Tue, 6 Feb 2018 12:54:19 +0000 (06:54 -0600)
E.g., we can let auto-repair to properly handle this
instead of crashing the whole osd.

Observe this once on one of our test cluster:

/clove/vm/clove/ceph/rpmbuild/BUILD/ceph-12.2.0/src/os/bluestore/BlueStore.cc: 6604: FAILED assert(r == 0)

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
(cherry picked from commit a51d9e979fbbe49917712889efb102806479fad2)

src/os/bluestore/BlueStore.cc

index 207a233851e805326ec42e63671a25224faad146..395df88374cd0e6292ade73be4154942c66e3fd3 100644 (file)
@@ -6636,7 +6636,14 @@ int BlueStore::_do_read(
             return r;
           return 0;
        });
+      if (r < 0) {
+        derr << __func__ << " bdev-read failed: " << cpp_strerror(r) << dendl;
+        if (r == -EIO) {
+          // propagate EIO to caller
+          return r;
+        }
         assert(r == 0);
+      }
     } else {
       // read the pieces
       for (auto& reg : p.second) {
@@ -6674,7 +6681,15 @@ int BlueStore::_do_read(
               return r;
             return 0;
          });
-       assert(r == 0);
+        if (r < 0) {
+          derr << __func__ << " bdev-read failed: " << cpp_strerror(r)
+               << dendl;
+          if (r == -EIO) {
+            // propagate EIO to caller
+            return r;
+          }
+          assert(r == 0);
+        }
        assert(reg.bl.length() == r_len);
       }
     }