jbd2: switch jbd2_submit_inode_data() to use fs-provided hook for data writeout
authorJan Kara <jack@suse.cz>
Wed, 7 Dec 2022 11:27:12 +0000 (12:27 +0100)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 9 Dec 2022 02:49:25 +0000 (21:49 -0500)
jbd2_submit_inode_data() hardcoded use of
jbd2_journal_submit_inode_data_buffers() for submission of data pages.
Make it use j_submit_inode_data_buffers hook instead. This effectively
switches ext4 fastcommits to use ext4_writepages() for data writeout
instead of generic_writepages().

Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20221207112722.22220-9-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/fast_commit.c
fs/jbd2/commit.c
include/linux/jbd2.h

index 1da85f6..4594b62 100644 (file)
@@ -981,7 +981,7 @@ static int ext4_fc_submit_inode_data_all(journal_t *journal)
                        finish_wait(&ei->i_fc_wait, &wait);
                }
                spin_unlock(&sbi->s_fc_lock);
-               ret = jbd2_submit_inode_data(ei->jinode);
+               ret = jbd2_submit_inode_data(journal, ei->jinode);
                if (ret)
                        return ret;
                spin_lock(&sbi->s_fc_lock);
index 885a7a6..4810438 100644 (file)
@@ -207,14 +207,13 @@ int jbd2_journal_submit_inode_data_buffers(struct jbd2_inode *jinode)
 }
 
 /* Send all the data buffers related to an inode */
-int jbd2_submit_inode_data(struct jbd2_inode *jinode)
+int jbd2_submit_inode_data(journal_t *journal, struct jbd2_inode *jinode)
 {
-
        if (!jinode || !(jinode->i_flags & JI_WRITE_DATA))
                return 0;
 
        trace_jbd2_submit_inode_data(jinode->i_vfs_inode);
-       return jbd2_journal_submit_inode_data_buffers(jinode);
+       return journal->j_submit_inode_data_buffers(jinode);
 
 }
 EXPORT_SYMBOL(jbd2_submit_inode_data);
index 0b72423..2170e0c 100644 (file)
@@ -1662,7 +1662,7 @@ int jbd2_fc_begin_commit(journal_t *journal, tid_t tid);
 int jbd2_fc_end_commit(journal_t *journal);
 int jbd2_fc_end_commit_fallback(journal_t *journal);
 int jbd2_fc_get_buf(journal_t *journal, struct buffer_head **bh_out);
-int jbd2_submit_inode_data(struct jbd2_inode *jinode);
+int jbd2_submit_inode_data(journal_t *journal, struct jbd2_inode *jinode);
 int jbd2_wait_inode_data(journal_t *journal, struct jbd2_inode *jinode);
 int jbd2_fc_wait_bufs(journal_t *journal, int num_blks);
 int jbd2_fc_release_bufs(journal_t *journal);