]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: fix crypto prepare_copyup to use new remap_extents api 38182/head
authorOr Ozeri <oro@il.ibm.com>
Thu, 19 Nov 2020 06:26:51 +0000 (08:26 +0200)
committerOr Ozeri <oro@il.ibm.com>
Thu, 19 Nov 2020 08:03:54 +0000 (10:03 +0200)
This commit changes the crypto prepare_copyup implementation to correctly
translate object extents to image extents, via the remap_extents api.
Additionally, we fix relevant unit tests that call this api to correctly expect these calls.

Signed-off-by: Or Ozeri <oro@il.ibm.com>
src/librbd/crypto/CryptoObjectDispatch.cc
src/test/librbd/crypto/test_mock_CryptoObjectDispatch.cc

index 5adb688131bfc62d2403cf80f7d56142eb4d1bbd..b82cd679f7649dda19b54b0fa0e83c3d5f4e5ef2 100644 (file)
@@ -616,9 +616,8 @@ int CryptoObjectDispatch<I>::prepare_copyup(
               extent.get_off(), extent.get_len());
 
       io::Extents image_extents;
-      Striper::extent_to_file(
-              m_image_ctx->cct, &m_image_ctx->layout, object_no, aligned_off,
-              aligned_len, image_extents);
+      io::util::extent_to_file(
+              m_image_ctx, object_no, aligned_off, aligned_len, image_extents);
 
       ceph::bufferlist encrypted_bl;
       uint64_t position = 0;
index 104b44a159540022b335db3d9222dd7f75157879..f3b9aef8340536f4a35d7d61ddf97811f68ea81b 100644 (file)
@@ -101,6 +101,7 @@ namespace crypto {
 using ::testing::_;
 using ::testing::ElementsAre;
 using ::testing::Invoke;
+using ::testing::InSequence;
 using ::testing::Pair;
 using ::testing::Return;
 using ::testing::WithArg;
@@ -223,6 +224,12 @@ struct TestMockCryptoCryptoObjectDispatch : public TestMockFixture {
             mock_image_ctx->layout.object_size));
   }
 
+  void expect_remap_extents(uint64_t offset, uint64_t length) {
+    EXPECT_CALL(*mock_image_ctx->io_image_dispatcher, remap_extents(
+            ElementsAre(Pair(offset, length)),
+            io::IMAGE_EXTENTS_MAP_TYPE_PHYSICAL_TO_LOGICAL));
+  }
+
   void expect_get_parent_overlap(uint64_t overlap) {
     EXPECT_CALL(*mock_image_ctx, get_parent_overlap(_, _))
             .WillOnce(WithArg<1>(Invoke([overlap](uint64_t *o) {
@@ -510,6 +517,7 @@ TEST_F(TestMockCryptoCryptoObjectDispatch, UnalignedWriteCopyup) {
 
   expect_get_object_size();
   expect_get_parent_overlap(mock_image_ctx->layout.object_size);
+  expect_remap_extents(0, mock_image_ctx->layout.object_size);
   expect_prune_parent_extents(mock_image_ctx->layout.object_size);
   EXPECT_CALL(mock_exclusive_lock, is_lock_owner()).WillRepeatedly(
           Return(true));
@@ -698,6 +706,13 @@ TEST_F(TestMockCryptoCryptoObjectDispatch, PrepareCopyup) {
 
   expect_get_object_size();
   expect_encrypt(6);
+  InSequence seq;
+  expect_remap_extents(0, 4096);
+  expect_remap_extents(4096, 4096);
+  expect_remap_extents(8192, 4096);
+  expect_remap_extents(0, 4096);
+  expect_remap_extents(4096, 8192);
+  expect_remap_extents(16384, 4096);
   ASSERT_EQ(0, mock_crypto_object_dispatch->prepare_copyup(
           0, &snapshot_sparse_bufferlist));