On Tue, 2023-07-25 at 11:08 -0400, Scott Mayhew wrote: > Once a folio's private data has been cleared, it's possible for another > process to clear the folio->mapping (e.g. via invalidate_complete_folio2 > or evict_mapping_folio), so it wouldn't be safe to call > nfs_page_to_inode() after that. > > Fixes: 0c493b5cf16e ("NFS: Convert buffered writes to use folios") > Signed-off-by: Scott Mayhew <smayhew@xxxxxxxxxx> > --- > fs/nfs/write.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/fs/nfs/write.c b/fs/nfs/write.c > index f4cca8f00c0c..489c3f9dae23 100644 > --- a/fs/nfs/write.c > +++ b/fs/nfs/write.c > @@ -785,6 +785,8 @@ static void nfs_inode_add_request(struct nfs_page *req) > */ > static void nfs_inode_remove_request(struct nfs_page *req) > { > + struct nfs_inode *nfsi = NFS_I(nfs_page_to_inode(req)); > + > if (nfs_page_group_sync_on_bit(req, PG_REMOVE)) { > struct folio *folio = nfs_page_to_folio(req->wb_head); > struct address_space *mapping = folio_file_mapping(folio); > @@ -800,7 +802,7 @@ static void nfs_inode_remove_request(struct nfs_page *req) > > if (test_and_clear_bit(PG_INODE_REF, &req->wb_flags)) { > nfs_release_request(req); > - atomic_long_dec(&NFS_I(nfs_page_to_inode(req))->nrequests); > + atomic_long_dec(&nfsi->nrequests); > } > } > Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>