]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ocfs2: retire ocfs2_drop_inode() and I_WILL_FREE usage
authorMateusz Guzik <mjguzik@gmail.com>
Fri, 3 Oct 2025 02:36:52 +0000 (04:36 +0200)
committerChristian Brauner <brauner@kernel.org>
Mon, 20 Oct 2025 18:22:25 +0000 (20:22 +0200)
This postpones the writeout to ocfs2_evict_inode(), which I'm told is
fine (tm).

The intent is to retire the I_WILL_FREE flag.

Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>
Reviewed-by: Joel Becker <jlbec@evilplan.org>
Reviewed-by: Mark Tinguely <amrk.tinguely@oracle.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/ocfs2/inode.c
fs/ocfs2/inode.h
fs/ocfs2/ocfs2_trace.h
fs/ocfs2/super.c

index fcc89856ab95b65619745135060744126d741e84..84115bf8b464f8ecf7d809128fc1a3bfdf8c40d9 100644 (file)
@@ -1290,6 +1290,8 @@ static void ocfs2_clear_inode(struct inode *inode)
 
 void ocfs2_evict_inode(struct inode *inode)
 {
+       write_inode_now(inode, 1);
+
        if (!inode->i_nlink ||
            (OCFS2_I(inode)->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)) {
                ocfs2_delete_inode(inode);
@@ -1299,27 +1301,6 @@ void ocfs2_evict_inode(struct inode *inode)
        ocfs2_clear_inode(inode);
 }
 
-/* Called under inode_lock, with no more references on the
- * struct inode, so it's safe here to check the flags field
- * and to manipulate i_nlink without any other locks. */
-int ocfs2_drop_inode(struct inode *inode)
-{
-       struct ocfs2_inode_info *oi = OCFS2_I(inode);
-
-       trace_ocfs2_drop_inode((unsigned long long)oi->ip_blkno,
-                               inode->i_nlink, oi->ip_flags);
-
-       assert_spin_locked(&inode->i_lock);
-       inode->i_state |= I_WILL_FREE;
-       spin_unlock(&inode->i_lock);
-       write_inode_now(inode, 1);
-       spin_lock(&inode->i_lock);
-       WARN_ON(inode->i_state & I_NEW);
-       inode->i_state &= ~I_WILL_FREE;
-
-       return 1;
-}
-
 /*
  * This is called from our getattr.
  */
index accf03d4765ed9739fb93451f7edae9f647b6d23..07bd838e7843dc187435b5dab14e1e976da29794 100644 (file)
@@ -116,7 +116,6 @@ static inline struct ocfs2_caching_info *INODE_CACHE(struct inode *inode)
 }
 
 void ocfs2_evict_inode(struct inode *inode);
-int ocfs2_drop_inode(struct inode *inode);
 
 /* Flags for ocfs2_iget() */
 #define OCFS2_FI_FLAG_SYSFILE          0x1
index 54ed1495de9a79d08828496f2ea2be11197b218c..4b32fb5658ad7aaa2dd61a6bf3ecfeb86f4978ad 100644 (file)
@@ -1569,8 +1569,6 @@ DEFINE_OCFS2_ULL_ULL_UINT_EVENT(ocfs2_delete_inode);
 
 DEFINE_OCFS2_ULL_UINT_EVENT(ocfs2_clear_inode);
 
-DEFINE_OCFS2_ULL_UINT_UINT_EVENT(ocfs2_drop_inode);
-
 TRACE_EVENT(ocfs2_inode_revalidate,
        TP_PROTO(void *inode, unsigned long long ino,
                 unsigned int flags),
index 53daa448240638f37ce8c3aceb053be5aa6bf545..2c7ba1480f7a1b8b1f2efa9ea7c9efb02e7ffcec 100644 (file)
@@ -129,7 +129,7 @@ static const struct super_operations ocfs2_sops = {
        .statfs         = ocfs2_statfs,
        .alloc_inode    = ocfs2_alloc_inode,
        .free_inode     = ocfs2_free_inode,
-       .drop_inode     = ocfs2_drop_inode,
+       .drop_inode     = inode_just_drop,
        .evict_inode    = ocfs2_evict_inode,
        .sync_fs        = ocfs2_sync_fs,
        .put_super      = ocfs2_put_super,