]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: conditional checking label of bluefs devices
authorxie xingguo <xie.xingguo@zte.com.cn>
Fri, 2 Sep 2016 08:45:05 +0000 (16:45 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Fri, 2 Sep 2016 08:50:12 +0000 (16:50 +0800)
As NVMe devices may not support to do so.

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/bluestore/BlueFS.cc
src/os/bluestore/BlueFS.h
src/os/bluestore/BlueStore.cc

index d5d0323bb3061ac3a353e0f70e7610653e9ad2d8..9c7e21eb72b4ec72f8127a29af4b5cb9493a74fd 100644 (file)
@@ -120,6 +120,13 @@ int BlueFS::add_block_device(unsigned id, string path)
   return 0;
 }
 
+bool BlueFS::bdev_support_label(unsigned id)
+{
+  assert(id < bdev.size());
+  assert(bdev[id]);
+  return bdev[id]->supported_bdev_label();
+}
+
 uint64_t BlueFS::get_block_device_size(unsigned id)
 {
   if (id < bdev.size() && bdev[id])
index f49de277c152c822117b0d24dc704908d742b008..43681a3534747448bab4ca32e6dc9277f772ef51 100644 (file)
@@ -351,6 +351,7 @@ public:
   void sync_metadata();
 
   int add_block_device(unsigned bdev, string path);
+  bool bdev_support_label(unsigned id);
   uint64_t get_block_device_size(unsigned bdev);
 
   /// gift more block space
index 4875ec3112c34b8e02e3e186f5e7fb100d87f522..260e328b2a1a66aacd1720b63fb18b66f6254d19 100644 (file)
@@ -2138,15 +2138,18 @@ int BlueStore::_open_db(bool create)
              << cpp_strerror(r) << dendl;
         goto free_bluefs;
       }
-      r = _check_or_set_bdev_label(
-       bfn,
-       bluefs->get_block_device_size(BlueFS::BDEV_DB),
-        "bluefs db", create);
-      if (r < 0) {
-        derr << __func__
-            << " check block device(" << bfn << ") label returned: " 
-             << cpp_strerror(r) << dendl;
-        goto free_bluefs;
+
+      if (bluefs->bdev_support_label(BlueFS::BDEV_DB)) {
+        r = _check_or_set_bdev_label(
+         bfn,
+         bluefs->get_block_device_size(BlueFS::BDEV_DB),
+          "bluefs db", create);
+        if (r < 0) {
+          derr << __func__
+              << " check block device(" << bfn << ") label returned: "
+               << cpp_strerror(r) << dendl;
+          goto free_bluefs;
+        }
       }
       if (create) {
        bluefs->add_block_extent(
@@ -2189,15 +2192,19 @@ int BlueStore::_open_db(bool create)
             << cpp_strerror(r) << dendl;
         goto free_bluefs;                      
       }
-      r = _check_or_set_bdev_label(
-       bfn,
-       bluefs->get_block_device_size(BlueFS::BDEV_WAL),
-        "bluefs wal", create);
-      if (r < 0) {
-        derr << __func__ << " check block device(" << bfn << ") label returned: "
-            << cpp_strerror(r) << dendl;
-        goto free_bluefs;
+
+      if (bluefs->bdev_support_label(BlueFS::BDEV_WAL)) {
+        r = _check_or_set_bdev_label(
+         bfn,
+         bluefs->get_block_device_size(BlueFS::BDEV_WAL),
+          "bluefs wal", create);
+        if (r < 0) {
+          derr << __func__ << " check block device(" << bfn
+               << ") label returned: " << cpp_strerror(r) << dendl;
+          goto free_bluefs;
+        }
       }
+
       if (create) {
        bluefs->add_block_extent(
          BlueFS::BDEV_WAL, BDEV_LABEL_BLOCK_SIZE,