1
linux/fs/btrfs
Liu Hui 1f3c79a28c Btrfs: Fix free block discard calls down to the block layer
This is a patch to fix discard semantic to make Btrfs work with FTL and SSD.
We can improve FTL's performance by telling it which sectors are freed by file
system. But if we don't tell FTL the information of free sectors in proper
time, the transaction mechanism of Btrfs will be destroyed and Btrfs could not
roll back the previous transaction under the power loss condition.

There are some problems in the old implementation:
1, In __free_extent(), the pinned down extents should not be discarded.
2, In free_extents(), the free extents are all pinned, so they need to
be discarded in transaction committing time instead of free_extents().
3, The reserved extent used by log tree should be discard too.

This patch change discard behavior as follows:
1, For the extents which need to be free at once,
   we discard them in update_block_group().
2, Delay discarding the pinned extent in btrfs_finish_extent_commit()
   when committing transaction.
3, Remove discarding from free_extents() and __free_extent()
4, Add discard interface into btrfs_free_reserved_extent()
5, Discard sectors before updating the free space cache, otherwise,
   FTL will destroy file system data.
2009-01-05 15:57:51 -05:00
..
acl.c Btrfs: optimize btrget/set/removexattr 2008-09-25 11:04:07 -04:00
async-thread.c Btrfs: Check kthread_should_stop() before schedule() in worker_loop 2008-11-12 14:36:58 -05:00
async-thread.h Btrfs: Add ordered async work queues 2008-11-06 22:03:00 -05:00
btrfs_inode.h Btrfs: fix leaking block group on balance 2008-12-11 16:30:39 -05:00
compat.h Btrfs: compat code fixes 2008-11-20 10:22:27 -05:00
compression.c Btrfs: fix nodatasum handling in balancing code 2008-12-12 10:03:38 -05:00
compression.h Btrfs: Add zlib compression support 2008-10-29 14:49:59 -04:00
COPYING Btrfs: add GPLv2 2007-06-12 09:07:21 -04:00
crc32c.h Btrfs: add and improve comments 2008-09-29 15:18:18 -04:00
ctree.c Btrfs: properly check free space for tree balancing 2008-12-17 10:21:48 -05:00
ctree.h Btrfs: shift all end_io work to thread pools 2008-12-17 14:51:42 -05:00
dir-item.c Btrfs: add and improve comments 2008-09-29 15:18:18 -04:00
disk-io.c Btrfs: avoid potential super block corruption 2009-01-05 15:43:42 -05:00
disk-io.h Btrfs: superblock duplication 2008-12-08 16:46:26 -05:00
export.c Remove Btrfs compat code for older kernels 2008-09-25 15:41:59 -04:00
export.h NFS support for btrfs - v3 2008-09-25 11:04:06 -04:00
extent_io.c Btrfs: Fix typo in clear_state_cb 2009-01-05 15:49:55 -05:00
extent_io.h Btrfs: fix nodatasum handling in balancing code 2008-12-12 10:03:38 -05:00
extent_map.c Btrfs: Add zlib compression support 2008-10-29 14:49:59 -04:00
extent_map.h Btrfs: Fix csum error for compressed data 2008-11-10 07:34:43 -05:00
extent-tree.c Btrfs: Fix free block discard calls down to the block layer 2009-01-05 15:57:51 -05:00
file-item.c Btrfs: properly check free space for tree balancing 2008-12-17 10:21:48 -05:00
file.c Btrfs: Fix memset length in btrfs_file_write 2009-01-05 15:49:11 -05:00
free-space-cache.c Btrfs: superblock duplication 2008-12-08 16:46:26 -05:00
hash.h Switch btrfs_name_hash() to crc32c 2008-09-25 11:04:06 -04:00
inode-item.c Btrfs: make things static and include the right headers 2008-12-02 09:54:17 -05:00
inode-map.c Btrfs: extent_map and data=ordered fixes for space balancing 2008-09-26 10:05:38 -04:00
inode.c Btrfs: shift all end_io work to thread pools 2008-12-17 14:51:42 -05:00
INSTALL Btrfs: Documentation update 2007-06-22 14:49:31 -04:00
ioctl.c Btrfs: add permission checks to the ioctls 2009-01-05 16:57:23 -05:00
ioctl.h Btrfs: Allow subvolumes and snapshots anywhere in the directory tree 2008-11-17 21:02:50 -05:00
locking.c Btrfs: add and improve comments 2008-09-29 15:18:18 -04:00
locking.h btrfs_search_slot: reduce lock contention by cowing in two stages 2008-09-25 11:04:06 -04:00
Makefile Btrfs: Add zlib compression support 2008-10-29 14:49:59 -04:00
ordered-data.c Btrfs: move data checksumming into a dedicated tree 2008-12-08 16:58:54 -05:00
ordered-data.h Btrfs: move data checksumming into a dedicated tree 2008-12-08 16:58:54 -05:00
orphan.c Btrfs: Create orphan inode records to prevent lost files after a crash 2008-09-25 11:04:05 -04:00
print-tree.c Btrfs: Add zlib compression support 2008-10-29 14:49:59 -04:00
print-tree.h Btrfs: Create extent_buffer interface for large blocksizes 2008-09-25 11:03:56 -04:00
ref-cache.c Btrfs: add and improve comments 2008-09-29 15:18:18 -04:00
ref-cache.h Btrfs: add and improve comments 2008-09-29 15:18:18 -04:00
root-tree.c Btrfs: make things static and include the right headers 2008-12-02 09:54:17 -05:00
struct-funcs.c Btrfs: Fix sparse endian warnings in struct-funcs.c 2008-12-02 11:18:37 -05:00
super.c Btrfs: add permission checks to the ioctls 2009-01-05 16:57:23 -05:00
sysfs.c Btrfs: do not call kfree if kmalloc failed in btrfs_sysfs_add_super 2009-01-05 15:43:42 -05:00
transaction.c Btrfs: update directory's size when creating subvol/snapshot 2009-01-05 15:43:43 -05:00
transaction.h Btrfs: fix leaking block group on balance 2008-12-11 16:30:39 -05:00
tree-defrag.c Btrfs: nuke fs wide allocation mutex V2 2008-10-29 14:49:05 -04:00
tree-log.c Btrfs: avoid orphan inode caused by log replay 2009-01-05 15:43:42 -05:00
tree-log.h Btrfs: Add a write ahead tree log to optimize synchronous operations 2008-09-25 11:04:07 -04:00
version.h Update Btrfs files for in-kernel usage 2008-09-25 15:41:59 -04:00
version.sh Btrfs: Fixes for 2.6.28-rc API changes 2008-11-19 21:17:22 -05:00
volumes.c Btrfs: shared seed device 2008-12-12 10:03:26 -05:00
volumes.h Btrfs: shared seed device 2008-12-12 10:03:26 -05:00
xattr.c Btrfs: fix return value from btrfs_listxattr when buffer size is too small 2008-12-17 10:21:26 -05:00
xattr.h Btrfs: optimize btrget/set/removexattr 2008-09-25 11:04:07 -04:00
zlib.c Btrfs: make things static and include the right headers 2008-12-02 09:54:17 -05:00