]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
jbd2: introduce/export functions jbd2_journal_submit|finish_inode_data_buffers()
authorMauricio Faria de Oliveira <mfo@canonical.com>
Thu, 9 Sep 2021 20:22:22 +0000 (17:22 -0300)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 24 Sep 2021 13:49:14 +0000 (15:49 +0200)
BugLink: https://bugs.launchpad.net/bugs/1847340
Export functions that implement the current behavior done
for an inode in journal_submit|finish_inode_data_buffers().

No functional change.

Signed-off-by: Mauricio Faria de Oliveira <mfo@canonical.com>
Suggested-by: Jan Kara <jack@suse.cz>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Link: https://lore.kernel.org/r/20201006004841.600488-2-mfo@canonical.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
(cherry picked from commit aa3c0c61f62d682259e3e66cdc01846290f9cd6c)
Signed-off-by: Mauricio Faria de Oliveira <mfo@canonical.com>
Acked-by: Tim Gardner <tim.gardner@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Signed-off-by: Kelsey Skunberg <kelsey.skunberg@canonical.com>
fs/jbd2/commit.c
fs/jbd2/journal.c
include/linux/jbd2.h

index 88146008b3e36f32e83eb67c537636a624796122..70cb8420636cb217f9136a002d796ea29ad7e0ca 100644 (file)
@@ -187,19 +187,17 @@ static int journal_wait_on_commit_record(journal_t *journal,
  * use writepages() because with delayed allocation we may be doing
  * block allocation in writepages().
  */
-static int journal_submit_inode_data_buffers(struct address_space *mapping,
-               loff_t dirty_start, loff_t dirty_end)
+int jbd2_journal_submit_inode_data_buffers(struct jbd2_inode *jinode)
 {
-       int ret;
+       struct address_space *mapping = jinode->i_vfs_inode->i_mapping;
        struct writeback_control wbc = {
                .sync_mode =  WB_SYNC_ALL,
                .nr_to_write = mapping->nrpages * 2,
-               .range_start = dirty_start,
-               .range_end = dirty_end,
+               .range_start = jinode->i_dirty_start,
+               .range_end = jinode->i_dirty_end,
        };
 
-       ret = generic_writepages(mapping, &wbc);
-       return ret;
+       return generic_writepages(mapping, &wbc);
 }
 
 /*
@@ -215,16 +213,11 @@ static int journal_submit_data_buffers(journal_t *journal,
 {
        struct jbd2_inode *jinode;
        int err, ret = 0;
-       struct address_space *mapping;
 
        spin_lock(&journal->j_list_lock);
        list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
-               loff_t dirty_start = jinode->i_dirty_start;
-               loff_t dirty_end = jinode->i_dirty_end;
-
                if (!(jinode->i_flags & JI_WRITE_DATA))
                        continue;
-               mapping = jinode->i_vfs_inode->i_mapping;
                jinode->i_flags |= JI_COMMIT_RUNNING;
                spin_unlock(&journal->j_list_lock);
                /*
@@ -234,8 +227,7 @@ static int journal_submit_data_buffers(journal_t *journal,
                 * only allocated blocks here.
                 */
                trace_jbd2_submit_inode_data(jinode->i_vfs_inode);
-               err = journal_submit_inode_data_buffers(mapping, dirty_start,
-                               dirty_end);
+               err = jbd2_journal_submit_inode_data_buffers(jinode);
                if (!ret)
                        ret = err;
                spin_lock(&journal->j_list_lock);
@@ -248,6 +240,15 @@ static int journal_submit_data_buffers(journal_t *journal,
        return ret;
 }
 
+int jbd2_journal_finish_inode_data_buffers(struct jbd2_inode *jinode)
+{
+       struct address_space *mapping = jinode->i_vfs_inode->i_mapping;
+
+       return filemap_fdatawait_range_keep_errors(mapping,
+                                                  jinode->i_dirty_start,
+                                                  jinode->i_dirty_end);
+}
+
 /*
  * Wait for data submitted for writeout, refile inodes to proper
  * transaction if needed.
@@ -262,16 +263,11 @@ static int journal_finish_inode_data_buffers(journal_t *journal,
        /* For locking, see the comment in journal_submit_data_buffers() */
        spin_lock(&journal->j_list_lock);
        list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
-               loff_t dirty_start = jinode->i_dirty_start;
-               loff_t dirty_end = jinode->i_dirty_end;
-
                if (!(jinode->i_flags & JI_WAIT_DATA))
                        continue;
                jinode->i_flags |= JI_COMMIT_RUNNING;
                spin_unlock(&journal->j_list_lock);
-               err = filemap_fdatawait_range_keep_errors(
-                               jinode->i_vfs_inode->i_mapping, dirty_start,
-                               dirty_end);
+               err = jbd2_journal_finish_inode_data_buffers(jinode);
                if (!ret)
                        ret = err;
                spin_lock(&journal->j_list_lock);
index b7c5819bfc41114f3b7b476bef26746d0538ba28..6d2f70da7d162c4f93ce37eed00d2a48794837a4 100644 (file)
@@ -91,6 +91,8 @@ EXPORT_SYMBOL(jbd2_journal_try_to_free_buffers);
 EXPORT_SYMBOL(jbd2_journal_force_commit);
 EXPORT_SYMBOL(jbd2_journal_inode_ranged_write);
 EXPORT_SYMBOL(jbd2_journal_inode_ranged_wait);
+EXPORT_SYMBOL(jbd2_journal_submit_inode_data_buffers);
+EXPORT_SYMBOL(jbd2_journal_finish_inode_data_buffers);
 EXPORT_SYMBOL(jbd2_journal_init_jbd_inode);
 EXPORT_SYMBOL(jbd2_journal_release_jbd_inode);
 EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate);
index b0e97e5de8ca42e74161903122d7e88647d921a1..41ab7b9240b40c925072d2df2c132e0bf61389af 100644 (file)
@@ -1415,6 +1415,10 @@ extern int          jbd2_journal_inode_ranged_write(handle_t *handle,
 extern int        jbd2_journal_inode_ranged_wait(handle_t *handle,
                        struct jbd2_inode *inode, loff_t start_byte,
                        loff_t length);
+extern int        jbd2_journal_submit_inode_data_buffers(
+                       struct jbd2_inode *jinode);
+extern int        jbd2_journal_finish_inode_data_buffers(
+                       struct jbd2_inode *jinode);
 extern int        jbd2_journal_begin_ordered_truncate(journal_t *journal,
                                struct jbd2_inode *inode, loff_t new_size);
 extern void       jbd2_journal_init_jbd_inode(struct jbd2_inode *jinode, struct inode *inode);