Skip to content

Commit 334e7fa

Browse files
committed
os/bluestore: adjust and validate bluefs_shared_alloc_size
Make sure it's in-sync (meaning it's higher or equal and properly aligned) with bluestore_min_alloc_size into account Fixes: https://tracker.ceph.com/issues/63618 Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
1 parent 122c6b2 commit 334e7fa

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

src/os/bluestore/BlueFS.cc

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -695,16 +695,24 @@ void BlueFS::_init_alloc()
695695
}
696696
logger->set(l_bluefs_wal_alloc_unit, wal_alloc_size);
697697

698+
699+
uint64_t shared_alloc_size = cct->_conf->bluefs_shared_alloc_size;
700+
if (shared_alloc && shared_alloc->a) {
701+
uint64_t unit = shared_alloc->a->get_block_size();
702+
shared_alloc_size = std::max(
703+
unit,
704+
shared_alloc_size);
705+
ceph_assert(0 == p2phase(shared_alloc_size, unit));
706+
}
698707
if (bdev[BDEV_SLOW]) {
699708
alloc_size[BDEV_DB] = cct->_conf->bluefs_alloc_size;
700-
alloc_size[BDEV_SLOW] = cct->_conf->bluefs_shared_alloc_size;
701-
logger->set(l_bluefs_db_alloc_unit, cct->_conf->bluefs_alloc_size);
702-
logger->set(l_bluefs_main_alloc_unit, cct->_conf->bluefs_shared_alloc_size);
709+
alloc_size[BDEV_SLOW] = shared_alloc_size;
703710
} else {
704-
alloc_size[BDEV_DB] = cct->_conf->bluefs_shared_alloc_size;
705-
logger->set(l_bluefs_main_alloc_unit, 0);
706-
logger->set(l_bluefs_db_alloc_unit, cct->_conf->bluefs_shared_alloc_size);
711+
alloc_size[BDEV_DB] = shared_alloc_size;
712+
alloc_size[BDEV_SLOW] = 0;
707713
}
714+
logger->set(l_bluefs_db_alloc_unit, alloc_size[BDEV_DB]);
715+
logger->set(l_bluefs_main_alloc_unit, alloc_size[BDEV_SLOW]);
708716
// new wal and db devices are never shared
709717
if (bdev[BDEV_NEWWAL]) {
710718
alloc_size[BDEV_NEWWAL] = cct->_conf->bluefs_alloc_size;
@@ -718,13 +726,13 @@ void BlueFS::_init_alloc()
718726
continue;
719727
}
720728
ceph_assert(bdev[id]->get_size());
721-
ceph_assert(alloc_size[id]);
722729
if (is_shared_alloc(id)) {
723730
dout(1) << __func__ << " shared, id " << id << std::hex
724731
<< ", capacity 0x" << bdev[id]->get_size()
725732
<< ", block size 0x" << alloc_size[id]
726733
<< std::dec << dendl;
727734
} else {
735+
ceph_assert(alloc_size[id]);
728736
std::string name = "bluefs-";
729737
const char* devnames[] = { "wal","db","slow" };
730738
if (id <= BDEV_SLOW)

0 commit comments

Comments
 (0)