From: xie xingguo Date: Mon, 9 Sep 2019 08:47:47 +0000 (+0800) Subject: os/bluestore: fix space balancing overflow X-Git-Tag: v15.1.0~1613^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F30255%2Fhead;p=ceph.git os/bluestore: fix space balancing overflow When gifting, bluestore should not gift more than it actually has. same for bluefs when reclaming. Signed-off-by: xie xingguo --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 40f29fcf781..769f28f2588 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -5783,6 +5783,8 @@ int64_t BlueStore::_get_bluefs_size_delta(uint64_t bluefs_free, uint64_t bluefs_ uint64_t reclaim = 0; if (bluefs_ratio < cct->_conf->bluestore_bluefs_min_ratio) { gift = cct->_conf->bluestore_bluefs_gift_ratio * total_free; + if (gift >= my_free) + gift = my_free / 2; dout(10) << __func__ << " bluefs_ratio " << bluefs_ratio << " < min_ratio " << cct->_conf->bluestore_bluefs_min_ratio << ", should gift " << byte_u_t(gift) << dendl; @@ -5790,6 +5792,8 @@ int64_t BlueStore::_get_bluefs_size_delta(uint64_t bluefs_free, uint64_t bluefs_ reclaim = cct->_conf->bluestore_bluefs_reclaim_ratio * total_free; if (bluefs_total - reclaim < cct->_conf->bluestore_bluefs_min) reclaim = bluefs_total - cct->_conf->bluestore_bluefs_min; + if (reclaim >= bluefs_free) + reclaim = bluefs_free / 2; dout(10) << __func__ << " bluefs_ratio " << bluefs_ratio << " > max_ratio " << cct->_conf->bluestore_bluefs_max_ratio << ", should reclaim " << byte_u_t(reclaim) << dendl;