From: Roman Anasal <roman.anasal@bdsu.de>
To: linux-btrfs@vger.kernel.org
Cc: Roman Anasal <roman.anasal@bdsu.de>
Subject: [PATCH 1/2] btrfs: send: rename send_ctx.cur_inode_new_gen to cur_inode_recreated
Date: Mon, 11 Jan 2021 20:02:42 +0100 [thread overview]
Message-ID: <20210111190243.4152-2-roman.anasal@bdsu.de> (raw)
In-Reply-To: <20210111190243.4152-1-roman.anasal@bdsu.de>
cur_inode_new_gen is used to detect whether an inode was/has to be
recreated which is - currently (!) - only based on whether a changed
inode as differing generations.
To allow additional checks for recreating an inode (see following patch)
and still have a sane naming this change was made.
Signed-off-by: Roman Anasal <roman.anasal@bdsu.de>
---
fs/btrfs/send.c | 31 ++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index ae97f4dba..420371c1d 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -102,7 +102,7 @@ struct send_ctx {
u64 cur_ino;
u64 cur_inode_gen;
int cur_inode_new;
- int cur_inode_new_gen;
+ int cur_inode_recreated;
int cur_inode_deleted;
u64 cur_inode_size;
u64 cur_inode_mode;
@@ -322,7 +322,7 @@ static int is_waiting_for_rm(struct send_ctx *sctx, u64 dir_ino, u64 gen);
static int need_send_hole(struct send_ctx *sctx)
{
return (sctx->parent_root && !sctx->cur_inode_new &&
- !sctx->cur_inode_new_gen && !sctx->cur_inode_deleted &&
+ !sctx->cur_inode_recreated && !sctx->cur_inode_deleted &&
S_ISREG(sctx->cur_inode_mode));
}
@@ -6265,7 +6265,7 @@ static int changed_inode(struct send_ctx *sctx,
u64 right_gen = 0;
sctx->cur_ino = key->objectid;
- sctx->cur_inode_new_gen = 0;
+ sctx->cur_inode_recreated = 0;
sctx->cur_inode_last_extent = (u64)-1;
sctx->cur_inode_next_write_offset = 0;
sctx->ignore_cur_inode = false;
@@ -6306,7 +6306,7 @@ static int changed_inode(struct send_ctx *sctx,
*/
if (left_gen != right_gen &&
sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID)
- sctx->cur_inode_new_gen = 1;
+ sctx->cur_inode_recreated = 1;
}
/*
@@ -6364,7 +6364,7 @@ static int changed_inode(struct send_ctx *sctx,
* reused the same inum. So we have to treat the old inode as
* deleted and the new one as new.
*/
- if (sctx->cur_inode_new_gen) {
+ if (sctx->cur_inode_recreated) {
/*
* First, process the inode as if it was deleted.
*/
@@ -6401,7 +6401,8 @@ static int changed_inode(struct send_ctx *sctx,
goto out;
/*
* Advance send_progress now as we did not get into
- * process_recorded_refs_if_needed in the new_gen case.
+ * process_recorded_refs_if_needed in the
+ * cur_inode_recreated case.
*/
sctx->send_progress = sctx->cur_ino + 1;
@@ -6418,7 +6419,7 @@ static int changed_inode(struct send_ctx *sctx,
} else {
sctx->cur_inode_gen = left_gen;
sctx->cur_inode_new = 0;
- sctx->cur_inode_new_gen = 0;
+ sctx->cur_inode_recreated = 0;
sctx->cur_inode_deleted = 0;
sctx->cur_inode_size = btrfs_inode_size(
sctx->left_path->nodes[0], left_ii);
@@ -6435,7 +6436,7 @@ static int changed_inode(struct send_ctx *sctx,
* We have to process new refs before deleted refs, but compare_trees gives us
* the new and deleted refs mixed. To fix this, we record the new/deleted refs
* first and later process them in process_recorded_refs.
- * For the cur_inode_new_gen case, we skip recording completely because
+ * For the cur_inode_recreated case, we skip recording completely because
* changed_inode did already initiate processing of refs. The reason for this is
* that in this case, compare_tree actually compares the refs of 2 different
* inodes. To fix this, process_all_refs is used in changed_inode to handle all
@@ -6451,7 +6452,7 @@ static int changed_ref(struct send_ctx *sctx,
return -EIO;
}
- if (!sctx->cur_inode_new_gen &&
+ if (!sctx->cur_inode_recreated &&
sctx->cur_ino != BTRFS_FIRST_FREE_OBJECTID) {
if (result == BTRFS_COMPARE_TREE_NEW)
ret = record_new_ref(sctx);
@@ -6466,8 +6467,8 @@ static int changed_ref(struct send_ctx *sctx,
/*
* Process new/deleted/changed xattrs. We skip processing in the
- * cur_inode_new_gen case because changed_inode did already initiate processing
- * of xattrs. The reason is the same as in changed_ref
+ * cur_inode_recreated case because changed_inode did already initiate
+ * processing of xattrs. The reason is the same as in changed_ref
*/
static int changed_xattr(struct send_ctx *sctx,
enum btrfs_compare_tree_result result)
@@ -6479,7 +6480,7 @@ static int changed_xattr(struct send_ctx *sctx,
return -EIO;
}
- if (!sctx->cur_inode_new_gen && !sctx->cur_inode_deleted) {
+ if (!sctx->cur_inode_recreated && !sctx->cur_inode_deleted) {
if (result == BTRFS_COMPARE_TREE_NEW)
ret = process_new_xattr(sctx);
else if (result == BTRFS_COMPARE_TREE_DELETED)
@@ -6493,8 +6494,8 @@ static int changed_xattr(struct send_ctx *sctx,
/*
* Process new/deleted/changed extents. We skip processing in the
- * cur_inode_new_gen case because changed_inode did already initiate processing
- * of extents. The reason is the same as in changed_ref
+ * cur_inode_recreated case because changed_inode did already initiate
+ * processing of extents. The reason is the same as in changed_ref
*/
static int changed_extent(struct send_ctx *sctx,
enum btrfs_compare_tree_result result)
@@ -6517,7 +6518,7 @@ static int changed_extent(struct send_ctx *sctx,
if (sctx->cur_ino != sctx->cmp_key->objectid)
return 0;
- if (!sctx->cur_inode_new_gen && !sctx->cur_inode_deleted) {
+ if (!sctx->cur_inode_recreated && !sctx->cur_inode_deleted) {
if (result != BTRFS_COMPARE_TREE_DELETED)
ret = process_extent(sctx, sctx->left_path,
sctx->cmp_key);
--
2.26.2
next prev parent reply other threads:[~2021-01-11 19:04 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-11 19:02 [PATCH 0/2] btrfs: send: correctly recreate changed inodes Roman Anasal
2021-01-11 19:02 ` Roman Anasal [this message]
2021-01-11 19:02 ` [PATCH 2/2] btrfs: send: fix invalid commands for inodes with changed type but same gen Roman Anasal
2021-01-11 19:30 ` Andrei Borzenkov
2021-01-11 20:53 ` Roman Anasal | BDSU
2021-01-12 11:27 ` Filipe Manana
2021-01-12 12:07 ` Graham Cobb
2021-01-12 12:30 ` Filipe Manana
2021-01-12 13:10 ` Roman Anasal | BDSU
2021-01-12 13:54 ` Filipe Manana
2021-01-12 14:37 ` Roman Anasal | BDSU
2021-01-12 15:08 ` Filipe Manana
2021-01-11 21:15 ` David Sterba
2021-01-11 21:31 ` Roman Anasal | BDSU
2021-01-11 21:19 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210111190243.4152-2-roman.anasal@bdsu.de \
--to=roman.anasal@bdsu.de \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox