Li Zefan 7fe1e64150 Btrfs: rewrite btrfs_trim_block_group()
There are various bugs in block group trimming:

- It may trim from offset smaller than user-specified offset.
- It may trim beyond user-specified range.
- It may leak free space for extents smaller than specified minlen.
- It may truncate the last trimmed extent thus leak free space.
- With mixed extents+bitmaps, some extents may not be trimmed.
- With mixed extents+bitmaps, some bitmaps may not be trimmed (even
none will be trimmed). Even for those trimmed, not all the free space
in the bitmaps will be trimmed.

I rewrite btrfs_trim_block_group() and break it into two functions.
One is to trim extents only, and the other is to trim bitmaps only.

Before patching:

	# fstrim -v /mnt/
	/mnt/: 1496465408 bytes were trimmed

After patching:

	# fstrim -v /mnt/
	/mnt/: 2193768448 bytes were trimmed

And this matches the total free space:

	# btrfs fi df /mnt
	Data: total=3.58GB, used=1.79GB
	System, DUP: total=8.00MB, used=4.00KB
	System: total=4.00MB, used=0.00
	Metadata, DUP: total=205.12MB, used=97.14MB
	Metadata: total=8.00MB, used=0.00

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
2012-01-11 10:26:48 +08:00
..
2011-03-31 11:26:23 -03:00
2011-09-27 18:08:04 +02:00
2011-08-22 17:41:48 -07:00
2011-10-24 17:22:29 -07:00
2011-09-12 11:47:10 -07:00
2011-07-27 22:21:58 -04:00
2011-07-22 19:42:12 -04:00
2011-03-31 11:26:23 -03:00
2011-07-26 16:49:47 -07:00
2011-07-26 16:49:47 -07:00
2011-07-26 13:05:28 -04:00
2011-03-10 08:52:07 +01:00
2011-04-14 16:06:56 -07:00
2011-09-27 18:08:04 +02:00
2011-07-26 16:49:47 -07:00
2011-07-26 16:49:47 -07:00
2011-03-21 00:16:08 -04:00
2011-05-26 10:01:43 -06:00
2011-09-27 08:12:33 -07:00
2011-07-25 20:57:11 -07:00
2011-08-03 14:25:24 -10:00
2011-09-27 08:12:33 -07:00
2011-03-14 09:15:28 -04:00
2011-07-18 12:29:43 -04:00