lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
 <SEZPR06MB526928EBDA13B6463D7EE00BE8B32@SEZPR06MB5269.apcprd06.prod.outlook.com>
Date: Mon, 14 Apr 2025 13:34:49 +0000
From: 李扬韬 <frank.li@...o.com>
To: Daniel Vacek <neelx@...e.com>
CC: "clm@...com" <clm@...com>, "josef@...icpanda.com" <josef@...icpanda.com>,
	"dsterba@...e.com" <dsterba@...e.com>, "linux-btrfs@...r.kernel.org"
	<linux-btrfs@...r.kernel.org>, "linux-kernel@...r.kernel.org"
	<linux-kernel@...r.kernel.org>
Subject:
 回复: [PATCH] btrfs: use BTRFS_PATH_AUTO_FREE in btrfs_truncate_inode_items()

Hi Daniel,

> And what about the other functions in that file? We could even get rid of two allocations passing the path from ..._inode_ref() to ..._inode_extref().

I made the following changes, is this what you meant?
I will do the rest if that's ok.

Thx,
Yangtao

diff --git a/fs/btrfs/inode-item.c b/fs/btrfs/inode-item.c
index 3530de0618c8..e082d7e27c29 100644
--- a/fs/btrfs/inode-item.c
+++ b/fs/btrfs/inode-item.c
@@ -105,11 +105,11 @@ btrfs_lookup_inode_extref(struct btrfs_trans_handle *trans,

 static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,
                                  struct btrfs_root *root,
+                                 struct btrfs_path *path,
                                  const struct fscrypt_str *name,
                                  u64 inode_objectid, u64 ref_objectid,
                                  u64 *index)
 {
-       struct btrfs_path *path;
        struct btrfs_key key;
        struct btrfs_inode_extref *extref;
        struct extent_buffer *leaf;
@@ -131,7 +131,7 @@ static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,
        if (ret > 0)
                ret = -ENOENT;
        if (ret < 0)
-               goto out;
+               return ret;

        /*
         * Sanity check - did we find the right item for this name?
@@ -142,8 +142,7 @@ static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,
                                                ref_objectid, name);
        if (!extref) {
                btrfs_abort_transaction(trans, -ENOENT);
-               ret = -ENOENT;
-               goto out;
+               return -ENOENT;
        }

        leaf = path->nodes[0];
@@ -156,8 +155,7 @@ static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,
                 * Common case only one ref in the item, remove the
                 * whole item.
                 */
-               ret = btrfs_del_item(trans, root, path);
-               goto out;
+               return btrfs_del_item(trans, root, path);
        }

        ptr = (unsigned long)extref;
@@ -168,9 +166,6 @@ static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,

        btrfs_truncate_item(trans, path, item_size - del_len, 1);

-out:
-       btrfs_free_path(path);
-
        return ret;
 }

@@ -178,7 +173,7 @@ int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
                        struct btrfs_root *root, const struct fscrypt_str *name,
                        u64 inode_objectid, u64 ref_objectid, u64 *index)
 {
-       struct btrfs_path *path;
+       BTRFS_PATH_AUTO_FREE(path);
        struct btrfs_key key;
        struct btrfs_inode_ref *ref;
        struct extent_buffer *leaf;
@@ -230,7 +225,7 @@ int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
                              item_size - (ptr + sub_item_len - item_start));
        btrfs_truncate_item(trans, path, item_size - sub_item_len, 1);
 out:
-       btrfs_free_path(path);
+       btrfs_release_path(path);

        if (search_ext_refs) {
                /*
@@ -238,7 +233,7 @@ int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
                 * name in our ref array. Find and remove the extended
                 * inode ref then.
                 */
-               return btrfs_del_inode_extref(trans, root, name,
+               return btrfs_del_inode_extref(trans, root, path, name,
                                              inode_objectid, ref_objectid, index);
        }

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ