Loading fs/orangefs/inode.c +16 −17 Original line number Diff line number Diff line Loading @@ -288,40 +288,39 @@ static void orangefs_readahead(struct readahead_control *rac) } } static int orangefs_readpage(struct file *file, struct page *page) static int orangefs_read_folio(struct file *file, struct folio *folio) { struct folio *folio = page_folio(page); struct inode *inode = page->mapping->host; struct inode *inode = folio->mapping->host; struct iov_iter iter; struct bio_vec bv; ssize_t ret; loff_t off; /* offset into this page */ loff_t off; /* offset of this folio in the file */ if (folio_test_dirty(folio)) orangefs_launder_folio(folio); off = page_offset(page); bv.bv_page = page; bv.bv_len = PAGE_SIZE; off = folio_pos(folio); bv.bv_page = &folio->page; bv.bv_len = folio_size(folio); bv.bv_offset = 0; iov_iter_bvec(&iter, READ, &bv, 1, PAGE_SIZE); iov_iter_bvec(&iter, READ, &bv, 1, folio_size(folio)); ret = wait_for_direct_io(ORANGEFS_IO_READ, inode, &off, &iter, PAGE_SIZE, inode->i_size, NULL, NULL, file); folio_size(folio), inode->i_size, NULL, NULL, file); /* this will only zero remaining unread portions of the page data */ iov_iter_zero(~0U, &iter); /* takes care of potential aliasing */ flush_dcache_page(page); flush_dcache_folio(folio); if (ret < 0) { SetPageError(page); folio_set_error(folio); } else { SetPageUptodate(page); if (PageError(page)) ClearPageError(page); folio_mark_uptodate(folio); if (folio_test_error(folio)) folio_clear_error(folio); ret = 0; } /* unlock the page after the ->readpage() routine completes */ unlock_page(page); /* unlock the folio after the ->read_folio() routine completes */ folio_unlock(folio); return ret; } Loading Loading @@ -631,7 +630,7 @@ static ssize_t orangefs_direct_IO(struct kiocb *iocb, static const struct address_space_operations orangefs_address_operations = { .writepage = orangefs_writepage, .readahead = orangefs_readahead, .readpage = orangefs_readpage, .read_folio = orangefs_read_folio, .writepages = orangefs_writepages, .dirty_folio = filemap_dirty_folio, .write_begin = orangefs_write_begin, Loading Loading
fs/orangefs/inode.c +16 −17 Original line number Diff line number Diff line Loading @@ -288,40 +288,39 @@ static void orangefs_readahead(struct readahead_control *rac) } } static int orangefs_readpage(struct file *file, struct page *page) static int orangefs_read_folio(struct file *file, struct folio *folio) { struct folio *folio = page_folio(page); struct inode *inode = page->mapping->host; struct inode *inode = folio->mapping->host; struct iov_iter iter; struct bio_vec bv; ssize_t ret; loff_t off; /* offset into this page */ loff_t off; /* offset of this folio in the file */ if (folio_test_dirty(folio)) orangefs_launder_folio(folio); off = page_offset(page); bv.bv_page = page; bv.bv_len = PAGE_SIZE; off = folio_pos(folio); bv.bv_page = &folio->page; bv.bv_len = folio_size(folio); bv.bv_offset = 0; iov_iter_bvec(&iter, READ, &bv, 1, PAGE_SIZE); iov_iter_bvec(&iter, READ, &bv, 1, folio_size(folio)); ret = wait_for_direct_io(ORANGEFS_IO_READ, inode, &off, &iter, PAGE_SIZE, inode->i_size, NULL, NULL, file); folio_size(folio), inode->i_size, NULL, NULL, file); /* this will only zero remaining unread portions of the page data */ iov_iter_zero(~0U, &iter); /* takes care of potential aliasing */ flush_dcache_page(page); flush_dcache_folio(folio); if (ret < 0) { SetPageError(page); folio_set_error(folio); } else { SetPageUptodate(page); if (PageError(page)) ClearPageError(page); folio_mark_uptodate(folio); if (folio_test_error(folio)) folio_clear_error(folio); ret = 0; } /* unlock the page after the ->readpage() routine completes */ unlock_page(page); /* unlock the folio after the ->read_folio() routine completes */ folio_unlock(folio); return ret; } Loading Loading @@ -631,7 +630,7 @@ static ssize_t orangefs_direct_IO(struct kiocb *iocb, static const struct address_space_operations orangefs_address_operations = { .writepage = orangefs_writepage, .readahead = orangefs_readahead, .readpage = orangefs_readpage, .read_folio = orangefs_read_folio, .writepages = orangefs_writepages, .dirty_folio = filemap_dirty_folio, .write_begin = orangefs_write_begin, Loading