diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index 14d3d28e41b0..5e09d4c86260 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -334,6 +334,7 @@ static ssize_t hugetlbfs_read_iter(struct kiocb *iocb, struct iov_iter *to) ssize_t retval = 0; while (iov_iter_count(to)) { + struct folio *folio; struct page *page; size_t nr, copied, want; @@ -353,17 +354,17 @@ static ssize_t hugetlbfs_read_iter(struct kiocb *iocb, struct iov_iter *to) nr = nr - offset; /* Find the page */ - page = find_lock_page(mapping, index); - if (unlikely(page == NULL)) { + folio = filemap_lock_hugetlb_folio(h, mapping, index); + if (unlikely(folio == NULL)) { /* * We have a HOLE, zero out the user-buffer for the * length of the hole or request. */ copied = iov_iter_zero(nr, to); } else { - unlock_page(page); + folio_unlock(folio); - if (!PageHWPoison(page)) + if (!folio_test_has_hwpoisoned(folio)) want = nr; else { /* @@ -371,9 +372,9 @@ static ssize_t hugetlbfs_read_iter(struct kiocb *iocb, struct iov_iter *to) * touching the 1st raw HWPOISON subpage after * offset. */ - want = adjust_range_hwpoison(page, offset, nr); + want = adjust_range_hwpoison(&folio->page, offset, nr); if (want == 0) { - put_page(page); + folio_put(folio); retval = -EIO; break; } @@ -382,8 +383,8 @@ static ssize_t hugetlbfs_read_iter(struct kiocb *iocb, struct iov_iter *to) /* * We have the page, copy it to user space buffer. */ - copied = copy_page_to_iter(page, offset, want, to); - put_page(page); + copied = copy_page_to_iter(&folio->page, offset, want, to); + folio_put(folio); } offset += copied; retval += copied;