jbd2: don't abort the journal when freeing buffers
authorZhang Yi <yi.zhang@huawei.com>
Thu, 10 Jun 2021 11:24:35 +0000 (19:24 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 24 Jun 2021 14:33:50 +0000 (10:33 -0400)
Now that we can be sure the journal is aborted once a buffer has failed
to be written back to disk, we can remove the journal abort logic in
jbd2_journal_try_to_free_buffers() which was introduced in
commit c044f3d8360d ("jbd2: abort journal if free a async write error
metadata buffer"), because it may cost and propably is not safe.

Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20210610112440.3438139-4-yi.zhang@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/jbd2/transaction.c

index e8fc45f..8804e12 100644 (file)
@@ -2123,7 +2123,6 @@ int jbd2_journal_try_to_free_buffers(journal_t *journal, struct page *page)
 {
        struct buffer_head *head;
        struct buffer_head *bh;
-       bool has_write_io_error = false;
        int ret = 0;
 
        J_ASSERT(PageLocked(page));
@@ -2148,26 +2147,10 @@ int jbd2_journal_try_to_free_buffers(journal_t *journal, struct page *page)
                jbd2_journal_put_journal_head(jh);
                if (buffer_jbd(bh))
                        goto busy;
-
-               /*
-                * If we free a metadata buffer which has been failed to
-                * write out, the jbd2 checkpoint procedure will not detect
-                * this failure and may lead to filesystem inconsistency
-                * after cleanup journal tail.
-                */
-               if (buffer_write_io_error(bh)) {
-                       pr_err("JBD2: Error while async write back metadata bh %llu.",
-                              (unsigned long long)bh->b_blocknr);
-                       has_write_io_error = true;
-               }
        } while ((bh = bh->b_this_page) != head);
 
        ret = try_to_free_buffers(page);
-
 busy:
-       if (has_write_io_error)
-               jbd2_journal_abort(journal, -EIO);
-
        return ret;
 }