]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: prevent statfs available from going negative
authorSage Weil <sage@redhat.com>
Mon, 19 Feb 2018 16:16:24 +0000 (10:16 -0600)
committerSage Weil <sage@redhat.com>
Mon, 19 Feb 2018 19:10:36 +0000 (13:10 -0600)
Fixes: https://tracker.ceph.com/issues/23040
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc

index bd38f32cb1bd16d36b71755220154ba9151218cb..f419a0a64aadc10997932371231ec3a20ec902ea 100644 (file)
@@ -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) {