summaryrefslogtreecommitdiff
path: root/fs/btrfs/super.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2007-05-11 15:33:21 (GMT)
committerDavid Woodhouse <dwmw2@hera.kernel.org>2007-05-11 15:33:21 (GMT)
commit098f59c2512426926722a96f82af127bd91fb5e4 (patch)
treed4f281ac0c6d61a8ee443b9fe8b49434e82618a2 /fs/btrfs/super.c
parent509659cde578d891445afd67d87121dd13e71596 (diff)
downloadlinux-098f59c2512426926722a96f82af127bd91fb5e4.tar.xz
Btrfs: patch queue: fix corruption when splitting large items
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/super.c')
-rw-r--r--fs/btrfs/super.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 4c2870e..eaa48f0 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -1529,7 +1529,8 @@ static int dirty_and_release_pages(struct btrfs_trans_handle *trans,
btrfs_set_file_extent_type(ei,
BTRFS_FILE_EXTENT_INLINE);
ptr = btrfs_file_extent_inline_start(ei);
- memcpy(ptr, bh->b_data, offset + write_bytes);
+ btrfs_memcpy(root, path->nodes[0]->b_data,
+ ptr, bh->b_data, offset + write_bytes);
mark_buffer_dirty(path->nodes[0]);
btrfs_free_path(path);
} else {
@@ -1686,9 +1687,9 @@ static int drop_extents(struct btrfs_trans_handle *trans,
ret = btrfs_del_item(trans, root, path);
BUG_ON(ret);
btrfs_release_path(root, path);
+ extent = NULL;
if (found_extent) {
- inode->i_blocks -=
- btrfs_file_extent_num_blocks(extent) << 3;
+ inode->i_blocks -= extent_num_blocks << 3;
ret = btrfs_free_extent(trans, root,
disk_blocknr,
disk_num_blocks, 0);
@@ -1832,7 +1833,6 @@ static ssize_t btrfs_file_write(struct file *file, const char __user *buf,
u64 alloc_extent_start;
struct btrfs_trans_handle *trans;
struct btrfs_key ins;
-
pinned[0] = NULL;
pinned[1] = NULL;
if (file->f_flags & O_DIRECT)