public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees
@ 2025-03-13 17:55 fdmanana
  2025-03-13 17:55 ` [PATCH 1/7] btrfs: avoid unnecessary memory allocation and copy at overwrite_item() fdmanana
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: fdmanana @ 2025-03-13 17:55 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

A series of cleanups, simplifications and a minor optimization related to
log replay and inode logging. Details in the change logs.

Filipe Manana (7):
  btrfs: avoid unnecessary memory allocation and copy at overwrite_item()
  btrfs: use variables to store extent buffer and slot at overwrite_item()
  btrfs: update outdated comment for overwrite_item()
  btrfs: use memcmp_extent_buffer() at replay_one_extent()
  btrfs: remove redundant else statement from btrfs_log_inode_parent()
  btrfs: simplify condition for logging new dentries at btrfs_log_inode_parent()
  btrfs: remove end_no_trans label from btrfs_log_inode_parent()

 fs/btrfs/tree-log.c | 125 +++++++++++++++++++-------------------------
 1 file changed, 53 insertions(+), 72 deletions(-)

-- 
2.45.2


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/7] btrfs: avoid unnecessary memory allocation and copy at overwrite_item()
  2025-03-13 17:55 [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees fdmanana
@ 2025-03-13 17:55 ` fdmanana
  2025-03-13 17:55 ` [PATCH 2/7] btrfs: use variables to store extent buffer and slot " fdmanana
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: fdmanana @ 2025-03-13 17:55 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

There's no need to allocate memory and copy from both the destination and
source extent buffers to compare if the items are equal, we can instead
use memcmp_extent_buffer() which allows to do only one memory allocation
and copy instead of two.

So use memcmp_extent_buffer() instead of memcmp(), allowing us to avoid
one memory allocation, which can fail or be slow while under memory heavy
pressure, avoid the memory copying and reducing code.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/tree-log.c | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 2d23223f476b..91278cc83bd4 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -422,7 +422,6 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 
 	if (ret == 0) {
 		char *src_copy;
-		char *dst_copy;
 		u32 dst_size = btrfs_item_size(path->nodes[0],
 						  path->slots[0]);
 		if (dst_size != item_size)
@@ -432,23 +431,16 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 			btrfs_release_path(path);
 			return 0;
 		}
-		dst_copy = kmalloc(item_size, GFP_NOFS);
 		src_copy = kmalloc(item_size, GFP_NOFS);
-		if (!dst_copy || !src_copy) {
+		if (!src_copy) {
 			btrfs_release_path(path);
-			kfree(dst_copy);
-			kfree(src_copy);
 			return -ENOMEM;
 		}
 
 		read_extent_buffer(eb, src_copy, src_ptr, item_size);
-
 		dst_ptr = btrfs_item_ptr_offset(path->nodes[0], path->slots[0]);
-		read_extent_buffer(path->nodes[0], dst_copy, dst_ptr,
-				   item_size);
-		ret = memcmp(dst_copy, src_copy, item_size);
+		ret = memcmp_extent_buffer(path->nodes[0], src_copy, dst_ptr, item_size);
 
-		kfree(dst_copy);
 		kfree(src_copy);
 		/*
 		 * they have the same contents, just return, this saves
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/7] btrfs: use variables to store extent buffer and slot at overwrite_item()
  2025-03-13 17:55 [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees fdmanana
  2025-03-13 17:55 ` [PATCH 1/7] btrfs: avoid unnecessary memory allocation and copy at overwrite_item() fdmanana
@ 2025-03-13 17:55 ` fdmanana
  2025-03-13 17:55 ` [PATCH 3/7] btrfs: update outdated comment for overwrite_item() fdmanana
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: fdmanana @ 2025-03-13 17:55 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

Instead of referring to path->nodes[0] and path->slots[0] multiple times,
which is verbose and confusing since we have an 'eb' and 'slot' variables
as well, introduce local variables 'dst_eb' to point to path->nodes[0] and
'dst_slot' to have path->slots[0], reducing verbosity and making it more
obvious about which extent buffer and slot we are referring to.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/tree-log.c | 47 ++++++++++++++++++++++++---------------------
 1 file changed, 25 insertions(+), 22 deletions(-)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 91278cc83bd4..f23feddb41c5 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -401,6 +401,8 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 	int save_old_i_size = 0;
 	unsigned long src_ptr;
 	unsigned long dst_ptr;
+	struct extent_buffer *dst_eb;
+	int dst_slot;
 	bool inode_item = key->type == BTRFS_INODE_ITEM_KEY;
 
 	/*
@@ -420,10 +422,13 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 	if (ret < 0)
 		return ret;
 
+	dst_eb = path->nodes[0];
+	dst_slot = path->slots[0];
+
 	if (ret == 0) {
 		char *src_copy;
-		u32 dst_size = btrfs_item_size(path->nodes[0],
-						  path->slots[0]);
+		const u32 dst_size = btrfs_item_size(dst_eb, dst_slot);
+
 		if (dst_size != item_size)
 			goto insert;
 
@@ -438,8 +443,8 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 		}
 
 		read_extent_buffer(eb, src_copy, src_ptr, item_size);
-		dst_ptr = btrfs_item_ptr_offset(path->nodes[0], path->slots[0]);
-		ret = memcmp_extent_buffer(path->nodes[0], src_copy, dst_ptr, item_size);
+		dst_ptr = btrfs_item_ptr_offset(dst_eb, dst_slot);
+		ret = memcmp_extent_buffer(dst_eb, src_copy, dst_ptr, item_size);
 
 		kfree(src_copy);
 		/*
@@ -462,9 +467,9 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 			u64 nbytes;
 			u32 mode;
 
-			item = btrfs_item_ptr(path->nodes[0], path->slots[0],
+			item = btrfs_item_ptr(dst_eb, dst_slot,
 					      struct btrfs_inode_item);
-			nbytes = btrfs_inode_nbytes(path->nodes[0], item);
+			nbytes = btrfs_inode_nbytes(dst_eb, item);
 			item = btrfs_item_ptr(eb, slot,
 					      struct btrfs_inode_item);
 			btrfs_set_inode_nbytes(eb, item, nbytes);
@@ -506,11 +511,13 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 				      key, item_size);
 	path->skip_release_on_error = 0;
 
+	dst_eb = path->nodes[0];
+	dst_slot = path->slots[0];
+
 	/* make sure any existing item is the correct size */
 	if (ret == -EEXIST || ret == -EOVERFLOW) {
-		u32 found_size;
-		found_size = btrfs_item_size(path->nodes[0],
-						path->slots[0]);
+		const u32 found_size = btrfs_item_size(dst_eb, dst_slot);
+
 		if (found_size > item_size)
 			btrfs_truncate_item(trans, path, item_size, 1);
 		else if (found_size < item_size)
@@ -518,8 +525,7 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 	} else if (ret) {
 		return ret;
 	}
-	dst_ptr = btrfs_item_ptr_offset(path->nodes[0],
-					path->slots[0]);
+	dst_ptr = btrfs_item_ptr_offset(dst_eb, dst_slot);
 
 	/* don't overwrite an existing inode if the generation number
 	 * was logged as zero.  This is done when the tree logging code
@@ -538,7 +544,6 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 		dst_item = (struct btrfs_inode_item *)dst_ptr;
 
 		if (btrfs_inode_generation(eb, src_item) == 0) {
-			struct extent_buffer *dst_eb = path->nodes[0];
 			const u64 ino_size = btrfs_inode_size(eb, src_item);
 
 			/*
@@ -556,30 +561,28 @@ static int overwrite_item(struct btrfs_trans_handle *trans,
 		}
 
 		if (S_ISDIR(btrfs_inode_mode(eb, src_item)) &&
-		    S_ISDIR(btrfs_inode_mode(path->nodes[0], dst_item))) {
+		    S_ISDIR(btrfs_inode_mode(dst_eb, dst_item))) {
 			save_old_i_size = 1;
-			saved_i_size = btrfs_inode_size(path->nodes[0],
-							dst_item);
+			saved_i_size = btrfs_inode_size(dst_eb, dst_item);
 		}
 	}
 
-	copy_extent_buffer(path->nodes[0], eb, dst_ptr,
-			   src_ptr, item_size);
+	copy_extent_buffer(dst_eb, eb, dst_ptr, src_ptr, item_size);
 
 	if (save_old_i_size) {
 		struct btrfs_inode_item *dst_item;
+
 		dst_item = (struct btrfs_inode_item *)dst_ptr;
-		btrfs_set_inode_size(path->nodes[0], dst_item, saved_i_size);
+		btrfs_set_inode_size(dst_eb, dst_item, saved_i_size);
 	}
 
 	/* make sure the generation is filled in */
 	if (key->type == BTRFS_INODE_ITEM_KEY) {
 		struct btrfs_inode_item *dst_item;
+
 		dst_item = (struct btrfs_inode_item *)dst_ptr;
-		if (btrfs_inode_generation(path->nodes[0], dst_item) == 0) {
-			btrfs_set_inode_generation(path->nodes[0], dst_item,
-						   trans->transid);
-		}
+		if (btrfs_inode_generation(dst_eb, dst_item) == 0)
+			btrfs_set_inode_generation(dst_eb, dst_item, trans->transid);
 	}
 no_copy:
 	btrfs_release_path(path);
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/7] btrfs: update outdated comment for overwrite_item()
  2025-03-13 17:55 [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees fdmanana
  2025-03-13 17:55 ` [PATCH 1/7] btrfs: avoid unnecessary memory allocation and copy at overwrite_item() fdmanana
  2025-03-13 17:55 ` [PATCH 2/7] btrfs: use variables to store extent buffer and slot " fdmanana
@ 2025-03-13 17:55 ` fdmanana
  2025-03-13 17:55 ` [PATCH 4/7] btrfs: use memcmp_extent_buffer() at replay_one_extent() fdmanana
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: fdmanana @ 2025-03-13 17:55 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

The function is exclusively used for log replay since commit
3eb423442483 ("btrfs: remove outdated logic from overwrite_item() and add
assertion"), so update the comment so that it doesn't say it can be used
for logging. Also some minor rewording for clarity and while at it
reformat the affected text so that it fits closer to the 80 characters
limit for comments.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/tree-log.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index f23feddb41c5..889b388c3708 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -376,12 +376,12 @@ static int process_one_buffer(struct btrfs_root *log,
 }
 
 /*
- * Item overwrite used by replay and tree logging.  eb, slot and key all refer
- * to the src data we are copying out.
+ * Item overwrite used by log replay. The given eb, slot and key all refer to
+ * the source data we are copying out.
  *
- * root is the tree we are copying into, and path is a scratch
- * path for use in this function (it should be released on entry and
- * will be released on exit).
+ * The given root is for the tree we are copying into, and path is a scratch
+ * path for use in this function (it should be released on entry and will be
+ * released on exit).
  *
  * If the key is already in the destination tree the existing item is
  * overwritten.  If the existing item isn't big enough, it is extended.
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/7] btrfs: use memcmp_extent_buffer() at replay_one_extent()
  2025-03-13 17:55 [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees fdmanana
                   ` (2 preceding siblings ...)
  2025-03-13 17:55 ` [PATCH 3/7] btrfs: update outdated comment for overwrite_item() fdmanana
@ 2025-03-13 17:55 ` fdmanana
  2025-03-13 17:55 ` [PATCH 5/7] btrfs: remove redundant else statement from btrfs_log_inode_parent() fdmanana
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: fdmanana @ 2025-03-13 17:55 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

Instead of using memcmp(), which requires copying both file extent items
from each extent buffer into a local buffer, use memcmp_extent_buffer() so
that we only need to copy one of the file extent items and directly use
the extent buffer of the other file extent item for the comparison.

This reduces code size, saves one memory copy and reduces stack usage.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/tree-log.c | 19 ++++++-------------
 1 file changed, 6 insertions(+), 13 deletions(-)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 889b388c3708..7e0339f5fb6b 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -688,25 +688,18 @@ static noinline int replay_one_extent(struct btrfs_trans_handle *trans,
 	if (ret == 0 &&
 	    (found_type == BTRFS_FILE_EXTENT_REG ||
 	     found_type == BTRFS_FILE_EXTENT_PREALLOC)) {
-		struct btrfs_file_extent_item cmp1;
-		struct btrfs_file_extent_item cmp2;
-		struct btrfs_file_extent_item *existing;
-		struct extent_buffer *leaf;
-
-		leaf = path->nodes[0];
-		existing = btrfs_item_ptr(leaf, path->slots[0],
-					  struct btrfs_file_extent_item);
+		struct btrfs_file_extent_item existing;
+		unsigned long ptr;
 
-		read_extent_buffer(eb, &cmp1, (unsigned long)item,
-				   sizeof(cmp1));
-		read_extent_buffer(leaf, &cmp2, (unsigned long)existing,
-				   sizeof(cmp2));
+		ptr = btrfs_item_ptr_offset(path->nodes[0], path->slots[0]);
+		read_extent_buffer(path->nodes[0], &existing, ptr, sizeof(existing));
 
 		/*
 		 * we already have a pointer to this exact extent,
 		 * we don't have to do anything
 		 */
-		if (memcmp(&cmp1, &cmp2, sizeof(cmp1)) == 0) {
+		if (memcmp_extent_buffer(eb, &existing, (unsigned long)item,
+					 sizeof(existing)) == 0) {
 			btrfs_release_path(path);
 			goto out;
 		}
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 5/7] btrfs: remove redundant else statement from btrfs_log_inode_parent()
  2025-03-13 17:55 [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees fdmanana
                   ` (3 preceding siblings ...)
  2025-03-13 17:55 ` [PATCH 4/7] btrfs: use memcmp_extent_buffer() at replay_one_extent() fdmanana
@ 2025-03-13 17:55 ` fdmanana
  2025-03-13 17:55 ` [PATCH 6/7] btrfs: simplify condition for logging new dentries at btrfs_log_inode_parent() fdmanana
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: fdmanana @ 2025-03-13 17:55 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

If we don't need to log new directory dentries, there's no point in having
an else branch just to set 'ret' to zero, as it's already zero because
everytime it gets a non-zero value we jump into one of the exit labels.

So remove it, which reduces source code size and the module text size.

Before this change:

  $ size fs/btrfs/btrfs.ko
     text	   data	    bss	    dec	    hex	filename
  1813855	 163737	  16920	1994512	 1e6f10	fs/btrfs/btrfs.ko

After this change:

  $ size fs/btrfs/btrfs.ko
     text	   data	    bss	    dec	    hex	filename
  1813807	 163737	  16920	1994464	 1e6ee0	fs/btrfs/btrfs.ko

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/tree-log.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 7e0339f5fb6b..6c59c581ebe4 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -7146,8 +7146,6 @@ static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
 
 	if (log_dentries)
 		ret = log_new_dir_dentries(trans, inode, ctx);
-	else
-		ret = 0;
 end_trans:
 	if (ret < 0) {
 		btrfs_set_log_full_commit(trans);
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 6/7] btrfs: simplify condition for logging new dentries at btrfs_log_inode_parent()
  2025-03-13 17:55 [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees fdmanana
                   ` (4 preceding siblings ...)
  2025-03-13 17:55 ` [PATCH 5/7] btrfs: remove redundant else statement from btrfs_log_inode_parent() fdmanana
@ 2025-03-13 17:55 ` fdmanana
  2025-03-13 17:55 ` [PATCH 7/7] btrfs: remove end_no_trans label from btrfs_log_inode_parent() fdmanana
  2025-03-17 14:59 ` [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees David Sterba
  7 siblings, 0 replies; 9+ messages in thread
From: fdmanana @ 2025-03-13 17:55 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

There's no point in checking if the inode is a directory as
ctx->log_new_dentries is only set in case we are logging a directory down
the call chain of btrfs_log_inode(). So remove that check making the logic
more simple and while at it add a comment about why use a local variable
to track if we later need to log new dentries.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/tree-log.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 6c59c581ebe4..6bc9f5f32393 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -7036,7 +7036,7 @@ static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
 	struct btrfs_root *root = inode->root;
 	struct btrfs_fs_info *fs_info = root->fs_info;
 	int ret = 0;
-	bool log_dentries = false;
+	bool log_dentries;
 
 	if (btrfs_test_opt(fs_info, NOTREELOG)) {
 		ret = BTRFS_LOG_FORCE_COMMIT;
@@ -7090,8 +7090,11 @@ static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
 		goto end_trans;
 	}
 
-	if (S_ISDIR(inode->vfs_inode.i_mode) && ctx->log_new_dentries)
-		log_dentries = true;
+	/*
+	 * Track if we need to log dentries because ctx->log_new_dentries can
+	 * be modified in the call chains below.
+	 */
+	log_dentries = ctx->log_new_dentries;
 
 	/*
 	 * On unlink we must make sure all our current and old parent directory
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 7/7] btrfs: remove end_no_trans label from btrfs_log_inode_parent()
  2025-03-13 17:55 [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees fdmanana
                   ` (5 preceding siblings ...)
  2025-03-13 17:55 ` [PATCH 6/7] btrfs: simplify condition for logging new dentries at btrfs_log_inode_parent() fdmanana
@ 2025-03-13 17:55 ` fdmanana
  2025-03-17 14:59 ` [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees David Sterba
  7 siblings, 0 replies; 9+ messages in thread
From: fdmanana @ 2025-03-13 17:55 UTC (permalink / raw)
  To: linux-btrfs

From: Filipe Manana <fdmanana@suse.com>

It's a pointless label as we don't have to do anything under it other
than return from the function. So remove it and directly return from the
function where we used to goto.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
 fs/btrfs/tree-log.c | 28 ++++++++++------------------
 1 file changed, 10 insertions(+), 18 deletions(-)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 6bc9f5f32393..90dc094cfa5e 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -7038,24 +7038,18 @@ static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
 	int ret = 0;
 	bool log_dentries;
 
-	if (btrfs_test_opt(fs_info, NOTREELOG)) {
-		ret = BTRFS_LOG_FORCE_COMMIT;
-		goto end_no_trans;
-	}
+	if (btrfs_test_opt(fs_info, NOTREELOG))
+		return BTRFS_LOG_FORCE_COMMIT;
 
-	if (btrfs_root_refs(&root->root_item) == 0) {
-		ret = BTRFS_LOG_FORCE_COMMIT;
-		goto end_no_trans;
-	}
+	if (btrfs_root_refs(&root->root_item) == 0)
+		return BTRFS_LOG_FORCE_COMMIT;
 
 	/*
 	 * If we're logging an inode from a subvolume created in the current
 	 * transaction we must force a commit since the root is not persisted.
 	 */
-	if (btrfs_root_generation(&root->root_item) == trans->transid) {
-		ret = BTRFS_LOG_FORCE_COMMIT;
-		goto end_no_trans;
-	}
+	if (btrfs_root_generation(&root->root_item) == trans->transid)
+		return BTRFS_LOG_FORCE_COMMIT;
 
 	/*
 	 * Skip already logged inodes or inodes corresponding to tmpfiles
@@ -7064,14 +7058,12 @@ static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
 	 */
 	if ((btrfs_inode_in_log(inode, trans->transid) &&
 	     list_empty(&ctx->ordered_extents)) ||
-	    inode->vfs_inode.i_nlink == 0) {
-		ret = BTRFS_NO_LOG_SYNC;
-		goto end_no_trans;
-	}
+	    inode->vfs_inode.i_nlink == 0)
+		return BTRFS_NO_LOG_SYNC;
 
 	ret = start_log_trans(trans, root, ctx);
 	if (ret)
-		goto end_no_trans;
+		return ret;
 
 	ret = btrfs_log_inode(trans, inode, inode_only, ctx);
 	if (ret)
@@ -7158,7 +7150,7 @@ static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
 	if (ret)
 		btrfs_remove_log_ctx(root, ctx);
 	btrfs_end_log_trans(root);
-end_no_trans:
+
 	return ret;
 }
 
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees
  2025-03-13 17:55 [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees fdmanana
                   ` (6 preceding siblings ...)
  2025-03-13 17:55 ` [PATCH 7/7] btrfs: remove end_no_trans label from btrfs_log_inode_parent() fdmanana
@ 2025-03-17 14:59 ` David Sterba
  7 siblings, 0 replies; 9+ messages in thread
From: David Sterba @ 2025-03-17 14:59 UTC (permalink / raw)
  To: fdmanana; +Cc: linux-btrfs

On Thu, Mar 13, 2025 at 05:55:30PM +0000, fdmanana@kernel.org wrote:
> From: Filipe Manana <fdmanana@suse.com>
> 
> A series of cleanups, simplifications and a minor optimization related to
> log replay and inode logging. Details in the change logs.
> 
> Filipe Manana (7):
>   btrfs: avoid unnecessary memory allocation and copy at overwrite_item()
>   btrfs: use variables to store extent buffer and slot at overwrite_item()
>   btrfs: update outdated comment for overwrite_item()
>   btrfs: use memcmp_extent_buffer() at replay_one_extent()
>   btrfs: remove redundant else statement from btrfs_log_inode_parent()
>   btrfs: simplify condition for logging new dentries at btrfs_log_inode_parent()
>   btrfs: remove end_no_trans label from btrfs_log_inode_parent()

Reviewed-by: David Sterba <dsterba@suse.com>



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2025-03-17 14:59 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-13 17:55 [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees fdmanana
2025-03-13 17:55 ` [PATCH 1/7] btrfs: avoid unnecessary memory allocation and copy at overwrite_item() fdmanana
2025-03-13 17:55 ` [PATCH 2/7] btrfs: use variables to store extent buffer and slot " fdmanana
2025-03-13 17:55 ` [PATCH 3/7] btrfs: update outdated comment for overwrite_item() fdmanana
2025-03-13 17:55 ` [PATCH 4/7] btrfs: use memcmp_extent_buffer() at replay_one_extent() fdmanana
2025-03-13 17:55 ` [PATCH 5/7] btrfs: remove redundant else statement from btrfs_log_inode_parent() fdmanana
2025-03-13 17:55 ` [PATCH 6/7] btrfs: simplify condition for logging new dentries at btrfs_log_inode_parent() fdmanana
2025-03-13 17:55 ` [PATCH 7/7] btrfs: remove end_no_trans label from btrfs_log_inode_parent() fdmanana
2025-03-17 14:59 ` [PATCH 0/7] btrfs: some cleanups and minor optimization for log trees David Sterba

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox