]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PrimaryLogPG: fix the extent length error of the sync read 25584/head
authorXiaofei Cui <cuixiaofei@sangfor.com.cn>
Mon, 17 Dec 2018 08:56:59 +0000 (16:56 +0800)
committerXiaofei Cui <cuixiaofei@sangfor.com.cn>
Tue, 18 Dec 2018 03:12:04 +0000 (11:12 +0800)
The extent.length of the sync read is changed to 0, when
the read is failed. This makes the retry of the read with
a offset of 0 to read the total object.
Let the extent.length as it is, if the return code is -EAGAIN,
which will make the read try again later with the correct
extent.length.

Fixes: https://tracker.ceph.com/issues/37680
Signed-off-by: Xiaofei Cui <cuixiaofei@sangfor.com.cn>
src/osd/PrimaryLogPG.cc

index 56806e1d9b8a21a3fcc1c8a7849ec4ee443c175e..f08dcb69574f914437791a47a2e5d925df799227 100644 (file)
@@ -5518,7 +5518,12 @@ int PrimaryLogPG::do_read(OpContext *ctx, OSDOp& osd_op) {
     }
     if (r >= 0)
       op.extent.length = r;
-    else {
+    else if (r == -EAGAIN) {
+      // EAGAIN should not change the length of extent or count the read op.
+      dout(10) << " read got " << r << " / " << op.extent.length
+              << " bytes from obj " << soid << ". try again." << dendl;
+      return -EAGAIN;
+    } else {
       result = r;
       op.extent.length = 0;
     }