From b16b080332616f12852c15cd27e022a83ed86319 Mon Sep 17 00:00:00 2001 From: Jianpeng Ma Date: Mon, 13 Apr 2015 11:20:52 +0800 Subject: [PATCH] osd: For object op, first check object whether unfound. If object unfound, asap return -EIO. Signed-off-by: Jianpeng Ma --- src/osd/ReplicatedPG.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 1f9bbb1580cce..b74c8dd848d1c 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1400,6 +1400,11 @@ void ReplicatedPG::do_op(OpRequestRef& op) CEPH_NOSNAP, m->get_pg().ps(), info.pgid.pool(), m->get_object_locator().nspace); + if (missing_loc.is_unfound(head)) { + dout(10) << "do_op " << head << " is unfound, can't do anything" << dendl; + osd->reply_op_error(op, -EIO); + return; + } if (write_ordered && scrubber.write_blocked_by_scrub(head)) { dout(20) << __func__ << ": waiting for scrub" << dendl; @@ -1424,6 +1429,11 @@ void ReplicatedPG::do_op(OpRequestRef& op) hobject_t snapdir(m->get_oid(), m->get_object_locator().key, CEPH_SNAPDIR, m->get_pg().ps(), info.pgid.pool(), m->get_object_locator().nspace); + if (missing_loc.is_unfound(snapdir)) { + dout(10) << "do_op " << snapdir << " is unfound, can't do anything" << dendl; + osd->reply_op_error(op, -EIO); + return; + } if (is_unreadable_object(snapdir)) { wait_for_unreadable_object(snapdir, op); return; -- 2.39.5