From: Bernd Zeimetz Date: Sun, 5 Jan 2020 13:30:54 +0000 (+0100) Subject: os/bluestore/Blue(FS|Store): uint64_t alloc_size X-Git-Tag: v15.1.0~314^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F32484%2Fhead;p=ceph.git os/bluestore/Blue(FS|Store): uint64_t alloc_size 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 --- 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: