pNFS: Support per-layout segment commits in pnfs_generic_commit_pagelist()
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Thu, 19 Mar 2020 23:31:00 +0000 (19:31 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Fri, 27 Mar 2020 20:34:34 +0000 (16:34 -0400)
Add support for scanning the full list of per-layout segment commit
arrays to pnfs_generic_commit_pagelist().

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

index f16bd6d..f895a28 100644 (file)
@@ -322,6 +322,20 @@ out_error:
        return nreq;
 }
 
+static unsigned int
+pnfs_alloc_ds_commits_list(struct list_head *list,
+                          struct pnfs_ds_commit_info *fl_cinfo,
+                          struct nfs_commit_info *cinfo)
+{
+       struct pnfs_commit_array *array;
+       unsigned int ret = 0;
+
+       list_for_each_entry(array, &fl_cinfo->commits, cinfo_list)
+               ret += pnfs_bucket_alloc_ds_commits(list, array->buckets,
+                               array->nbuckets, cinfo);
+       return ret;
+}
+
 /* This follows nfs_commit_list pretty closely */
 int
 pnfs_generic_commit_pagelist(struct inode *inode, struct list_head *mds_pages,
@@ -345,6 +359,8 @@ pnfs_generic_commit_pagelist(struct inode *inode, struct list_head *mds_pages,
 
        nreq += pnfs_bucket_alloc_ds_commits(&list, fl_cinfo->buckets,
                        fl_cinfo->nbuckets, cinfo);
+
+       nreq += pnfs_alloc_ds_commits_list(&list, fl_cinfo, cinfo);
        if (nreq == 0)
                goto out;