Btrfs: do not reset last_snapshot after relocation
authorJosef Bacik <jbacik@fb.com>
Thu, 27 Mar 2014 18:56:51 +0000 (14:56 -0400)
committerChris Mason <clm@fb.com>
Mon, 7 Apr 2014 00:34:35 +0000 (17:34 -0700)
commitba8b0289333a70f0d69923fd63350d0b0201b904
treee3e7b84c5a61b7156577c72ca3ea386738bad9c0
parent00fdf13a2e9f313a044288aa59d3b8ec29ff904a
Btrfs: do not reset last_snapshot after relocation

This was done to allow NO_COW to continue to be NO_COW after relocation but it
is not right.  When relocating we will convert blocks to FULL_BACKREF that we
relocate.  We can leave some of these full backref blocks behind if they are not
cow'ed out during the relocation, like if we fail the relocation with ENOSPC and
then just drop the reloc tree.  Then when we go to cow the block again we won't
lookup the extent flags because we won't think there has been a snapshot
recently which means we will do our normal ref drop thing instead of adding back
a tree ref and dropping the shared ref.  This will cause btrfs_free_extent to
blow up because it can't find the ref we are trying to free.  This was found
with my ref verifying tool.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/relocation.c