From 38797fa5e2a61c33c5da7344d3485bb82421e7b0 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Fri, 2 Sep 2016 16:45:05 +0800 Subject: [PATCH] os/bluestore: conditional checking label of bluefs devices As NVMe devices may not support to do so. Signed-off-by: xie xingguo --- src/os/bluestore/BlueFS.cc | 7 ++++++ src/os/bluestore/BlueFS.h | 1 + src/os/bluestore/BlueStore.cc | 41 ++++++++++++++++++++--------------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index d5d0323bb3061..9c7e21eb72b4e 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -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]) diff --git a/src/os/bluestore/BlueFS.h b/src/os/bluestore/BlueFS.h index f49de277c152c..43681a3534747 100644 --- a/src/os/bluestore/BlueFS.h +++ b/src/os/bluestore/BlueFS.h @@ -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 diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 4875ec3112c34..260e328b2a1a6 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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, -- 2.39.5