Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65e5341b authored by Chris Mason's avatar Chris Mason
Browse files

Btrfs: fix off by one while setting block groups readonly



When we read in block groups, we'll set non-redundant groups
readonly if we find a raid1, DUP or raid10 group.  But the
ro code has an off by one bug in the math around testing to
make sure out accounting doesn't go wrong.

Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 83a50de9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -7971,13 +7971,14 @@ static int set_block_group_ro(struct btrfs_block_group_cache *cache)

	if (sinfo->bytes_used + sinfo->bytes_reserved + sinfo->bytes_pinned +
	    sinfo->bytes_may_use + sinfo->bytes_readonly +
	    cache->reserved_pinned + num_bytes < sinfo->total_bytes) {
	    cache->reserved_pinned + num_bytes <= sinfo->total_bytes) {
		sinfo->bytes_readonly += num_bytes;
		sinfo->bytes_reserved += cache->reserved_pinned;
		cache->reserved_pinned = 0;
		cache->ro = 1;
		ret = 0;
	}

	spin_unlock(&cache->lock);
	spin_unlock(&sinfo->lock);
	return ret;