diff options
-rw-r--r-- | fs/btrfs/send.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index 2742324514e4..712922ea64d2 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c | |||
@@ -1937,6 +1937,19 @@ static int did_overwrite_ref(struct send_ctx *sctx, | |||
1937 | if (ret <= 0) | 1937 | if (ret <= 0) |
1938 | goto out; | 1938 | goto out; |
1939 | 1939 | ||
1940 | if (dir != BTRFS_FIRST_FREE_OBJECTID) { | ||
1941 | ret = get_inode_info(sctx->send_root, dir, NULL, &gen, NULL, | ||
1942 | NULL, NULL, NULL); | ||
1943 | if (ret < 0 && ret != -ENOENT) | ||
1944 | goto out; | ||
1945 | if (ret) { | ||
1946 | ret = 0; | ||
1947 | goto out; | ||
1948 | } | ||
1949 | if (gen != dir_gen) | ||
1950 | goto out; | ||
1951 | } | ||
1952 | |||
1940 | /* check if the ref was overwritten by another ref */ | 1953 | /* check if the ref was overwritten by another ref */ |
1941 | ret = lookup_dir_item_inode(sctx->send_root, dir, name, name_len, | 1954 | ret = lookup_dir_item_inode(sctx->send_root, dir, name, name_len, |
1942 | &ow_inode, &other_type); | 1955 | &ow_inode, &other_type); |