]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/librbd/ImageCtx.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / librbd / ImageCtx.cc
index 2051ebef9bda1381449136c15471d4d65e11e38b..7d41376325e6d1f3ed3e3a60600a532d90b8a4c4 100644 (file)
@@ -34,6 +34,7 @@
 #include "librbd/io/ImageDispatcher.h"
 #include "librbd/io/ObjectDispatcher.h"
 #include "librbd/io/QosImageDispatch.h"
+#include "librbd/io/IoOperations.h"
 #include "librbd/journal/StandardPolicy.h"
 #include "librbd/operation/ResizeRequest.h"
 
@@ -801,7 +802,9 @@ librados::IoCtx duplicate_io_ctx(librados::IoCtx& io_ctx) {
     if (sparse_read_threshold_bytes == 0) {
       sparse_read_threshold_bytes = get_object_size();
     }
-    if (!skip_partial_discard) {
+
+    bool dirty_cache = test_features(RBD_FEATURE_DIRTY_CACHE);
+    if (!skip_partial_discard || dirty_cache) {
       discard_granularity_bytes = 0;
     }
 
@@ -859,6 +862,9 @@ librados::IoCtx duplicate_io_ctx(librados::IoCtx& io_ctx) {
       config.get_val<uint64_t>("rbd_qos_write_bps_limit"),
       config.get_val<uint64_t>("rbd_qos_write_bps_burst"),
       config.get_val<uint64_t>("rbd_qos_write_bps_burst_seconds"));
+    io_image_dispatcher->apply_qos_exclude_ops(
+      librbd::io::rbd_io_operations_from_string(
+        config.get_val<std::string>("rbd_qos_exclude_ops"), nullptr));
 
     if (!disable_zero_copy &&
         config.get_val<bool>("rbd_disable_zero_copy_writes")) {
@@ -935,6 +941,9 @@ librados::IoCtx duplicate_io_ctx(librados::IoCtx& io_ctx) {
       ctx->write_snap_context(
         {{snapc.seq, {snapc.snaps.begin(), snapc.snaps.end()}}});
     }
+    if (data_ctx.get_pool_full_try()) {
+      ctx->full_try(true);
+    }
 
     // atomically reset the data IOContext to new version
     atomic_store(&data_io_context, ctx);