BlockDevice* BlockDevice::create_with_type(block_device_t device_type,
CephContext* cct, const std::string& path, aio_callback_t cb,
- void *cbpriv, aio_callback_t d_cb, void *d_cbpriv)
+ void *cbpriv, aio_callback_t d_cb, void *d_cbpriv, const char* dev_name)
{
switch (device_type) {
#if defined(HAVE_LIBAIO) || defined(HAVE_POSIXAIO)
case block_device_t::aio:
- return new KernelDevice(cct, cb, cbpriv, d_cb, d_cbpriv);
+ return new KernelDevice(cct, cb, cbpriv, d_cb, d_cbpriv, dev_name);
#endif
#if defined(HAVE_SPDK)
case block_device_t::spdk:
BlockDevice *BlockDevice::create(
CephContext* cct, const string& path, aio_callback_t cb,
- void *cbpriv, aio_callback_t d_cb, void *d_cbpriv)
+ void *cbpriv, aio_callback_t d_cb, void *d_cbpriv, const char* dev_name)
{
const string blk_dev_name = cct->_conf.get_val<string>("bdev_type");
block_device_t device_type = block_device_t::unknown;
} else {
device_type = device_type_from_name(blk_dev_name);
}
- return create_with_type(device_type, cct, path, cb, cbpriv, d_cb, d_cbpriv);
+ return create_with_type(device_type, cct, path, cb, cbpriv, d_cb, d_cbpriv, dev_name);
}
bool BlockDevice::is_valid_io(uint64_t off, uint64_t len) const {
static block_device_t device_type_from_name(const std::string& blk_dev_name);
static BlockDevice *create_with_type(block_device_t device_type,
CephContext* cct, const std::string& path, aio_callback_t cb,
- void *cbpriv, aio_callback_t d_cb, void *d_cbpriv);
+ void *cbpriv, aio_callback_t d_cb, void *d_cbpriv, const char* dev_name);
+
protected:
uint64_t size = 0;
uint64_t block_size = 0;
virtual ~BlockDevice() = default;
static BlockDevice *create(
- CephContext* cct, const std::string& path, aio_callback_t cb, void *cbpriv, aio_callback_t d_cb, void *d_cbpriv);
+ CephContext* cct, const std::string& path, aio_callback_t cb, void *cbpriv, aio_callback_t d_cb,
+ void *d_cbpriv, const char* dev_name = "");
virtual bool supported_bdev_label() { return true; }
virtual bool is_rotational() { return rotational; }
using ceph::mono_clock;
using ceph::operator <<;
-KernelDevice::KernelDevice(CephContext* cct, aio_callback_t cb, void *cbpriv, aio_callback_t d_cb, void *d_cbpriv)
+KernelDevice::KernelDevice(CephContext* cct, aio_callback_t cb, void *cbpriv, aio_callback_t d_cb, void *d_cbpriv, const char* dev_name)
: BlockDevice(cct, cb, cbpriv),
aio(false), dio(false),
discard_callback(d_cb),
ceph::unique_leakable_ptr<buffer::raw> create_custom_aligned(size_t len, IOContext* ioc) const;
public:
- KernelDevice(CephContext* cct, aio_callback_t cb, void *cbpriv, aio_callback_t d_cb, void *d_cbpriv);
+ KernelDevice(CephContext* cct, aio_callback_t cb, void *cbpriv, aio_callback_t d_cb,
+ void *d_cbpriv, const char* dev_name = "");
~KernelDevice();
void aio_submit(IOContext *ioc) override;
bluefs_shared_alloc_context_t* _shared_alloc)
{
uint64_t reserved;
+ string dev_name;
switch(id) {
case BDEV_WAL:
case BDEV_NEWWAL:
reserved = BDEV_LABEL_BLOCK_SIZE;
+ dev_name = "wal";
break;
case BDEV_DB:
case BDEV_NEWDB:
reserved = SUPER_RESERVED;
+ dev_name = "db";
break;
case BDEV_SLOW:
reserved = 0;
+ dev_name = "slow";
break;
default:
ceph_assert(false);
ceph_assert(id < bdev.size());
ceph_assert(bdev[id] == NULL);
BlockDevice *b = BlockDevice::create(cct, path, NULL, NULL,
- discard_cb[id], static_cast<void*>(this));
+ discard_cb[id], static_cast<void*>(this), dev_name.c_str());
block_reserved[id] = reserved;
if (_shared_alloc) {
b->set_no_exclusive_lock();
}
int add_block_device(unsigned bdev, const std::string& path, bool trim,
- bluefs_shared_alloc_context_t* _shared_alloc = nullptr);
+ bluefs_shared_alloc_context_t* _shared_alloc = nullptr);
bool bdev_support_label(unsigned id);
uint64_t get_block_device_size(unsigned bdev) const;
BlockDevice* get_block_device(unsigned bdev) const;
{
ceph_assert(bdev == NULL);
string p = path + "/block";
- bdev = BlockDevice::create(cct, p, aio_cb, static_cast<void*>(this), discard_cb, static_cast<void*>(this));
+ bdev = BlockDevice::create(cct, p, aio_cb, static_cast<void*>(this), discard_cb, static_cast<void*>(this), "bluestore");
int r = bdev->open(p);
if (r < 0)
goto fail;