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

Commit 2cac13e4 authored by Liu Bo's avatar Liu Bo Committed by David Sterba
Browse files

Btrfs: fix trim 0 bytes after a device delete



A user reported a bug of btrfs's trim, that is we will trim 0 bytes
after a device delete.

The reproducer:

$ mkfs.btrfs disk1
$ mkfs.btrfs disk2
$ mount disk1 /mnt
$ fstrim -v /mnt
$ btrfs device add disk2 /mnt
$ btrfs device del disk1 /mnt
$ fstrim -v /mnt

This is because after we delete the device, the block group may start from
a non-zero place, which will confuse trim to discard nothing.

Reported-by: default avatarLutz Euler <lutz.euler@freenet.de>
Signed-off-by: default avatarLiu Bo <liubo2009@cn.fujitsu.com>
parent 6af021d8
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -7886,8 +7886,15 @@ int btrfs_trim_fs(struct btrfs_root *root, struct fstrim_range *range)
	u64 start;
	u64 end;
	u64 trimmed = 0;
	u64 total_bytes = btrfs_super_total_bytes(fs_info->super_copy);
	int ret = 0;

	/*
	 * try to trim all FS space, our block group may start from non-zero.
	 */
	if (range->len == total_bytes)
		cache = btrfs_lookup_first_block_group(fs_info, range->start);
	else
		cache = btrfs_lookup_block_group(fs_info, range->start);

	while (cache) {