linux/fs/btrfs
Sage Weil c5c9cd4d1b Btrfs: allow clone of an arbitrary file range
This patch adds an additional CLONE_RANGE ioctl to clone an arbitrary 
(block-aligned) file range to another file.  The original CLONE ioctl 
becomes a special case of cloning the entire file range.  The logic is a 
bit more complex now since ranges may be cloned to different offsets, and 
because we may only be cloning the beginning or end of a particular extent 
or checksum item.

An additional sanity check ensures the source and destination files aren't 
the same (which would previously deadlock), although eventually this could 
be extended to allow the duplication of file data at a different offset 
within the same file.

Any extents within the destination range in the target file are dropped.

We currently do not cope with the case where a compressed inline extent 
needs to be split.  This will probably require decompressing the extent 
into a temporary address_space, and inserting just the cloned portion as a 
new compressed inline extent.  For now, just return -EINVAL in this case.  
Note that this never comes up in the more common case of cloning an entire 
file.
    
Signed-off-by: Chris Mason <chris.mason@oracle.com>
2008-11-12 14:32:25 -05:00
..
COPYING Btrfs: add GPLv2 2007-06-12 09:07:21 -04:00
INSTALL Btrfs: Documentation update 2007-06-22 14:49:31 -04:00
Makefile Btrfs: Add zlib compression support 2008-10-29 14:49:59 -04:00
acl.c Btrfs: optimize btrget/set/removexattr 2008-09-25 11:04:07 -04:00
async-thread.c Btrfs: Add ordered async work queues 2008-11-06 22:03:00 -05:00
async-thread.h Btrfs: Add ordered async work queues 2008-11-06 22:03:00 -05:00
btrfs_inode.h Btrfs: add and improve comments 2008-09-29 15:18:18 -04:00
compat.h Remove Btrfs compat code for older kernels 2008-09-25 15:41:59 -04:00
compression.c Btrfs: Fix compile warnings on 32 bit machines 2008-11-11 09:34:41 -05:00
compression.h Btrfs: Add zlib compression support 2008-10-29 14:49:59 -04:00
crc32c.h Btrfs: add and improve comments 2008-09-29 15:18:18 -04:00
ctree.c Btrfs: Improve metadata read latencies 2008-11-13 09:59:36 -05:00
ctree.h Btrfs: Optimize compressed writeback and reads 2008-11-06 22:02:51 -05:00
dir-item.c Btrfs: add and improve comments 2008-09-29 15:18:18 -04:00
disk-io.c Btrfs: Improve metadata read latencies 2008-11-13 09:59:36 -05:00
disk-io.h Btrfs: Add ordered async work queues 2008-11-06 22:03:00 -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-tree.c Btrfs: Fix handling of space info full during allocations 2008-11-13 09:59:33 -05:00
extent_io.c Btrfs: Fix compile warnings on 32 bit machines 2008-11-11 09:34:41 -05:00
extent_io.h Btrfs: Optimize compressed writeback and reads 2008-11-06 22:02:51 -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
file-item.c Btrfs: Use invalidatepage when writepage finds a page outside of i_size 2008-11-10 11:50:50 -05:00
file.c Btrfs: Fix starting search offset inside btrfs_drop_extents 2008-11-11 09:33:29 -05:00
free-space-cache.c Btrfs: nuke fs wide allocation mutex V2 2008-10-29 14:49:05 -04:00
hash.h Switch btrfs_name_hash() to crc32c 2008-09-25 11:04:06 -04:00
inode-item.c Btrfs: Implement new dir index format 2008-09-25 11:04:05 -04: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: Fix compile warnings on 32 bit machines 2008-11-11 09:34:41 -05:00
ioctl.c Btrfs: allow clone of an arbitrary file range 2008-11-12 14:32:25 -05:00
ioctl.h Btrfs: allow clone of an arbitrary file range 2008-11-12 14:32:25 -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
ordered-data.c Btrfs: Optimize compressed writeback and reads 2008-11-06 22:02:51 -05:00
ordered-data.h Btrfs: Add fallocate support v2 2008-10-30 14:25:28 -04: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: add and improve comments 2008-09-29 15:18:18 -04:00
struct-funcs.c Btrfs: add and improve comments 2008-09-29 15:18:18 -04:00
super.c Btrfs: Optimize compressed writeback and reads 2008-11-06 22:02:51 -05:00
sysfs.c Remove Btrfs compat code for older kernels 2008-09-25 15:41:59 -04:00
transaction.c Btrfs: Avoid unplug storms during commit 2008-11-07 18:22:45 -05:00
transaction.h Btrfs: Record dirty pages tree-log pages in an extent_io tree 2008-09-25 11:04:07 -04:00
tree-defrag.c Btrfs: nuke fs wide allocation mutex V2 2008-10-29 14:49:05 -04:00
tree-log.c Btrfs: Add fallocate support v2 2008-10-30 14:25:28 -04: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: Update version.sh to v0.16 2008-09-25 11:04:06 -04:00
volumes.c Btrfs: Avoid unplug storms during commit 2008-11-07 18:22:45 -05:00
volumes.h Btrfs: Fix the multi-bio code to save the original bio for completion 2008-09-25 11:04:06 -04:00
xattr.c Btrfs: optimize btrget/set/removexattr 2008-09-25 11:04:07 -04:00
xattr.h Btrfs: optimize btrget/set/removexattr 2008-09-25 11:04:07 -04:00
zlib.c Btrfs: Fix compile warnings on 32 bit machines 2008-11-11 09:34:41 -05:00