NFS: Add a helper to convert a struct nfs_page into an inode
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Thu, 19 Jan 2023 21:33:38 +0000 (16:33 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Tue, 14 Feb 2023 19:22:32 +0000 (14:22 -0500)
Replace all the open coded calls to page_file_mapping(req->wb_page)->host.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/pagelist.c
fs/nfs/write.c
include/linux/nfs_page.h

index 16c146ca7ffc67e2633ddc9542f970e280e5a0e2..4bdb570184f78e3a8b877199ce1b404d00aca5bd 100644 (file)
@@ -426,7 +426,7 @@ nfs_page_group_init(struct nfs_page *req, struct nfs_page *prev)
                 * has extra ref from the write/commit path to handle handoff
                 * between write and commit lists. */
                if (test_bit(PG_INODE_REF, &prev->wb_head->wb_flags)) {
-                       inode = page_file_mapping(req->wb_page)->host;
+                       inode = nfs_page_to_inode(req);
                        set_bit(PG_INODE_REF, &req->wb_flags);
                        kref_get(&req->wb_kref);
                        atomic_long_inc(&NFS_I(inode)->nrequests);
index 80c240e50952217df66bda308787f02bd1eada15..1cbb92824791956258b6009121a5cf52e313e277 100644 (file)
@@ -421,7 +421,7 @@ static void nfs_set_page_writeback(struct page *page)
 
 static void nfs_end_page_writeback(struct nfs_page *req)
 {
-       struct inode *inode = page_file_mapping(req->wb_page)->host;
+       struct inode *inode = nfs_page_to_inode(req);
        struct nfs_server *nfss = NFS_SERVER(inode);
        bool is_done;
 
@@ -592,8 +592,7 @@ nfs_lock_and_join_requests(struct page *page)
 
 static void nfs_write_error(struct nfs_page *req, int error)
 {
-       trace_nfs_write_error(page_file_mapping(req->wb_page)->host, req,
-                             error);
+       trace_nfs_write_error(nfs_page_to_inode(req), req, error);
        nfs_mapping_set_error(req->wb_page, error);
        nfs_inode_remove_request(req);
        nfs_end_page_writeback(req);
@@ -1420,7 +1419,7 @@ static void nfs_initiate_write(struct nfs_pgio_header *hdr,
  */
 static void nfs_redirty_request(struct nfs_page *req)
 {
-       struct nfs_inode *nfsi = NFS_I(page_file_mapping(req->wb_page)->host);
+       struct nfs_inode *nfsi = NFS_I(nfs_page_to_inode(req));
 
        /* Bump the transmission count */
        req->wb_nio++;
index 192071a6e5f6547f840ca8a37252390e900df6f3..b0b03ec4a209ee11aa42e8bcf28a864b8ef9e47b 100644 (file)
@@ -189,6 +189,19 @@ static inline struct page *nfs_page_to_page(const struct nfs_page *req,
        return folio_page(folio, pgbase >> PAGE_SHIFT);
 }
 
+/**
+ * nfs_page_to_inode - Retrieve an inode for the request
+ * @req: pointer to a struct nfs_page
+ */
+static inline struct inode *nfs_page_to_inode(const struct nfs_page *req)
+{
+       struct folio *folio = nfs_page_to_folio(req);
+
+       if (folio == NULL)
+               return page_file_mapping(req->wb_page)->host;
+       return folio_file_mapping(folio)->host;
+}
+
 /**
  * nfs_page_max_length - Retrieve the maximum possible length for a request
  * @req: pointer to a struct nfs_page