From 8709cbc2ecb207b622529f4813f06af3ccfca814 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 19 Feb 2018 10:16:24 -0600 Subject: [PATCH] os/bluestore: prevent statfs available from going negative Fixes: https://tracker.ceph.com/issues/23040 Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index bd38f32cb1b..f419a0a64aa 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -6396,10 +6396,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) { -- 2.39.5