]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: update bdev label's size if supported only 34683/head
authorIgor Fedotov <ifedotov@suse.com>
Wed, 22 Apr 2020 12:27:42 +0000 (15:27 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Wed, 22 Apr 2020 12:58:31 +0000 (15:58 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/os/bluestore/BitmapFreelistManager.cc
src/os/bluestore/BitmapFreelistManager.h
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index f48e3943d6dc1313e67da18c9f5214a8b84e1551..4a9ad01d91cab172ee67ea8b494ed35b1280ca23 100644 (file)
@@ -82,7 +82,7 @@ int BitmapFreelistManager::create(uint64_t new_size, uint64_t granularity,
     // set past-eof blocks as allocated
     _xor(size, blocks * bytes_per_block - size, txn);
   }
-  dout(0) << __func__
+  dout(1) << __func__
           << " size 0x" << std::hex << size
           << " bytes_per_block 0x" << bytes_per_block
           << " blocks 0x" << blocks
@@ -220,7 +220,7 @@ int BitmapFreelistManager::init(KeyValueDB *kvdb, bool db_in_read_only,
   std::function<int(const std::string&, std::string*)> cfg_reader)
 {
   dout(1) << __func__ << dendl;
-  int r = _init_from_external_cfg(cfg_reader);
+  int r = _read_cfg(cfg_reader);
   if (r != 0) {
     dout(1) << __func__ << " fall back to legacy meta repo" << dendl;
     _load_from_db(kvdb);
@@ -237,7 +237,7 @@ int BitmapFreelistManager::init(KeyValueDB *kvdb, bool db_in_read_only,
   return 0;
 }
 
-int BitmapFreelistManager::_init_from_external_cfg(
+int BitmapFreelistManager::_read_cfg(
   std::function<int(const std::string&, std::string*)> cfg_reader)
 {
   dout(1) << __func__ << dendl;
@@ -265,7 +265,7 @@ int BitmapFreelistManager::_init_from_external_cfg(
         derr << __func__ << " Failed to parse - "
           << keys[i] << ":" << val
           << ", error: " << err << dendl;
-        return r;
+        return -EINVAL;
       }
     } else {
       // this is expected for legacy deployed OSDs
index 8c08daa94e17ed92bfc873fb5b7a779bf1f19269..9689e87b37f8efe451d472ff83c0fd5f8a320444 100644 (file)
@@ -46,7 +46,7 @@ class BitmapFreelistManager : public FreelistManager {
     uint64_t offset, uint64_t length,
     KeyValueDB::Transaction txn);
 
-  int _init_from_external_cfg(
+  int _read_cfg(
     std::function<int(const std::string&, std::string*)> cfg_reader);
 
   int _expand(uint64_t new_size, KeyValueDB* db);
index 4d3f7807dd64c566a0610dab484605073cc40e27..937b09180ef9554b63093e1ed0f0696b7ccd08c1 100644 (file)
@@ -6840,6 +6840,24 @@ string BlueStore::get_device_path(unsigned id)
   return res;
 }
 
+int BlueStore::_set_bdev_label_size(const string& path, uint64_t size)
+{
+  bluestore_bdev_label_t label;
+  int r = _read_bdev_label(cct, path, &label);
+  if (r < 0) {
+    derr << "unable to read label for " << path << ": "
+          << cpp_strerror(r) << dendl;
+  } else {
+    label.size = size;
+    r = _write_bdev_label(cct, path, label);
+    if (r < 0) {
+      derr << "unable to write label for " << path << ": "
+            << cpp_strerror(r) << dendl;
+    }
+  }
+  return r;
+}
+
 int BlueStore::expand_devices(ostream& out)
 {
   int r = cold_open();
@@ -6872,23 +6890,13 @@ int BlueStore::expand_devices(ostream& out)
              <<": can't find device path " << dendl;
        continue;
       }
-      bluestore_bdev_label_t label;
-      int r = _read_bdev_label(cct, path, &label);
-      if (r < 0) {
-       derr << "unable to read label for " << path << ": "
-             << cpp_strerror(r) << dendl;
-       continue;
-      }
-      label.size = size;
-      r = _write_bdev_label(cct, path, label);
-      if (r < 0) {
-       derr << "unable to write label for " << path << ": "
-             << cpp_strerror(r) << dendl;
-       continue;
+      if (bluefs->bdev_support_label(devid)) {
+        if (_set_bdev_label_size(p, size) >= 0) {
+          out << devid
+            << " : size label updated to " << size
+            << std::endl;
+        }
       }
-      out << devid
-          <<" : size label updated to " << size
-          << std::endl;
     }
   }
   uint64_t size0 = fm->get_size();
@@ -6898,6 +6906,13 @@ int BlueStore::expand_devices(ostream& out)
       << " : expanding " << " from 0x" << std::hex
       << size0 << " to 0x" << size << std::dec << std::endl;
     _write_out_fm_meta(size);
+    if (bdev->supported_bdev_label()) {
+      if (_set_bdev_label_size(path, size) >= 0) {
+        out << bluefs_layout.shared_bdev
+          << " : size label updated to " << size
+          << std::endl;
+      }
+    }
     cold_close();
 
     // mount in read/write to sync expansion changes
index 82fbd72b56af3237d329fb68560ebcac957e58cc..d251053ea2e22511494c5b3faddea55ccffa2411 100644 (file)
@@ -2317,6 +2317,7 @@ public:
 private:
   int _check_or_set_bdev_label(std::string path, uint64_t size, std::string desc,
                               bool create);
+  int _set_bdev_label_size(const string& path, uint64_t size);
 
   int _open_super_meta();