]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: return with ENOENT if object doesn't exist during rmattr
authorZhiqiang Wang <zhiqiang.wang@intel.com>
Thu, 2 Apr 2015 01:27:30 +0000 (09:27 +0800)
committerZhiqiang Wang <zhiqiang.wang@intel.com>
Thu, 14 May 2015 08:54:01 +0000 (16:54 +0800)
Return with -ENOENT earlier in do_osd_ops, instead of sending the
transaction to backend and fail silently there.

Signed-off-by: Zhiqiang Wang <zhiqiang.wang@intel.com>
src/osd/ReplicatedPG.cc

index 4c549a5fd3d39bbaca0b7adc821744054b473115..8f67cd9ca54d03b34925ef2958734e351063194c 100644 (file)
@@ -4562,6 +4562,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& 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<string, boost::optional<bufferlist> > to_set;