summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
authorChris Mason2007-05-18 19:28:27 +0200
committerDavid Woodhouse2007-05-18 19:28:27 +0200
commitde428b63b16f9c74a24228a517713e8c65f79475 (patch)
tree0bb56423173f59e6237cf0cbc8052f72fb997347 /fs/btrfs/disk-io.c
parentBtrfs: patch queue: fix corruption when splitting large items (diff)
downloadkernel-qcow2-linux-de428b63b16f9c74a24228a517713e8c65f79475.tar.gz
kernel-qcow2-linux-de428b63b16f9c74a24228a517713e8c65f79475.tar.xz
kernel-qcow2-linux-de428b63b16f9c74a24228a517713e8c65f79475.zip
Btrfs: allocator optimizations, truncate readahead
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r--fs/btrfs/disk-io.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 678456d1e2f9..4c0262b57664 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -257,24 +257,30 @@ static struct address_space_operations btree_aops = {
int readahead_tree_block(struct btrfs_root *root, u64 blocknr)
{
struct buffer_head *bh = NULL;
+ int ret = 0;
bh = btrfs_find_create_tree_block(root, blocknr);
if (!bh)
return 0;
- if (buffer_uptodate(bh))
+ if (buffer_uptodate(bh)) {
+ ret = 1;
goto done;
- if (test_set_buffer_locked(bh))
+ }
+ if (test_set_buffer_locked(bh)) {
+ ret = 1;
goto done;
+ }
if (!buffer_uptodate(bh)) {
get_bh(bh);
bh->b_end_io = end_buffer_read_sync;
submit_bh(READ, bh);
} else {
unlock_buffer(bh);
+ ret = 1;
}
done:
brelse(bh);
- return 0;
+ return ret;
}
struct buffer_head *read_tree_block(struct btrfs_root *root, u64 blocknr)