From: Zhiqiang Wang Date: Thu, 2 Apr 2015 01:27:30 +0000 (+0800) Subject: osd: return with ENOENT if object doesn't exist during rmattr X-Git-Tag: v9.0.3~147^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=11f438c188da52039408950bfe9f3e7dd2f98e6b;p=ceph.git osd: return with ENOENT if object doesn't exist during rmattr Return with -ENOENT earlier in do_osd_ops, instead of sending the transaction to backend and fail silently there. Signed-off-by: Zhiqiang Wang --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 4c549a5fd3d3..8f67cd9ca54d 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4562,6 +4562,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) string aname; bp.copy(op.xattr.name_len, aname); tracepoint(osd, do_osd_op_pre_rmxattr, soid.oid.name.c_str(), soid.snap.val, aname.c_str()); + if (!obs.exists || oi.is_whiteout()) { + result = -ENOENT; + break; + } string name = "_" + aname; if (pool.info.require_rollback()) { map > to_set;