Stefan Behrens
115930cb2d
Btrfs: fix wrong write offset when replacing a device
...
Miao Xie reported the following issue:
The filesystem was corrupted after we did a device replace.
Steps to reproduce:
# mkfs.btrfs -f -m single -d raid10 <device0>..<device3>
# mount <device0> <mnt>
# btrfs replace start -rfB 1 <device4> <mnt>
# umount <mnt>
# btrfsck <device4>
The reason for the issue is that we changed the write offset by mistake,
introduced by commit 625f1c8dc .
We read the data from the source device at first, and then write the
data into the corresponding place of the new device. In order to
implement the "-r" option, the source location is remapped using
btrfs_map_block(). The read takes place on the mapped location, and
the write needs to take place on the unmapped location. Currently
the write is using the mapped location, and this commit changes it
back by undoing the change to the write address that the aforementioned
commit added by mistake.
Reported-by: Miao Xie <miaox@cn.fujitsu.com>
Cc: <stable@vger.kernel.org> # 3.10+
Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
2013-07-19 15:07:26 -04:00
..
acl.c
Btrfs: skip adding an acl attribute if we don't have to
2012-12-16 20:46:15 -05:00
async-thread.c
async-thread.h
backref.c
Btrfs: make backref walking code handle skinny metadata
2013-07-02 11:51:02 -04:00
backref.h
Btrfs: cleanup backref search commit root flag stuff
2013-07-01 08:52:29 -04:00
btrfs_inode.h
btrfs: fix minor typo in comment
2013-05-06 15:54:49 -04:00
check-integrity.c
Btrfs: use a btrfs bioset instead of abusing bio internals
2013-05-17 21:52:52 -04:00
check-integrity.h
compat.h
compression.c
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
compression.h
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
ctree.c
Btrfs: only do the tree_mod_log_free_eb if this is our last ref
2013-07-02 11:51:20 -04:00
ctree.h
Btrfs: check if we can nocow if we don't have data space
2013-07-02 11:50:45 -04:00
delayed-inode.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2013-07-09 12:33:09 -07:00
delayed-inode.h
[readdir] convert btrfs
2013-06-29 12:57:00 +04:00
delayed-ref.c
Btrfs: separate sequence numbers for delayed ref tracking and tree mod log
2013-05-06 15:55:17 -04:00
delayed-ref.h
Btrfs: handle running extent ops with skinny metadata
2013-05-17 21:40:15 -04:00
dev-replace.c
Btrfs: introduce per-subvolume ordered extent list
2013-06-14 11:29:41 -04:00
dev-replace.h
Btrfs: add new sources for device replace code
2012-12-12 17:15:41 -05:00
dir-item.c
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
disk-io.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2013-07-09 12:33:09 -07:00
disk-io.h
Btrfs: introduce grab/put functions for the root of the fs/file tree
2013-06-14 11:29:38 -04:00
export.c
Btrfs: cleanup: don't check the same thing twice
2013-06-14 11:29:30 -04:00
export.h
extent-tree.c
Btrfs: re-add root to dead root list if we stop dropping it
2013-07-19 15:07:19 -04:00
extent_io.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2013-07-09 12:33:09 -07:00
extent_io.h
Btrfs: check if we can nocow if we don't have data space
2013-07-02 11:50:45 -04:00
extent_map.c
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
extent_map.h
Btrfs: fix bad extent logging
2013-05-06 15:54:34 -04:00
file-item.c
Btrfs: remove btrfs_sector_sum structure
2013-07-02 11:50:47 -04:00
file.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2013-07-09 12:33:09 -07:00
free-space-cache.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2013-07-09 12:33:09 -07:00
free-space-cache.h
btrfs: move ifdef around sanity checks out of init_btrfs_fs
2013-06-14 11:29:18 -04:00
hash.h
inode-item.c
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
inode-map.c
Btrfs: don't use global block reservation for inode cache truncation
2013-05-17 21:40:22 -04:00
inode-map.h
inode.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2013-07-09 12:33:09 -07:00
ioctl.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2013-07-09 12:33:09 -07:00
Kconfig
btrfs: move leak debug code to functions
2013-05-06 15:55:16 -04:00
locking.c
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
locking.h
Btrfs: remove btrfs_try_spin_lock
2013-03-14 14:57:10 -04:00
lzo.c
btrfs: fix the code comments for LZO compression workspace
2013-07-01 08:52:26 -04:00
Makefile
Btrfs: RAID5 and RAID6
2013-02-01 14:24:23 -05:00
math.h
Btrfs: cleanup duplicated division functions
2012-12-11 13:31:30 -05:00
ordered-data.c
Btrfs: remove btrfs_sector_sum structure
2013-07-02 11:50:47 -04:00
ordered-data.h
Btrfs: remove btrfs_sector_sum structure
2013-07-02 11:50:47 -04:00
orphan.c
print-tree.c
Btrfs: Include the device in most error printk()s
2013-05-06 15:54:23 -04:00
print-tree.h
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
qgroup.c
Btrfs: fix qgroup rescan resume on mount
2013-06-14 11:30:10 -04:00
raid56.c
Btrfs: use a btrfs bioset instead of abusing bio internals
2013-05-17 21:52:52 -04:00
raid56.h
Btrfs: RAID5 and RAID6
2013-02-01 14:24:23 -05:00
rcu-string.h
reada.c
Btrfs: fix reada debug code compilation
2013-05-06 15:54:55 -04:00
relocation.c
Btrfs: remove btrfs_sector_sum structure
2013-07-02 11:50:47 -04:00
root-tree.c
Btrfs: cleanup orphaned root orphan item
2013-07-02 11:50:52 -04:00
scrub.c
Btrfs: fix wrong write offset when replacing a device
2013-07-19 15:07:26 -04:00
send.c
Btrfs: Cocci spatch "memdup.spatch"
2013-06-14 11:30:12 -04:00
send.h
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
struct-funcs.c
super.c
Btrfs: stop waiting on current trans if we aborted
2013-07-01 08:52:27 -04:00
sysfs.c
btrfs: fixup/remove module.h usage as required
2013-03-01 15:01:01 -05:00
transaction.c
Btrfs: make the chunk allocator completely tree lockless
2013-07-02 11:50:53 -04:00
transaction.h
Btrfs: make the chunk allocator completely tree lockless
2013-07-02 11:50:53 -04:00
tree-defrag.c
btrfs: remove cache only arguments from defrag path
2013-02-20 12:59:36 -05:00
tree-log.c
Btrfs: exclude logged extents before replying when we are mixed
2013-06-14 11:30:17 -04:00
tree-log.h
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
ulist.c
Btrfs: fix crash regarding to ulist_add_merge
2013-07-02 11:50:59 -04:00
ulist.h
Btrfs: add a rb_tree to improve performance of ulist search
2013-05-06 15:54:44 -04:00
volumes.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
2013-07-09 12:33:09 -07:00
volumes.h
Btrfs: make the chunk allocator completely tree lockless
2013-07-02 11:50:53 -04:00
xattr.c
btrfs: make static code static & remove dead code
2013-05-06 15:55:23 -04:00
xattr.h
zlib.c