]> git.hungrycats.org Git - linux/commitdiff
btrfs: remove the free space inode ordered extent special cases
authorTal Zussman <tz2294@columbia.edu>
Thu, 17 Sep 2026 04:00:09 +0000 (00:00 -0400)
committerDavid Sterba <dsterba@suse.com>
Thu, 17 Sep 2026 17:49:48 +0000 (19:49 +0200)
Free space inodes never have ordered extents anymore. Drop the lockdep
exceptions for them and btrfs_join_transaction_spacecache(), which was
only used to finish their ordered extents during a commit.

Assisted-by: Claude:claude-fable-5-1
Signed-off-by: Tal Zussman <tz2294@columbia.edu>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/inode.c
fs/btrfs/ordered-data.c
fs/btrfs/transaction.c
fs/btrfs/transaction.h

index 142ce180e7c9330d5929d52972daeda24ac3e380..c8c6f7bc1818f2ce53f2e130e3ec14644aa7b4a3 100644 (file)
@@ -3221,7 +3221,6 @@ int btrfs_finish_one_ordered(struct btrfs_ordered_extent *ordered_extent)
        int compress_type = 0;
        int ret = 0;
        u64 logical_len = ordered_extent->num_bytes;
-       bool freespace_inode;
        bool truncated = false;
        bool clear_reserved_extent = true;
        unsigned int clear_bits = 0;
@@ -3238,9 +3237,7 @@ int btrfs_finish_one_ordered(struct btrfs_ordered_extent *ordered_extent)
        if (!test_bit(BTRFS_ORDERED_NOCOW, &ordered_extent->flags))
                clear_bits |= EXTENT_DEFRAG;
 
-       freespace_inode = btrfs_is_free_space_inode(inode);
-       if (!freespace_inode)
-               btrfs_lockdep_acquire(fs_info, btrfs_ordered_extent);
+       btrfs_lockdep_acquire(fs_info, btrfs_ordered_extent);
 
        if (unlikely(test_bit(BTRFS_ORDERED_IOERR, &ordered_extent->flags))) {
                ret = -EIO;
@@ -3275,10 +3272,7 @@ int btrfs_finish_one_ordered(struct btrfs_ordered_extent *ordered_extent)
                                       &cached_state);
        }
 
-       if (freespace_inode)
-               trans = btrfs_join_transaction_spacecache(root);
-       else
-               trans = btrfs_join_transaction(root);
+       trans = btrfs_join_transaction(root);
        if (IS_ERR(trans)) {
                ret = PTR_ERR(trans);
                trans = NULL;
@@ -8135,7 +8129,6 @@ void btrfs_destroy_inode(struct inode *vfs_inode)
        struct btrfs_ordered_extent *ordered;
        struct btrfs_inode *inode = BTRFS_I(vfs_inode);
        struct btrfs_root *root = inode->root;
-       bool freespace_inode;
 
        WARN_ON(!hlist_empty(&vfs_inode->i_dentry));
        WARN_ON(vfs_inode->i_data.nrpages);
@@ -8158,12 +8151,6 @@ void btrfs_destroy_inode(struct inode *vfs_inode)
        if (!root)
                return;
 
-       /*
-        * If this is a free space inode do not take the ordered extents lockdep
-        * map.
-        */
-       freespace_inode = btrfs_is_free_space_inode(inode);
-
        while (1) {
                ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1);
                if (!ordered)
@@ -8173,8 +8160,7 @@ void btrfs_destroy_inode(struct inode *vfs_inode)
                                  "found ordered extent %llu %llu on inode cleanup",
                                  ordered->file_offset, ordered->num_bytes);
 
-                       if (!freespace_inode)
-                               btrfs_lockdep_acquire(root->fs_info, btrfs_ordered_extent);
+                       btrfs_lockdep_acquire(root->fs_info, btrfs_ordered_extent);
 
                        btrfs_remove_ordered_extent(ordered);
                        btrfs_put_ordered_extent(ordered);
index e9f1cbeb555a4c97e924cc9ad4dea2b88a26ae49..df74c75d6c2991922f346e6691a12f680e936dd9 100644 (file)
@@ -654,13 +654,6 @@ void btrfs_remove_ordered_extent(struct btrfs_ordered_extent *entry)
        struct btrfs_fs_info *fs_info = root->fs_info;
        struct rb_node *node;
        bool pending;
-       bool freespace_inode;
-
-       /*
-        * If this is a free space inode the thread has not acquired the ordered
-        * extents lockdep map.
-        */
-       freespace_inode = btrfs_is_free_space_inode(btrfs_inode);
 
        btrfs_lockdep_acquire(fs_info, btrfs_trans_pending_ordered);
        /* This is paired with alloc_ordered_extent(). */
@@ -735,8 +728,7 @@ void btrfs_remove_ordered_extent(struct btrfs_ordered_extent *entry)
        }
        spin_unlock(&root->ordered_extent_lock);
        wake_up(&entry->wait);
-       if (!freespace_inode)
-               btrfs_lockdep_release(fs_info, btrfs_ordered_extent);
+       btrfs_lockdep_release(fs_info, btrfs_ordered_extent);
 }
 
 static void btrfs_run_ordered_extent_work(struct btrfs_work *work)
@@ -867,16 +859,9 @@ void btrfs_start_ordered_extent_nowriteback(struct btrfs_ordered_extent *entry,
        u64 start = entry->file_offset;
        u64 end = start + entry->num_bytes - 1;
        struct btrfs_inode *inode = entry->inode;
-       bool freespace_inode;
 
        trace_btrfs_ordered_extent_start(inode, entry);
 
-       /*
-        * If this is a free space inode do not take the ordered extents lockdep
-        * map.
-        */
-       freespace_inode = btrfs_is_free_space_inode(inode);
-
        /*
         * pages in the range can be dirty, clean or writeback.  We
         * start IO on any dirty ones so the wait doesn't stall waiting
@@ -896,8 +881,7 @@ void btrfs_start_ordered_extent_nowriteback(struct btrfs_ordered_extent *entry,
                }
        }
 
-       if (!freespace_inode)
-               btrfs_might_wait_for_event(inode->root->fs_info, btrfs_ordered_extent);
+       btrfs_might_wait_for_event(inode->root->fs_info, btrfs_ordered_extent);
        wait_event(entry->wait, test_bit(BTRFS_ORDERED_COMPLETE, &entry->flags));
 }
 
index b0e38039eca184a072d5dac95ccd036168a87cf2..a875008feb8fce4522316e1338ff80fc4fb9bfe3 100644 (file)
@@ -854,12 +854,6 @@ struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root)
                                 true);
 }
 
-struct btrfs_trans_handle *btrfs_join_transaction_spacecache(struct btrfs_root *root)
-{
-       return start_transaction(root, 0, TRANS_JOIN_NOLOCK,
-                                BTRFS_RESERVE_NO_FLUSH, true);
-}
-
 /*
  * Similar to regular join but it never starts a transaction when none is
  * running or when there's a running one at a state >= TRANS_STATE_UNBLOCKED.
index 17d136675d49db89e5e1473c6d00d3ea9f00933e..70b6c95efe53afe4fc5e46628ef668634048c4f5 100644 (file)
@@ -294,7 +294,6 @@ struct btrfs_trans_handle *btrfs_start_transaction_fallback_global_rsv(
                                        struct btrfs_root *root,
                                        unsigned int num_items);
 struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root);
-struct btrfs_trans_handle *btrfs_join_transaction_spacecache(struct btrfs_root *root);
 struct btrfs_trans_handle *btrfs_join_transaction_nostart(struct btrfs_root *root);
 struct btrfs_trans_handle *btrfs_attach_transaction(struct btrfs_root *root);
 struct btrfs_trans_handle *btrfs_attach_transaction_barrier(