From: Sage Weil Date: Mon, 19 Feb 2018 16:16:24 +0000 (-0600) Subject: os/bluestore: prevent statfs available from going negative X-Git-Tag: v12.2.5~85^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0f8c1695e5b227c5b168a0a2ea06672f344ce263;p=ceph.git os/bluestore: prevent statfs available from going negative Fixes: https://tracker.ceph.com/issues/23040 Signed-off-by: Sage Weil (cherry picked from commit 8709cbc2ecb207b622529f4813f06af3ccfca814) --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 66f21c598df..6a98ac0ec04 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -6217,10 +6217,14 @@ int BlueStore::statfs(struct store_statfs_t *buf) buf->available = alloc->get_free(); if (bluefs) { - // part of our shared device is "free" according to BlueFS - // Don't include bluestore_bluefs_min because that space can't - // be used for any other purpose. - buf->available += bluefs->get_free(bluefs_shared_bdev) - cct->_conf->bluestore_bluefs_min; + // part of our shared device is "free" according to BlueFS, but we + // can't touch bluestore_bluefs_min of it. + int64_t shared_available = std::min( + bluefs->get_free(bluefs_shared_bdev), + bluefs->get_total(bluefs_shared_bdev) - cct->_conf->bluestore_bluefs_min); + if (shared_available > 0) { + buf->available += shared_available; + } // include dedicated db, too, if that isn't the shared device. if (bluefs_shared_bdev != BlueFS::BDEV_DB) {