]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: ENOENT on TMAP_RM on non-existent key
authorSage Weil <sage@inktank.com>
Wed, 28 Nov 2012 04:02:54 +0000 (20:02 -0800)
committerSage Weil <sage@inktank.com>
Mon, 3 Dec 2012 11:42:17 +0000 (03:42 -0800)
This reverts 29fae494d0b1459c8bb934d42446e0ada7355402 and fixes the
alternate implmentation added by 8e91d00b52808aa1a4e3a838deda34a439.
librbd relies the ENOENT return value.

Reported-by: Dan Mick <dan.mick@inktank.com>
Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/ReplicatedPG.cc

index 6688fe14790caed02d1aed8f00a9ee1936eae675..1c091966958141601478d4bd164452909326d6e2 100644 (file)
@@ -1676,9 +1676,10 @@ int ReplicatedPG::do_tmapup_slow(OpContext *ctx, bufferlist::iterator& bp, OSDOp
       break;
     case CEPH_OSD_TMAP_RM: // remove key
       ::decode(key, bp);
-      if (m.count(key)) {
-       m.erase(key);
+      if (!m.count(key)) {
+       return -ENOENT;
       }
+      m.erase(key);
       break;
     case CEPH_OSD_TMAP_HDR: // update header
       {
@@ -1848,6 +1849,9 @@ int ReplicatedPG::do_tmapup(OpContext *ctx, bufferlist::iterator& bp, OSDOp& osd
        nkeys++;
       } else if (op == CEPH_OSD_TMAP_RM) {
        // do nothing.
+       if (!key_exists) {
+         return -ENOENT;
+       }
       }
     }