]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: only allow pin/unpin op on the cache tier
authorZhiqiang Wang <zhiqiang.wang@intel.com>
Wed, 11 Mar 2015 08:12:48 +0000 (16:12 +0800)
committerSage Weil <sage@redhat.com>
Tue, 20 Oct 2015 14:36:09 +0000 (10:36 -0400)
Reject the op when the pin/unpin op is not on the cache tier.

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

index e4d9d31292630497548473daaa195f6a28508c9a..a8f0b64de1b47a260d40f1b2c5b5afa02a7131c2 100644 (file)
@@ -5074,9 +5074,15 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_CACHE_PIN:
+      tracepoint(osd, do_osd_op_pre_cache_pin, soid.oid.name.c_str(), soid.snap.val);
+      if ((!pool.info.is_tier() ||
+         pool.info.cache_mode == pg_pool_t::CACHEMODE_NONE)) {
+        result = -EINVAL;
+        dout(10) << " pin object is only allowed on the cache tier " << dendl;
+        break;
+      }
       ++ctx->num_write;
       {
-       tracepoint(osd, do_osd_op_pre_cache_pin, soid.oid.name.c_str(), soid.snap.val);
         if (!obs.exists) {
          assert(!oi.is_cache_pinned());
           ctx->mod_desc.create();
@@ -5097,9 +5103,15 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_CACHE_UNPIN:
+      tracepoint(osd, do_osd_op_pre_cache_unpin, soid.oid.name.c_str(), soid.snap.val);
+      if ((!pool.info.is_tier() ||
+         pool.info.cache_mode == pg_pool_t::CACHEMODE_NONE)) {
+        result = -EINVAL;
+        dout(10) << " pin object is only allowed on the cache tier " << dendl;
+        break;
+      }
       ++ctx->num_write;
       {
-       tracepoint(osd, do_osd_op_pre_cache_unpin, soid.oid.name.c_str(), soid.snap.val);
         if (!obs.exists) {
          result = 0;
          break;