linux/fs/btrfs
Josef Bacik ebdad913aa Btrfs: check our parent dir when doing a compare send
When doing a send with a parent subvol we will check to see if the file we are
acting on is being overwritten and move it if we think it may be needed further
down the line during the send.  We check this by checking its directory and
making sure it existed in the parent and making sure the file existed in the
parent.  The problem with this check is that if we create a directory and a file
in that directory, and then snapshot, and then remove and re-create that same
directory and file with different inode numbers and then try to snapshot and
send with the original parent we will try and save the original file inside of
that directory.  This is a problem because during the receive we move the
directory out of the way because it is a completely new inode, which makes us
unable to find the old file inside of the directory when we try to move that out
of the way for the overwrite.  We fix this by checking the parent directory of
the inode we think we are overwriting.  If the parent directory generation in
the send root != the parent directory generation in the parent root then we know
it is a completely new directory and we need not bother with moving the file out
of the way because it would have been completely destroyed.  This fixes bz
60673.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
2013-09-01 08:04:48 -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 Btrfs: call the ordered free operation without any locks held 2012-07-25 16:15:07 -04:00
async-thread.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
backref.c Btrfs: add missing error check to find_parent_nodes 2013-09-01 08:04:44 -04:00
backref.h Btrfs: cleanup backref search commit root flag stuff 2013-07-01 08:52:29 -04:00
btrfs_inode.h Btrfs: don't cache the csum value into the extent state tree 2013-09-01 08:04:33 -04:00
check-integrity.c btrfs: Cleanup for using BTRFS_SETGET_STACK instead of raw convert 2013-09-01 07:57:37 -04:00
check-integrity.h Btrfs: add optional integrity check code 2011-12-21 19:14:09 +01:00
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: stop using GFP_ATOMIC for the tree mod log allocations 2013-09-01 07:57:17 -04:00
ctree.h Btrfs: handle errors when doing slow caching 2013-09-01 08:04:47 -04:00
delayed-inode.c btrfs: Cleanup for using BTRFS_SETGET_STACK instead of raw convert 2013-09-01 07:57:37 -04:00
delayed-inode.h [readdir] convert btrfs 2013-06-29 12:57:00 +04:00
delayed-ref.c Btrfs/tracepoint: update delayed ref tracepoints 2013-09-01 07:57:39 -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 Btrfs: add missing error handling to read_tree_block 2013-09-01 08:04:46 -04: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_io.c Btrfs: cleanup arguments to extent_clear_unlock_delalloc 2013-09-01 08:04:38 -04:00
extent_io.h Btrfs: cleanup arguments to extent_clear_unlock_delalloc 2013-09-01 08:04:38 -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
extent-tree.c Btrfs: handle errors when doing slow caching 2013-09-01 08:04:47 -04:00
file-item.c Btrfs: don't cache the csum value into the extent state tree 2013-09-01 08:04:33 -04:00
file.c Btrfs: don't bother autodefragging if our root is going away 2013-09-01 08:04:25 -04: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 btrfs: extended inode refs 2012-10-09 09:14:45 -04:00
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 Btrfs: fix what bits we clear when erroring out from delalloc 2013-09-01 08:04:39 -04:00
ioctl.c btrfs: fix get set label blocking against balance 2013-09-01 08:04:15 -04: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: return -1 when lzo compression makes data bigger 2013-09-01 07:57:19 -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 btrfs: replace many BUG_ONs with proper error handling 2012-03-22 11:52:54 +01:00
print-tree.c Btrfs: Print key type in decimal everywhere 2013-09-01 07:57:40 -04:00
print-tree.h btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
qgroup.c Btrfs: set qgroup_ulist to be null after calling ulist_free() 2013-09-01 07:57:36 -04:00
raid56.c Btrfs, raid56: fix memory leak when allocating pages for p/q stripes failed 2013-09-01 08:04:27 -04:00
raid56.h Btrfs: RAID5 and RAID6 2013-02-01 14:24:23 -05:00
rcu-string.h Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
reada.c Btrfs: fix reada debug code compilation 2013-05-06 15:54:55 -04:00
relocation.c Btrfs: change how we queue blocks for backref checking 2013-09-01 08:04:41 -04:00
root-tree.c btrfs: Cleanup for using BTRFS_SETGET_STACK instead of raw convert 2013-09-01 07:57:37 -04:00
scrub.c btrfs: Cleanup for using BTRFS_SETGET_STACK instead of raw convert 2013-09-01 07:57:37 -04:00
send.c Btrfs: check our parent dir when doing a compare send 2013-09-01 08:04:48 -04:00
send.h btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
struct-funcs.c Btrfs: rewrite BTRFS_SETGET_FUNCS 2012-07-23 16:28:06 -04:00
super.c Btrfs: add missing mounting options in btrfs_show_options() 2013-09-01 08:04:30 -04:00
sysfs.c btrfs: fixup/remove module.h usage as required 2013-03-01 15:01:01 -05:00
transaction.c Btrfs: don't bug_on when we fail when cleaning up transactions 2013-09-01 08:04:42 -04:00
transaction.h Btrfs: check to see if root_list is empty before adding it to dead roots 2013-08-09 19:30:23 -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: release both paths before logging dir/changed extents 2013-08-09 19:30:16 -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 Fix leak in __btrfs_map_block error path 2013-09-01 08:04:45 -04:00
volumes.h Btrfs: don't cache the csum value into the extent state tree 2013-09-01 08:04:33 -04:00
xattr.c btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
xattr.h
zlib.c btrfs: fix message printing 2012-10-09 09:19:57 -04:00