]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PrimaryLogPG: fix sparse read won't trigger repair correctly 17475/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Thu, 24 Aug 2017 07:53:23 +0000 (15:53 +0800)
committerNathan Cutler <ncutler@suse.com>
Tue, 5 Sep 2017 09:39:41 +0000 (11:39 +0200)
Normal reads instead of hole-reads should trigger auto-repair.
Also we shall quit on successfully triggering a repair, or else
we are at risk of doing the op multiple times.

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

src/osd/PrimaryLogPG.cc

index 6e50990addda35bb1b3d0d5ec2c3d8dfb0e5119c..f1ef2e57cd0e8b72b02ec90418f173fa02455155 100644 (file)
@@ -4918,9 +4918,6 @@ int PrimaryLogPG::do_sparse_read(OpContext *ctx, OSDOp& osd_op) {
         bufferlist t;
         uint64_t len = miter->first - last;
         r = pgbackend->objects_read_sync(soid, last, len, op.flags, &t);
-       if (r == -EIO) {
-         r = rep_repair_primary_object(soid, ctx->op);
-       }
         if (r < 0) {
           osd->clog->error() << coll << " " << soid
                             << " sparse-read failed to read: "
@@ -4935,6 +4932,9 @@ int PrimaryLogPG::do_sparse_read(OpContext *ctx, OSDOp& osd_op) {
       bufferlist tmpbl;
       r = pgbackend->objects_read_sync(soid, miter->first, miter->second,
                                       op.flags, &tmpbl);
+      if (r == -EIO) {
+        r = rep_repair_primary_object(soid, ctx->op);
+      }
       if (r < 0) {
        return r;
       }