From: xie xingguo Date: Thu, 24 Aug 2017 07:53:23 +0000 (+0800) Subject: osd/PrimaryLogPG: fix sparse read won't trigger repair correctly X-Git-Tag: v13.0.1~1188^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=4ad25c346215dc2ddc4b1a43948b6fe01316edf2;p=ceph-ci.git osd/PrimaryLogPG: fix sparse read won't trigger repair correctly 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 --- diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index ac3db593e67..b407f96156e 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -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; }