Liu Bo e68afa49ae Btrfs: fix a bug of snapshot-aware defrag to make it work on partial extents
For partial extents, snapshot-aware defrag does not work as expected,
since
a) we use the wrong logical offset to search for parents, which should be
   disk_bytenr + extent_offset, not just disk_bytenr,
b) 'offset' returned by the backref walking just refers to key.offset, not
   the 'offset' stored in btrfs_extent_data_ref which is
   (key.offset - extent_offset).

The reproducer:
$ mkfs.btrfs sda
$ mount sda /mnt
$ btrfs sub create /mnt/sub
$ for i in `seq 5 -1 1`; do dd if=/dev/zero of=/mnt/sub/foo bs=5k count=1 seek=$i conv=notrunc oflag=sync; done
$ btrfs sub snap /mnt/sub /mnt/snap1
$ btrfs sub snap /mnt/sub /mnt/snap2
$ sync; btrfs filesystem defrag /mnt/sub/foo;
$ umount /mnt
$ btrfs-debug-tree sda (Here we can check whether the defrag operation is snapshot-awared.

This addresses the above two problems.

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
2013-08-09 19:29:17 -04:00
..
2013-07-05 18:59:33 +04:00
2013-06-29 12:56:55 +04:00
2013-06-29 12:56:33 +04:00
2013-07-05 18:59:33 +04:00
2013-06-29 12:56:46 +04:00
2013-06-26 11:38:02 -05:00
2013-06-29 12:56:31 +04:00
2013-06-29 12:57:05 +04:00
2013-07-08 13:35:48 +04:00
2013-07-09 10:33:25 -07:00
2013-06-29 12:56:53 +04:00
2013-07-17 14:53:54 +02:00
2013-06-29 12:56:59 +04:00
2013-06-29 12:56:47 +04:00
2013-07-11 10:19:34 -07:00
2013-07-05 18:59:33 +04:00
2013-06-29 12:56:37 +04:00
2013-06-29 12:56:32 +04:00
2013-07-18 13:40:18 +02:00
2013-06-29 12:56:38 +04:00
2013-06-29 12:56:39 +04:00
2013-06-29 12:56:29 +04:00
2013-06-29 12:56:28 +04:00
2013-06-29 12:57:12 +04:00
2013-07-25 10:41:42 -05:00
2013-07-03 16:08:06 -07:00
2013-06-29 12:57:04 +04:00
2013-07-10 18:11:34 -07:00
2013-07-10 18:11:34 -07:00
2013-04-29 15:40:23 -04:00
2013-06-29 12:57:05 +04:00
2013-03-03 23:00:23 -05:00
2013-02-22 23:31:31 -05:00
2013-06-29 12:57:34 +04:00
2013-02-22 23:31:31 -05:00
2013-04-17 13:25:09 +01:00
2013-07-13 13:26:37 +04:00
2013-07-20 03:11:32 +04:00
2013-05-07 20:16:25 -07:00
2013-05-31 15:16:33 -04:00
2013-06-29 12:57:05 +04:00
2013-02-26 02:46:08 -05:00
2013-07-20 04:58:58 +04:00
2013-05-29 12:57:34 -07:00