diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-05-21 16:40:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-05-21 16:40:13 -0400 |
commit | 11da37b26301be772c289c5406aec347ad140bd6 (patch) | |
tree | 383d1f644f8cdfb3653ddbd6ecc033ffb8d1107c /fs | |
parent | 30625569031641eba1cd1f71148cf188500861a2 (diff) | |
parent | 51a60253a58514524b7a347c4e68553821a79d04 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
Pull two btrfs fixes from Chris Mason:
"This has two fixes that we've been testing for 3.16, but since both
are safe and fix real bugs, it makes sense to send for 3.15 instead"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
Btrfs: send, fix incorrect ref access when using extrefs
Btrfs: fix EIO on reading file after ioctl clone works on it
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/ioctl.c | 6 | ||||
-rw-r--r-- | fs/btrfs/send.c | 2 |
2 files changed, 6 insertions, 2 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 2ad7de94efef..2f6d7b13b5bd 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c | |||
@@ -3120,6 +3120,8 @@ process_slot: | |||
3120 | } else if (type == BTRFS_FILE_EXTENT_INLINE) { | 3120 | } else if (type == BTRFS_FILE_EXTENT_INLINE) { |
3121 | u64 skip = 0; | 3121 | u64 skip = 0; |
3122 | u64 trim = 0; | 3122 | u64 trim = 0; |
3123 | u64 aligned_end = 0; | ||
3124 | |||
3123 | if (off > key.offset) { | 3125 | if (off > key.offset) { |
3124 | skip = off - key.offset; | 3126 | skip = off - key.offset; |
3125 | new_key.offset += skip; | 3127 | new_key.offset += skip; |
@@ -3136,9 +3138,11 @@ process_slot: | |||
3136 | size -= skip + trim; | 3138 | size -= skip + trim; |
3137 | datal -= skip + trim; | 3139 | datal -= skip + trim; |
3138 | 3140 | ||
3141 | aligned_end = ALIGN(new_key.offset + datal, | ||
3142 | root->sectorsize); | ||
3139 | ret = btrfs_drop_extents(trans, root, inode, | 3143 | ret = btrfs_drop_extents(trans, root, inode, |
3140 | new_key.offset, | 3144 | new_key.offset, |
3141 | new_key.offset + datal, | 3145 | aligned_end, |
3142 | 1); | 3146 | 1); |
3143 | if (ret) { | 3147 | if (ret) { |
3144 | if (ret != -EOPNOTSUPP) | 3148 | if (ret != -EOPNOTSUPP) |
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index eb6537a08c1b..fd38b5053479 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c | |||
@@ -1668,7 +1668,7 @@ static int get_first_ref(struct btrfs_root *root, u64 ino, | |||
1668 | goto out; | 1668 | goto out; |
1669 | } | 1669 | } |
1670 | 1670 | ||
1671 | if (key.type == BTRFS_INODE_REF_KEY) { | 1671 | if (found_key.type == BTRFS_INODE_REF_KEY) { |
1672 | struct btrfs_inode_ref *iref; | 1672 | struct btrfs_inode_ref *iref; |
1673 | iref = btrfs_item_ptr(path->nodes[0], path->slots[0], | 1673 | iref = btrfs_item_ptr(path->nodes[0], path->slots[0], |
1674 | struct btrfs_inode_ref); | 1674 | struct btrfs_inode_ref); |