| From: "Matthew Wilcox (Oracle)" <willy@infradead.org> |
| Subject: fs: remove calls to set and clear the folio error flag |
| Date: Wed, 7 Aug 2024 20:35:25 +0100 |
| |
| Nobody checks the folio error flag any more, so we can stop setting and |
| clearing it. Also remove the documentation suggesting to not bother |
| setting the error bit. |
| |
| Link: https://lkml.kernel.org/r/20240807193528.1865100-1-willy@infradead.org |
| Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| Documentation/filesystems/vfs.rst | 3 +-- |
| mm/filemap.c | 8 -------- |
| mm/migrate.c | 2 -- |
| mm/page_io.c | 4 +--- |
| 4 files changed, 2 insertions(+), 15 deletions(-) |
| |
| --- a/Documentation/filesystems/vfs.rst~fs-remove-calls-to-set-and-clear-the-folio-error-flag |
| +++ a/Documentation/filesystems/vfs.rst |
| @@ -913,8 +913,7 @@ cache in your filesystem. The following |
| stop attempting I/O, it can simply return. The caller will |
| remove the remaining pages from the address space, unlock them |
| and decrement the page refcount. Set PageUptodate if the I/O |
| - completes successfully. Setting PageError on any page will be |
| - ignored; simply unlock the page if an I/O error occurs. |
| + completes successfully. |
| |
| ``write_begin`` |
| Called by the generic buffered write code to ask the filesystem |
| --- a/mm/filemap.c~fs-remove-calls-to-set-and-clear-the-folio-error-flag |
| +++ a/mm/filemap.c |
| @@ -530,7 +530,6 @@ static void __filemap_fdatawait_range(st |
| struct folio *folio = fbatch.folios[i]; |
| |
| folio_wait_writeback(folio); |
| - folio_clear_error(folio); |
| } |
| folio_batch_release(&fbatch); |
| cond_resched(); |
| @@ -2342,13 +2341,6 @@ static int filemap_read_folio(struct fil |
| unsigned long pflags; |
| int error; |
| |
| - /* |
| - * A previous I/O error may have been due to temporary failures, |
| - * eg. multipath errors. PG_error will be set again if read_folio |
| - * fails. |
| - */ |
| - folio_clear_error(folio); |
| - |
| /* Start the actual read. The read will unlock the page. */ |
| if (unlikely(workingset)) |
| psi_memstall_enter(&pflags); |
| --- a/mm/migrate.c~fs-remove-calls-to-set-and-clear-the-folio-error-flag |
| +++ a/mm/migrate.c |
| @@ -586,8 +586,6 @@ void folio_migrate_flags(struct folio *n |
| { |
| int cpupid; |
| |
| - if (folio_test_error(folio)) |
| - folio_set_error(newfolio); |
| if (folio_test_referenced(folio)) |
| folio_set_referenced(newfolio); |
| if (folio_test_uptodate(folio)) |
| --- a/mm/page_io.c~fs-remove-calls-to-set-and-clear-the-folio-error-flag |
| +++ a/mm/page_io.c |
| @@ -273,9 +273,7 @@ static void sio_write_complete(struct ki |
| * memory for allocating transmit buffers. |
| * Mark the page dirty and avoid |
| * folio_rotate_reclaimable but rate-limit the |
| - * messages but do not flag PageError like |
| - * the normal direct-to-bio case as it could |
| - * be temporary. |
| + * messages. |
| */ |
| pr_err_ratelimited("Write error %ld on dio swapfile (%llu)\n", |
| ret, swap_dev_pos(page_swap_entry(page))); |
| _ |