NFS: Fix the marking of the folio as up to date
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Thu, 4 Sep 2025 00:11:03 +0000 (20:11 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sat, 6 Sep 2025 20:51:26 +0000 (16:51 -0400)
Since all callers of nfs_page_group_covers_page() have already ensured
that there is only one group member, all that is required is to check
that the entire folio contains dirty data.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/write.c

index e359fbcdc8a095f6470f2324a710df1e2f1c9175..647c53d1418ae674dd3cca426d7eb6ee33238b53 100644 (file)
@@ -237,59 +237,17 @@ static void nfs_mapping_set_error(struct folio *folio, int error)
 }
 
 /*
- * nfs_page_group_search_locked
- * @head - head request of page group
- * @page_offset - offset into page
+ * nfs_page_covers_folio
+ * @req: struct nfs_page
  *
- * Search page group with head @head to find a request that contains the
- * page offset @page_offset.
- *
- * Returns a pointer to the first matching nfs request, or NULL if no
- * match is found.
- *
- * Must be called with the page group lock held
- */
-static struct nfs_page *
-nfs_page_group_search_locked(struct nfs_page *head, unsigned int page_offset)
-{
-       struct nfs_page *req;
-
-       req = head;
-       do {
-               if (page_offset >= req->wb_pgbase &&
-                   page_offset < (req->wb_pgbase + req->wb_bytes))
-                       return req;
-
-               req = req->wb_this_page;
-       } while (req != head);
-
-       return NULL;
-}
-
-/*
- * nfs_page_group_covers_page
- * @head - head request of page group
- *
- * Return true if the page group with head @head covers the whole page,
- * returns false otherwise
+ * Return true if the request covers the whole folio.
+ * Note that the caller should ensure all subrequests have been joined
  */
 static bool nfs_page_group_covers_page(struct nfs_page *req)
 {
        unsigned int len = nfs_folio_length(nfs_page_to_folio(req));
-       struct nfs_page *tmp;
-       unsigned int pos = 0;
-
-       nfs_page_group_lock(req);
 
-       for (;;) {
-               tmp = nfs_page_group_search_locked(req->wb_head, pos);
-               if (!tmp)
-                       break;
-               pos = tmp->wb_pgbase + tmp->wb_bytes;
-       }
-
-       nfs_page_group_unlock(req);
-       return pos >= len;
+       return req->wb_pgbase == 0 && req->wb_bytes == len;
 }
 
 /* We can set the PG_uptodate flag if we see that a write request