bcachefs: Don't underflow c->sectors_available

This rarely used error path should've been checking for underflow -
oops.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
This commit is contained in:
Kent Overstreet 2021-06-10 23:33:27 -04:00 committed by Kent Overstreet
parent 953ee28a3e
commit 290448ed2e

View File

@ -1437,7 +1437,14 @@ void bch2_trans_fs_usage_apply(struct btree_trans *trans,
*/
should_not_have_added = added - (s64) disk_res_sectors;
if (unlikely(should_not_have_added > 0)) {
atomic64_sub(should_not_have_added, &c->sectors_available);
u64 old, new, v = atomic64_read(&c->sectors_available);
do {
old = v;
new = max_t(s64, 0, old - should_not_have_added);
} while ((v = atomic64_cmpxchg(&c->sectors_available,
old, new)) != old);
added -= should_not_have_added;
warn = true;
}