From e56f2967be3a0e9c46c537955e6a0c9e419ab527 Mon Sep 17 00:00:00 2001 From: Bernd Zeimetz Date: Sun, 5 Jan 2020 14:30:54 +0100 Subject: [PATCH] os/bluestore/Blue(FS|Store): uint64_t alloc_size MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Compiling on Debian's 32bit architectures failed with <>/src/os/bluestore/BlueStore.cc:5539:37: error: no matching function for call to ‘p2align(size_t&, uint64_t&)’ 5539 | total += p2align(len, alloc_size); | ^ In file included from /<>/src/include/denc.h:42, from /<>/src/include/encoding.h:40, from /<>/src/include/compact_map.h:16, from /<>/src/include/mempool.h:32, from /<>/src/os/bluestore/BlueStore.h:36, from /<>/src/os/bluestore/BlueStore.cc:25: /<>/src/include/intarith.h:57:20: note: candidate: ‘template constexpr T p2align(T, T)’ 57 | constexpr inline T p2align(T x, T align) { | ^~~~~~~ /<>/src/include/intarith.h:57:20: note: template argument deduction/substitution failed: /<>/src/os/bluestore/BlueStore.cc:5539:37: note: deduced conflicting types for parameter ‘T’ (‘unsigned int’ and ‘long long unsigned int’) 5539 | total += p2align(len, alloc_size); As far as I understand it the available_freespace should at least be able to return the same number as alloc_size, so we should use uint64_t instead of size_t here, similar to 10a953afc8f803e50c96354470fb114b33e62599 Fixes: https://tracker.ceph.com/issues/43451 Signed-off-by: Bernd Zeimetz --- src/os/bluestore/BlueFS.h | 2 +- src/os/bluestore/BlueStore.cc | 10 +++++----- src/os/bluestore/BlueStore.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/os/bluestore/BlueFS.h b/src/os/bluestore/BlueFS.h index 3ae173f80ff..8c715de3cf9 100644 --- a/src/os/bluestore/BlueFS.h +++ b/src/os/bluestore/BlueFS.h @@ -72,7 +72,7 @@ public: * @params * alloc_size - allocation unit size to check */ - virtual size_t available_freespace(uint64_t alloc_size) = 0; + virtual uint64_t available_freespace(uint64_t alloc_size) = 0; }; class BlueFSVolumeSelector { diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index d11eabf0ea0..fc81dcabe6c 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -5872,12 +5872,12 @@ int BlueStore::allocate_bluefs_freespace( return 0; } -size_t BlueStore::available_freespace(uint64_t alloc_size) { - size_t total = 0; - auto iterated_allocation = [&](size_t off, size_t len) { +uint64_t BlueStore::available_freespace(uint64_t alloc_size) { + uint64_t total = 0; + auto iterated_allocation = [&](uint64_t off, uint64_t len) { //only count in size that is alloc_size aligned - size_t dist_to_alignment; - size_t offset_in_block = off & (alloc_size - 1); + uint64_t dist_to_alignment; + uint64_t offset_in_block = off & (alloc_size - 1); if (offset_in_block == 0) dist_to_alignment = 0; else diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index ec7012db8ae..0aef90edeb4 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -3207,7 +3207,7 @@ private: PExtentVector& extents) override { return allocate_bluefs_freespace(min_size, size, &extents); }; - size_t available_freespace(uint64_t alloc_size) override; + uint64_t available_freespace(uint64_t alloc_size) override; inline bool _use_rotational_settings(); public: -- 2.39.5