Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'vfs-6.11.pg_error' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs

Pull PG_error removal updates from Christian Brauner:
"This contains work to remove almost all remaining users of PG_error
from filesystems and filesystem helper libraries. An additional patch
will be coming in via the jfs tree which tests the PG_error bit.

Afterwards nothing will be testing it anymore and it's safe to remove
all places which set or clear the PG_error bit.

The goal is to fully remove PG_error by the next merge window"

* tag 'vfs-6.11.pg_error' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs:
buffer: Remove calls to set and clear the folio error flag
iomap: Remove calls to set and clear folio error flag
vboxsf: Convert vboxsf_read_folio() to use a folio
ufs: Remove call to set the folio error flag
romfs: Convert romfs_read_folio() to use a folio
reiserfs: Remove call to folio_set_error()
orangefs: Remove calls to set/clear the error flag
nfs: Remove calls to folio_set_error
jffs2: Remove calls to set/clear the folio error flag
hostfs: Convert hostfs_read_folio() to use a folio
isofs: Convert rock_ridge_symlink_read_folio to use a folio
hpfs: Convert hpfs_symlink_read_folio to use a folio
efs: Convert efs_symlink_read_folio to use a folio
cramfs: Convert cramfs_read_folio to use a folio
coda: Convert coda_symlink_filler() to use folio_end_read()
befs: Convert befs_symlink_read_folio() to use folio_end_read()

+60 -168
+4 -6
fs/befs/linuxvfs.c
··· 475 475 befs_data_stream *data = &befs_ino->i_data.ds; 476 476 befs_off_t len = data->size; 477 477 char *link = folio_address(folio); 478 + int err = -EIO; 478 479 479 480 if (len == 0 || len > PAGE_SIZE) { 480 481 befs_error(sb, "Long symlink with illegal length"); ··· 488 487 goto fail; 489 488 } 490 489 link[len - 1] = '\0'; 491 - folio_mark_uptodate(folio); 492 - folio_unlock(folio); 493 - return 0; 490 + err = 0; 494 491 fail: 495 - folio_set_error(folio); 496 - folio_unlock(folio); 497 - return -EIO; 492 + folio_end_read(folio, err == 0); 493 + return err; 498 494 } 499 495 500 496 /*
+1 -6
fs/buffer.c
··· 258 258 } else { 259 259 clear_buffer_uptodate(bh); 260 260 buffer_io_error(bh, ", async page read"); 261 - folio_set_error(folio); 262 261 } 263 262 264 263 /* ··· 390 391 buffer_io_error(bh, ", lost async page write"); 391 392 mark_buffer_write_io_error(bh); 392 393 clear_buffer_uptodate(bh); 393 - folio_set_error(folio); 394 394 } 395 395 396 396 first = folio_buffers(folio); ··· 1958 1960 clear_buffer_dirty(bh); 1959 1961 } 1960 1962 } while ((bh = bh->b_this_page) != head); 1961 - folio_set_error(folio); 1962 1963 BUG_ON(folio_test_writeback(folio)); 1963 1964 mapping_set_error(folio->mapping, err); 1964 1965 folio_start_writeback(folio); ··· 2402 2405 if (iblock < lblock) { 2403 2406 WARN_ON(bh->b_size != blocksize); 2404 2407 err = get_block(inode, iblock, bh, 0); 2405 - if (err) { 2406 - folio_set_error(folio); 2408 + if (err) 2407 2409 page_error = true; 2408 - } 2409 2410 } 2410 2411 if (!buffer_mapped(bh)) { 2411 2412 folio_zero_range(folio, i * blocksize,
+1 -9
fs/coda/symlink.c
··· 31 31 cii = ITOC(inode); 32 32 33 33 error = venus_readlink(inode->i_sb, &cii->c_fid, p, &len); 34 - if (error) 35 - goto fail; 36 - folio_mark_uptodate(folio); 37 - folio_unlock(folio); 38 - return 0; 39 - 40 - fail: 41 - folio_set_error(folio); 42 - folio_unlock(folio); 34 + folio_end_read(folio, error == 0); 43 35 return error; 44 36 } 45 37
+10 -15
fs/cramfs/inode.c
··· 811 811 812 812 static int cramfs_read_folio(struct file *file, struct folio *folio) 813 813 { 814 - struct page *page = &folio->page; 815 - struct inode *inode = page->mapping->host; 814 + struct inode *inode = folio->mapping->host; 816 815 u32 maxblock; 817 816 int bytes_filled; 818 817 void *pgdata; 818 + bool success = false; 819 819 820 820 maxblock = (inode->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT; 821 821 bytes_filled = 0; 822 - pgdata = kmap_local_page(page); 822 + pgdata = kmap_local_folio(folio, 0); 823 823 824 - if (page->index < maxblock) { 824 + if (folio->index < maxblock) { 825 825 struct super_block *sb = inode->i_sb; 826 - u32 blkptr_offset = OFFSET(inode) + page->index * 4; 826 + u32 blkptr_offset = OFFSET(inode) + folio->index * 4; 827 827 u32 block_ptr, block_start, block_len; 828 828 bool uncompressed, direct; 829 829 ··· 844 844 if (uncompressed) { 845 845 block_len = PAGE_SIZE; 846 846 /* if last block: cap to file length */ 847 - if (page->index == maxblock - 1) 847 + if (folio->index == maxblock - 1) 848 848 block_len = 849 849 offset_in_page(inode->i_size); 850 850 } else { ··· 861 861 * from the previous block's pointer. 862 862 */ 863 863 block_start = OFFSET(inode) + maxblock * 4; 864 - if (page->index) 864 + if (folio->index) 865 865 block_start = *(u32 *) 866 866 cramfs_read(sb, blkptr_offset - 4, 4); 867 867 /* Beware... previous ptr might be a direct ptr */ ··· 906 906 } 907 907 908 908 memset(pgdata + bytes_filled, 0, PAGE_SIZE - bytes_filled); 909 - flush_dcache_page(page); 910 - kunmap_local(pgdata); 911 - SetPageUptodate(page); 912 - unlock_page(page); 913 - return 0; 909 + flush_dcache_folio(folio); 914 910 911 + success = true; 915 912 err: 916 913 kunmap_local(pgdata); 917 - ClearPageUptodate(page); 918 - SetPageError(page); 919 - unlock_page(page); 914 + folio_end_read(folio, success); 920 915 return 0; 921 916 } 922 917
+5 -9
fs/efs/symlink.c
··· 14 14 15 15 static int efs_symlink_read_folio(struct file *file, struct folio *folio) 16 16 { 17 - struct page *page = &folio->page; 18 - char *link = page_address(page); 19 - struct buffer_head * bh; 20 - struct inode * inode = page->mapping->host; 17 + char *link = folio_address(folio); 18 + struct buffer_head *bh; 19 + struct inode *inode = folio->mapping->host; 21 20 efs_block_t size = inode->i_size; 22 21 int err; 23 22 ··· 39 40 brelse(bh); 40 41 } 41 42 link[size] = '\0'; 42 - SetPageUptodate(page); 43 - unlock_page(page); 44 - return 0; 43 + err = 0; 45 44 fail: 46 - SetPageError(page); 47 - unlock_page(page); 45 + folio_end_read(folio, err == 0); 48 46 return err; 49 47 } 50 48
+6 -17
fs/hostfs/hostfs_kern.c
··· 432 432 433 433 static int hostfs_read_folio(struct file *file, struct folio *folio) 434 434 { 435 - struct page *page = &folio->page; 436 435 char *buffer; 437 - loff_t start = page_offset(page); 436 + loff_t start = folio_pos(folio); 438 437 int bytes_read, ret = 0; 439 438 440 - buffer = kmap_local_page(page); 439 + buffer = kmap_local_folio(folio, 0); 441 440 bytes_read = read_file(FILE_HOSTFS_I(file)->fd, &start, buffer, 442 441 PAGE_SIZE); 443 - if (bytes_read < 0) { 444 - ClearPageUptodate(page); 445 - SetPageError(page); 442 + if (bytes_read < 0) 446 443 ret = bytes_read; 447 - goto out; 448 - } 449 - 450 - memset(buffer + bytes_read, 0, PAGE_SIZE - bytes_read); 451 - 452 - ClearPageError(page); 453 - SetPageUptodate(page); 454 - 455 - out: 456 - flush_dcache_page(page); 444 + else 445 + buffer = folio_zero_tail(folio, bytes_read, buffer); 457 446 kunmap_local(buffer); 458 - unlock_page(page); 459 447 448 + folio_end_read(folio, ret == 0); 460 449 return ret; 461 450 } 462 451
+3 -12
fs/hpfs/namei.c
··· 472 472 473 473 static int hpfs_symlink_read_folio(struct file *file, struct folio *folio) 474 474 { 475 - struct page *page = &folio->page; 476 - char *link = page_address(page); 477 - struct inode *i = page->mapping->host; 475 + char *link = folio_address(folio); 476 + struct inode *i = folio->mapping->host; 478 477 struct fnode *fnode; 479 478 struct buffer_head *bh; 480 479 int err; ··· 484 485 goto fail; 485 486 err = hpfs_read_ea(i->i_sb, fnode, "SYMLINK", link, PAGE_SIZE); 486 487 brelse(bh); 487 - if (err) 488 - goto fail; 489 - hpfs_unlock(i->i_sb); 490 - SetPageUptodate(page); 491 - unlock_page(page); 492 - return 0; 493 - 494 488 fail: 495 489 hpfs_unlock(i->i_sb); 496 - SetPageError(page); 497 - unlock_page(page); 490 + folio_end_read(folio, err == 0); 498 491 return err; 499 492 } 500 493
-8
fs/iomap/buffered-io.c
··· 307 307 spin_unlock_irqrestore(&ifs->state_lock, flags); 308 308 } 309 309 310 - if (error) 311 - folio_set_error(folio); 312 310 if (finished) 313 311 folio_end_read(folio, uptodate); 314 312 } ··· 458 460 459 461 while ((ret = iomap_iter(&iter, ops)) > 0) 460 462 iter.processed = iomap_readpage_iter(&iter, &ctx, 0); 461 - 462 - if (ret < 0) 463 - folio_set_error(folio); 464 463 465 464 if (ctx.bio) { 466 465 submit_bio(ctx.bio); ··· 693 698 694 699 if (folio_test_uptodate(folio)) 695 700 return 0; 696 - folio_clear_error(folio); 697 701 698 702 do { 699 703 iomap_adjust_read_range(iter->inode, folio, &block_start, ··· 1533 1539 1534 1540 /* walk all folios in bio, ending page IO on them */ 1535 1541 bio_for_each_folio_all(fi, bio) { 1536 - if (error) 1537 - folio_set_error(fi.folio); 1538 1542 iomap_finish_folio_write(inode, fi.folio, fi.length); 1539 1543 folio_count++; 1540 1544 }
+8 -9
fs/isofs/rock.c
··· 688 688 */ 689 689 static int rock_ridge_symlink_read_folio(struct file *file, struct folio *folio) 690 690 { 691 - struct page *page = &folio->page; 692 - struct inode *inode = page->mapping->host; 691 + struct inode *inode = folio->mapping->host; 693 692 struct iso_inode_info *ei = ISOFS_I(inode); 694 693 struct isofs_sb_info *sbi = ISOFS_SB(inode->i_sb); 695 - char *link = page_address(page); 694 + char *link = folio_address(folio); 696 695 unsigned long bufsize = ISOFS_BUFFER_SIZE(inode); 697 696 struct buffer_head *bh; 698 697 char *rpnt = link; ··· 778 779 goto fail; 779 780 brelse(bh); 780 781 *rpnt = '\0'; 781 - SetPageUptodate(page); 782 - unlock_page(page); 783 - return 0; 782 + ret = 0; 783 + end: 784 + folio_end_read(folio, ret == 0); 785 + return ret; 784 786 785 787 /* error exit from macro */ 786 788 out: ··· 795 795 fail: 796 796 brelse(bh); 797 797 error: 798 - SetPageError(page); 799 - unlock_page(page); 800 - return -EIO; 798 + ret = -EIO; 799 + goto end; 801 800 } 802 801 803 802 const struct address_space_operations isofs_symlink_aops = {
+3 -11
fs/jffs2/file.c
··· 95 95 ret = jffs2_read_inode_range(c, f, pg_buf, pg->index << PAGE_SHIFT, 96 96 PAGE_SIZE); 97 97 98 - if (ret) { 99 - ClearPageUptodate(pg); 100 - SetPageError(pg); 101 - } else { 98 + if (!ret) 102 99 SetPageUptodate(pg); 103 - ClearPageError(pg); 104 - } 105 100 106 101 flush_dcache_page(pg); 107 102 kunmap(pg); ··· 299 304 300 305 kunmap(pg); 301 306 302 - if (ret) { 303 - /* There was an error writing. */ 304 - SetPageError(pg); 305 - } 307 + if (ret) 308 + mapping_set_error(mapping, ret); 306 309 307 310 /* Adjust writtenlen for the padding we did, so we don't confuse our caller */ 308 311 writtenlen -= min(writtenlen, (start - aligned_start)); ··· 323 330 it gets reread */ 324 331 jffs2_dbg(1, "%s(): Not all bytes written. Marking page !uptodate\n", 325 332 __func__); 326 - SetPageError(pg); 327 333 ClearPageUptodate(pg); 328 334 } 329 335
+3 -10
fs/mpage.c
··· 48 48 struct folio_iter fi; 49 49 int err = blk_status_to_errno(bio->bi_status); 50 50 51 - bio_for_each_folio_all(fi, bio) { 52 - if (err) 53 - folio_set_error(fi.folio); 54 - else 55 - folio_mark_uptodate(fi.folio); 56 - folio_unlock(fi.folio); 57 - } 51 + bio_for_each_folio_all(fi, bio) 52 + folio_end_read(fi.folio, err == 0); 58 53 59 54 bio_put(bio); 60 55 } ··· 60 65 int err = blk_status_to_errno(bio->bi_status); 61 66 62 67 bio_for_each_folio_all(fi, bio) { 63 - if (err) { 64 - folio_set_error(fi.folio); 68 + if (err) 65 69 mapping_set_error(fi.folio->mapping, err); 66 - } 67 70 folio_end_writeback(fi.folio); 68 71 } 69 72
-2
fs/nfs/read.c
··· 122 122 { 123 123 struct folio *folio = nfs_page_to_folio(req); 124 124 125 - if (nfs_error_is_fatal_on_server(error) && error != -ETIMEDOUT) 126 - folio_set_error(folio); 127 125 if (nfs_page_group_sync_on_bit(req, PG_UNLOCKPAGE)) 128 126 if (nfs_netfs_folio_unlock(folio)) 129 127 folio_unlock(folio);
+1 -9
fs/nfs/symlink.c
··· 32 32 int error; 33 33 34 34 error = NFS_PROTO(inode)->readlink(inode, &folio->page, 0, PAGE_SIZE); 35 - if (error < 0) 36 - goto error; 37 - folio_mark_uptodate(folio); 38 - folio_unlock(folio); 39 - return 0; 40 - 41 - error: 42 - folio_set_error(folio); 43 - folio_unlock(folio); 35 + folio_end_read(folio, error == 0); 44 36 return error; 45 37 } 46 38
-1
fs/nfs/write.c
··· 311 311 { 312 312 struct address_space *mapping = folio_file_mapping(folio); 313 313 314 - folio_set_error(folio); 315 314 filemap_set_wb_err(mapping, error); 316 315 if (mapping->host) 317 316 errseq_set(&mapping->host->i_sb->s_wb_err,
+3 -10
fs/orangefs/inode.c
··· 56 56 ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, wlen, 57 57 len, wr, NULL, NULL); 58 58 if (ret < 0) { 59 - SetPageError(page); 60 59 mapping_set_error(page->mapping, ret); 61 60 } else { 62 61 ret = 0; ··· 118 119 0, &wr, NULL, NULL); 119 120 if (ret < 0) { 120 121 for (i = 0; i < ow->npages; i++) { 121 - SetPageError(ow->pages[i]); 122 122 mapping_set_error(ow->pages[i]->mapping, ret); 123 123 if (PagePrivate(ow->pages[i])) { 124 124 wrp = (struct orangefs_write_range *) ··· 301 303 iov_iter_zero(~0U, &iter); 302 304 /* takes care of potential aliasing */ 303 305 flush_dcache_folio(folio); 304 - if (ret < 0) { 305 - folio_set_error(folio); 306 - } else { 307 - folio_mark_uptodate(folio); 306 + if (ret > 0) 308 307 ret = 0; 309 - } 310 - /* unlock the folio after the ->read_folio() routine completes */ 311 - folio_unlock(folio); 312 - return ret; 308 + folio_end_read(folio, ret == 0); 309 + return ret; 313 310 } 314 311 315 312 static int orangefs_write_begin(struct file *file,
+1 -3
fs/orangefs/orangefs-bufmap.c
··· 274 274 gossip_err("orangefs error: asked for %d pages, only got %d.\n", 275 275 bufmap->page_count, ret); 276 276 277 - for (i = 0; i < ret; i++) { 278 - SetPageError(bufmap->page_array[i]); 277 + for (i = 0; i < ret; i++) 279 278 unpin_user_page(bufmap->page_array[i]); 280 - } 281 279 return -ENOMEM; 282 280 } 283 281
-1
fs/reiserfs/inode.c
··· 2699 2699 } 2700 2700 bh = bh->b_this_page; 2701 2701 } while (bh != head); 2702 - folio_set_error(folio); 2703 2702 BUG_ON(folio_test_writeback(folio)); 2704 2703 folio_start_writeback(folio); 2705 2704 folio_unlock(folio);
+6 -16
fs/romfs/super.c
··· 101 101 */ 102 102 static int romfs_read_folio(struct file *file, struct folio *folio) 103 103 { 104 - struct page *page = &folio->page; 105 - struct inode *inode = page->mapping->host; 104 + struct inode *inode = folio->mapping->host; 106 105 loff_t offset, size; 107 106 unsigned long fillsize, pos; 108 107 void *buf; 109 108 int ret; 110 109 111 - buf = kmap(page); 112 - if (!buf) 113 - return -ENOMEM; 110 + buf = kmap_local_folio(folio, 0); 114 111 115 - /* 32 bit warning -- but not for us :) */ 116 - offset = page_offset(page); 112 + offset = folio_pos(folio); 117 113 size = i_size_read(inode); 118 114 fillsize = 0; 119 115 ret = 0; ··· 121 125 122 126 ret = romfs_dev_read(inode->i_sb, pos, buf, fillsize); 123 127 if (ret < 0) { 124 - SetPageError(page); 125 128 fillsize = 0; 126 129 ret = -EIO; 127 130 } 128 131 } 129 132 130 - if (fillsize < PAGE_SIZE) 131 - memset(buf + fillsize, 0, PAGE_SIZE - fillsize); 132 - if (ret == 0) 133 - SetPageUptodate(page); 134 - 135 - flush_dcache_page(page); 136 - kunmap(page); 137 - unlock_page(page); 133 + buf = folio_zero_tail(folio, fillsize, buf); 134 + kunmap_local(buf); 135 + folio_end_read(folio, ret == 0); 138 136 return ret; 139 137 } 140 138
-1
fs/ufs/dir.c
··· 188 188 "offset=%lu", 189 189 dir->i_ino, (page->index<<PAGE_SHIFT)+offs); 190 190 fail: 191 - SetPageError(page); 192 191 return false; 193 192 } 194 193
+5 -13
fs/vboxsf/file.c
··· 228 228 229 229 static int vboxsf_read_folio(struct file *file, struct folio *folio) 230 230 { 231 - struct page *page = &folio->page; 232 231 struct vboxsf_handle *sf_handle = file->private_data; 233 - loff_t off = page_offset(page); 232 + loff_t off = folio_pos(folio); 234 233 u32 nread = PAGE_SIZE; 235 234 u8 *buf; 236 235 int err; 237 236 238 - buf = kmap(page); 237 + buf = kmap_local_folio(folio, 0); 239 238 240 239 err = vboxsf_read(sf_handle->root, sf_handle->handle, off, &nread, buf); 241 - if (err == 0) { 242 - memset(&buf[nread], 0, PAGE_SIZE - nread); 243 - flush_dcache_page(page); 244 - SetPageUptodate(page); 245 - } else { 246 - SetPageError(page); 247 - } 240 + buf = folio_zero_tail(folio, nread, buf + nread); 248 241 249 - kunmap(page); 250 - unlock_page(page); 242 + kunmap_local(buf); 243 + folio_end_read(folio, err == 0); 251 244 return err; 252 245 } 253 246 ··· 288 295 kref_put(&sf_handle->refcount, vboxsf_handle_release); 289 296 290 297 if (err == 0) { 291 - ClearPageError(page); 292 298 /* mtime changed */ 293 299 sf_i->force_restat = 1; 294 300 } else {