linux/fs/btrfs
Chris Mason 89642229a5 Btrfs: Search data ordered extents first for checksums on read
Checksum items are not inserted into the tree until all of the io from a
given extent is complete.  This means one dirty page from an extent may
be written, freed, and then read again before the entire extent is on disk
and the checksum item is inserted.

The checksums themselves are stored in the ordered extent so they can
be inserted in bulk when IO is complete.  On read, if a checksum item isn't
found, the ordered extents were being searched for a checksum record.

This all worked most of the time, but the checksum insertion code tries
to reduce the number of tree operations by pre-inserting checksum items
based on i_size and a few other factors.  This means the read code might
find a checksum item that hasn't yet really been filled in.

This commit changes things to check the ordered extents first and only
dive into the btree if nothing was found.  This removes the need for
extra locking and is more reliable.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
2008-09-25 11:04:05 -04: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: Start btree concurrency work. 2008-09-25 11:04:03 -04:00
TODO Btrfs: add GPLv2 2007-06-12 09:07:21 -04:00
acl.c Btrfs: Include sched.h in the acl code for current (fixes compile on 2.6.23) 2008-09-25 11:03:59 -04:00
async-thread.c Btrfs: Worker thread optimizations 2008-09-25 11:04:03 -04:00
async-thread.h Btrfs: Worker thread optimizations 2008-09-25 11:04:03 -04:00
bit-radix.c Btrfs: trivial include fixups 2007-07-11 10:00:37 -04:00
bit-radix.h Btrfs: add GPLv2 2007-06-12 09:07:21 -04:00
btrfs_inode.h Add a per-inode lock around btrfs_drop_extents 2008-09-25 11:04:04 -04:00
compat.h Btrfs: Add workaround for AppArmor changing remove_suid() 2008-09-25 11:04:02 -04:00
crc32c.h Btrfs: Endianess bug fix for v0.13 with kernels 2008-09-25 11:04:01 -04:00
ctree.c btrfs_next_leaf: do readahead when skip_locking is turned on 2008-09-25 11:04:04 -04:00
ctree.h Btrfs: alloc_mutex latency reduction 2008-09-25 11:04:05 -04:00
dir-item.c Btrfs: unaligned access fixes 2008-09-25 11:04:00 -04:00
disk-io.c Btrfs: Search data ordered extents first for checksums on read 2008-09-25 11:04:05 -04:00
disk-io.h Btrfs: Online btree defragmentation fixes 2008-09-25 11:04:04 -04:00
extent-tree.c Btrfs: alloc_mutex latency reduction 2008-09-25 11:04:05 -04:00
extent_io.c Btrfs: Search data ordered extents first for checksums on read 2008-09-25 11:04:05 -04:00
extent_io.h Btrfs: Fix some data=ordered related data corruptions 2008-09-25 11:04:05 -04:00
extent_map.c Btrfs: Fix some data=ordered related data corruptions 2008-09-25 11:04:05 -04:00
extent_map.h Btrfs: Fix some data=ordered related data corruptions 2008-09-25 11:04:05 -04:00
file-item.c Btrfs: Take the csum mutex while reading checksums 2008-09-25 11:04:05 -04:00
file.c Btrfs: Fix some data=ordered related data corruptions 2008-09-25 11:04:05 -04:00
hash.c btrfs-progs: Stop stomping on 'name' input parameter 2008-09-25 11:04:01 -04:00
hash.h Btrfs: unaligned access fixes 2008-09-25 11:04:00 -04:00
inode-item.c Btrfs: Add back pointers from the inode to the directory that references it 2008-09-25 11:03:58 -04:00
inode-map.c Btrfs: Replace the big fs_mutex with a collection of other locks 2008-09-25 11:04:03 -04:00
inode.c Btrfs: Search data ordered extents first for checksums on read 2008-09-25 11:04:05 -04:00
ioctl.c Btrfs: Add locking around volume management (device add/remove/balance) 2008-09-25 11:04:04 -04:00
ioctl.h Btrfs: transaction ioctls 2008-09-25 11:04:03 -04:00
locking.c Btrfs: Use mutex_lock_nested for tree locking 2008-09-25 11:04:05 -04:00
locking.h Btrfs: Start btree concurrency work. 2008-09-25 11:04:03 -04:00
ordered-data.c Btrfs: Search data ordered extents first for checksums on read 2008-09-25 11:04:05 -04:00
ordered-data.h Btrfs: Fix 32 bit compiles by using an unsigned long byte count in the ordered extent 2008-09-25 11:04:05 -04:00
print-tree.c Btrfs: Pass down the expected generation number when reading tree blocks 2008-09-25 11:04:03 -04:00
print-tree.h Btrfs: Create extent_buffer interface for large blocksizes 2008-09-25 11:03:56 -04:00
root-tree.c Btrfs: Fix deadlock while searching for dead roots on mount 2008-09-25 11:04:04 -04:00
struct-funcs.c Btrfs: unaligned access fixes 2008-09-25 11:04:00 -04:00
super.c Btrfs: Online btree defragmentation fixes 2008-09-25 11:04:04 -04:00
sysfs.c Btrfs: Disable sysfs files on older kernels 2008-09-25 11:04:00 -04:00
transaction.c Btrfs: Take the csum mutex while reading checksums 2008-09-25 11:04:05 -04:00
transaction.h btrfs_start_transaction: wait for commits in progress to finish 2008-09-25 11:04:04 -04:00
tree-defrag.c Btrfs: Online btree defragmentation fixes 2008-09-25 11:04:04 -04:00
volumes.c Btrfs: Add locking around volume management (device add/remove/balance) 2008-09-25 11:04:04 -04:00
volumes.h Btrfs: Add async worker threads for pre and post IO checksumming 2008-09-25 11:04:03 -04:00
xattr.c Btrfs: Replace the big fs_mutex with a collection of other locks 2008-09-25 11:04:03 -04:00
xattr.h xattr support for btrfs 2008-09-25 11:03:57 -04:00