]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/rbm: remove duplicate code and introduce a shared routine in...
authormyoungwon oh <ohmyoungwon@gmail.com>
Wed, 11 Sep 2024 07:02:56 +0000 (07:02 +0000)
committermyoungwon oh <ohmyoungwon@gmail.com>
Wed, 11 Sep 2024 07:50:31 +0000 (07:50 +0000)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
src/crimson/os/seastore/random_block_manager/block_rb_manager.cc
src/crimson/os/seastore/random_block_manager/block_rb_manager.h

index 2b303fbc4d9026472f116c86f5cca95103bbcd6b..e8376712a713c2181d250d9a71c6187b3ec18e71 100644 (file)
@@ -115,18 +115,25 @@ BlockRBManager::open_ertr::future<> BlockRBManager::open()
   return open_ertr::now();
 }
 
+bool BlockRBManager::check_valid_range(rbm_abs_addr addr, bufferptr &bptr) {
+  LOG_PREFIX(BlockRBManager::check_valid_range);
+  rbm_abs_addr start = device->get_shard_start();
+  rbm_abs_addr end = device->get_shard_end();
+  if (addr < start || addr + bptr.length() > end) {
+    ERROR("out of range: start {}, end {}, addr {}, length {}",
+      start, end, addr, bptr.length());
+    return false;
+  }
+  return true;
+}
+
 BlockRBManager::write_ertr::future<> BlockRBManager::write(
   paddr_t paddr,
   bufferptr &bptr)
 {
-  LOG_PREFIX(BlockRBManager::write);
   ceph_assert(device);
   rbm_abs_addr addr = convert_paddr_to_abs_addr(paddr);
-  rbm_abs_addr start = device->get_shard_start();
-  rbm_abs_addr end = device->get_shard_end();
-  if (addr < start || addr + bptr.length() > end) {
-    ERROR("out of range: start {}, end {}, addr {}, length {}",
-      start, end, addr, bptr.length());
+  if (!check_valid_range(addr, bptr)) {
     return crimson::ct_error::erange::make();
   }
   bufferptr bp = bufferptr(ceph::buffer::create_page_aligned(bptr.length()));
@@ -140,14 +147,9 @@ BlockRBManager::read_ertr::future<> BlockRBManager::read(
   paddr_t paddr,
   bufferptr &bptr)
 {
-  LOG_PREFIX(BlockRBManager::read);
   ceph_assert(device);
   rbm_abs_addr addr = convert_paddr_to_abs_addr(paddr);
-  rbm_abs_addr start = device->get_shard_start();
-  rbm_abs_addr end = device->get_shard_end();
-  if (addr < start || addr + bptr.length() > end) {
-    ERROR("out of range: start {}, end {}, addr {}, length {}",
-      start, end, addr, bptr.length());
+  if (!check_valid_range(addr, bptr)) {
     return crimson::ct_error::erange::make();
   }
   return device->read(
index f61db61737057d4084b7f2733438c8a37c25e60c..877b2a076628d0b08caf51b1543e5365b1f53e37 100644 (file)
@@ -127,6 +127,8 @@ public:
     return device->get_journal_size();
   }
 
+  bool check_valid_range(rbm_abs_addr paddr, bufferptr &bptr);
+
 #ifdef UNIT_TESTS_BUILT
   void prefill_fragmented_device() final;
 #endif