alistair23-linux/fs/btrfs
Josef Bacik 4b46fce233 Btrfs: add basic DIO read/write support
This provides basic DIO support for reading and writing.  It does not do the
work to recover from mismatching checksums, that will come later.  A few design
changes have been made from Jim's code (sorry Jim!)

1) Use the generic direct-io code.  Jim originally re-wrote all the generic DIO
code in order to account for all of BTRFS's oddities, but thanks to that work it
seems like the best bet is to just ignore compression and such and just opt to
fallback on buffered IO.

2) Fallback on buffered IO for compressed or inline extents.  Jim's code did
it's own buffering to make dio with compressed extents work.  Now we just
fallback onto normal buffered IO.

3) Use ordered extents for the writes so that all of the

lock_extent()
lookup_ordered()

type checks continue to work.

4) Do the lock_extent() lookup_ordered() loop in readpage so we don't race with
DIO writes.

I've tested this with fsx and everything works great.  This patch depends on my
dio and filemap.c patches to work.  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
2010-05-25 10:34:57 -04:00
..
acl.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
async-thread.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
async-thread.h Btrfs: fix deadlock on async thread startup 2009-10-05 09:44:45 -04:00
btrfs_inode.h Btrfs: Metadata reservation for orphan inodes 2010-05-25 10:34:52 -04:00
compat.h
compression.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable 2010-04-05 13:21:15 -07:00
compression.h
ctree.c Btrfs: Metadata ENOSPC handling for balance 2010-05-25 10:34:54 -04:00
ctree.h Btrfs: add basic DIO read/write support 2010-05-25 10:34:57 -04:00
delayed-ref.c Btrfs: Integrate metadata reservation with start_transaction 2010-05-25 10:34:50 -04:00
delayed-ref.h Btrfs: Integrate metadata reservation with start_transaction 2010-05-25 10:34:50 -04:00
dir-item.c Btrfs: Pass transaction handle to security and ACL initialization functions 2009-12-17 12:33:34 -05:00
disk-io.c Btrfs: Metadata ENOSPC handling for tree log 2010-05-25 10:34:53 -04:00
disk-io.h Btrfs: Metadata ENOSPC handling for tree log 2010-05-25 10:34:53 -04:00
export.c Btrfs: change how we mount subvolumes 2010-03-15 10:58:13 -04:00
export.h
extent-tree.c Btrfs: Metadata ENOSPC handling for balance 2010-05-25 10:34:54 -04:00
extent_io.c Btrfs: Update metadata reservation for delayed allocation 2010-05-25 10:34:51 -04:00
extent_io.h Btrfs: Update metadata reservation for delayed allocation 2010-05-25 10:34:51 -04:00
extent_map.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
extent_map.h
file-item.c Btrfs: add basic DIO read/write support 2010-05-25 10:34:57 -04:00
file.c Btrfs: add basic DIO read/write support 2010-05-25 10:34:57 -04:00
free-space-cache.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
free-space-cache.h
hash.h
inode-item.c Btrfs: Integrate metadata reservation with start_transaction 2010-05-25 10:34:50 -04:00
inode-map.c
inode.c Btrfs: add basic DIO read/write support 2010-05-25 10:34:57 -04:00
ioctl.c Btrfs: Metadata reservation for orphan inodes 2010-05-25 10:34:52 -04:00
ioctl.h Btrfs: use __u64 types in ioctl.h 2010-03-16 14:24:27 -04:00
Kconfig Revert "task_struct: make journal_info conditional" 2009-12-17 13:23:24 -08:00
locking.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
locking.h
Makefile
ordered-data.c Btrfs: add basic DIO read/write support 2010-05-25 10:34:57 -04:00
ordered-data.h Btrfs: add basic DIO read/write support 2010-05-25 10:34:57 -04:00
orphan.c
print-tree.c
print-tree.h
ref-cache.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
ref-cache.h Btrfs: use RB_ROOT to intialize rb_trees instead of setting rb_node to NULL 2010-03-08 16:26:50 -05:00
relocation.c Btrfs: Metadata ENOSPC handling for balance 2010-05-25 10:34:54 -04:00
root-tree.c Btrfs: Metadata reservation for orphan inodes 2010-05-25 10:34:52 -04:00
struct-funcs.c
super.c Btrfs: Metadata reservation for orphan inodes 2010-05-25 10:34:52 -04:00
sysfs.c Driver core: Constify struct sysfs_ops in struct kobj_type 2010-03-07 17:04:49 -08:00
transaction.c Btrfs: Metadata ENOSPC handling for balance 2010-05-25 10:34:54 -04:00
transaction.h Btrfs: Introduce global metadata reservation 2010-05-25 10:34:52 -04:00
tree-defrag.c Btrfs: Introduce global metadata reservation 2010-05-25 10:34:52 -04:00
tree-log.c Btrfs: Metadata ENOSPC handling for tree log 2010-05-25 10:34:53 -04:00
tree-log.h Btrfs: Metadata ENOSPC handling for tree log 2010-05-25 10:34:53 -04:00
version.h
version.sh
volumes.c Btrfs: Integrate metadata reservation with start_transaction 2010-05-25 10:34:50 -04:00
volumes.h
xattr.c Btrfs: Integrate metadata reservation with start_transaction 2010-05-25 10:34:50 -04:00
xattr.h Btrfs: Pass transaction handle to security and ACL initialization functions 2009-12-17 12:33:34 -05:00
zlib.c