Loading fs/nfs/pnfs_nfs.c +40 −12 Original line number Diff line number Diff line Loading @@ -118,8 +118,12 @@ pnfs_free_commit_array(struct pnfs_commit_array *p) } EXPORT_SYMBOL_GPL(pnfs_free_commit_array); /* * Locks the nfs_page requests for commit and moves them to * @bucket->committing. */ static int pnfs_generic_scan_ds_commit_list(struct pnfs_commit_bucket *bucket, pnfs_bucket_scan_ds_commit_list(struct pnfs_commit_bucket *bucket, struct nfs_commit_info *cinfo, int max) { Loading @@ -142,20 +146,44 @@ pnfs_generic_scan_ds_commit_list(struct pnfs_commit_bucket *bucket, return ret; } static int pnfs_bucket_scan_array(struct nfs_commit_info *cinfo, struct pnfs_commit_bucket *buckets, unsigned int nbuckets, int max) { unsigned int i; int rv = 0, cnt; for (i = 0; i < nbuckets && max != 0; i++) { cnt = pnfs_bucket_scan_ds_commit_list(&buckets[i], cinfo, max); rv += cnt; max -= cnt; } return rv; } /* Move reqs from written to committing lists, returning count * of number moved. */ int pnfs_generic_scan_commit_lists(struct nfs_commit_info *cinfo, int max) int pnfs_generic_scan_commit_lists(struct nfs_commit_info *cinfo, int max) { int i, rv = 0, cnt; struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds; struct pnfs_commit_array *array; int rv = 0, cnt; lockdep_assert_held(&NFS_I(cinfo->inode)->commit_mutex); for (i = 0; i < cinfo->ds->nbuckets && max != 0; i++) { cnt = pnfs_generic_scan_ds_commit_list(&cinfo->ds->buckets[i], cinfo, max); cnt = pnfs_bucket_scan_array(cinfo, fl_cinfo->buckets, fl_cinfo->nbuckets, max); rv += cnt; max -= cnt; if (!max) return rv; list_for_each_entry(array, &fl_cinfo->commits, cinfo_list) { cnt = pnfs_bucket_scan_array(cinfo, array->buckets, array->nbuckets, max); rv += cnt; max -= cnt; if (!max) break; } return rv; } Loading Loading
fs/nfs/pnfs_nfs.c +40 −12 Original line number Diff line number Diff line Loading @@ -118,8 +118,12 @@ pnfs_free_commit_array(struct pnfs_commit_array *p) } EXPORT_SYMBOL_GPL(pnfs_free_commit_array); /* * Locks the nfs_page requests for commit and moves them to * @bucket->committing. */ static int pnfs_generic_scan_ds_commit_list(struct pnfs_commit_bucket *bucket, pnfs_bucket_scan_ds_commit_list(struct pnfs_commit_bucket *bucket, struct nfs_commit_info *cinfo, int max) { Loading @@ -142,20 +146,44 @@ pnfs_generic_scan_ds_commit_list(struct pnfs_commit_bucket *bucket, return ret; } static int pnfs_bucket_scan_array(struct nfs_commit_info *cinfo, struct pnfs_commit_bucket *buckets, unsigned int nbuckets, int max) { unsigned int i; int rv = 0, cnt; for (i = 0; i < nbuckets && max != 0; i++) { cnt = pnfs_bucket_scan_ds_commit_list(&buckets[i], cinfo, max); rv += cnt; max -= cnt; } return rv; } /* Move reqs from written to committing lists, returning count * of number moved. */ int pnfs_generic_scan_commit_lists(struct nfs_commit_info *cinfo, int max) int pnfs_generic_scan_commit_lists(struct nfs_commit_info *cinfo, int max) { int i, rv = 0, cnt; struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds; struct pnfs_commit_array *array; int rv = 0, cnt; lockdep_assert_held(&NFS_I(cinfo->inode)->commit_mutex); for (i = 0; i < cinfo->ds->nbuckets && max != 0; i++) { cnt = pnfs_generic_scan_ds_commit_list(&cinfo->ds->buckets[i], cinfo, max); cnt = pnfs_bucket_scan_array(cinfo, fl_cinfo->buckets, fl_cinfo->nbuckets, max); rv += cnt; max -= cnt; if (!max) return rv; list_for_each_entry(array, &fl_cinfo->commits, cinfo_list) { cnt = pnfs_bucket_scan_array(cinfo, array->buckets, array->nbuckets, max); rv += cnt; max -= cnt; if (!max) break; } return rv; } Loading