From: Weston Andros Adamson <dros@primarydata.com>
To: trond.myklebust@primarydata.com
Cc: linux-nfs@vger.kernel.org, Weston Andros Adamson <dros@primarydata.com>
Subject: [PATCH v3 10/18] pnfs: clean up filelayout_alloc_commit_info
Date: Thu, 15 May 2014 11:56:49 -0400 [thread overview]
Message-ID: <1400169417-28245-11-git-send-email-dros@primarydata.com> (raw)
In-Reply-To: <1400169417-28245-1-git-send-email-dros@primarydata.com>
Remove unneeded else statement and clean up how commit info
dataserver buckets are replaced.
Suggested-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
---
fs/nfs/nfs4filelayout.c | 46 ++++++++++++++++++++++++++--------------------
1 file changed, 26 insertions(+), 20 deletions(-)
diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c
index 9319427..9cea935 100644
--- a/fs/nfs/nfs4filelayout.c
+++ b/fs/nfs/nfs4filelayout.c
@@ -850,11 +850,15 @@ filelayout_alloc_commit_info(struct pnfs_layout_segment *lseg,
{
struct nfs4_filelayout_segment *fl = FILELAYOUT_LSEG(lseg);
struct pnfs_commit_bucket *buckets;
- int size;
+ int size, i;
if (fl->commit_through_mds)
return 0;
- if (cinfo->ds->nbuckets != 0) {
+
+ size = (fl->stripe_type == STRIPE_SPARSE) ?
+ fl->dsaddr->ds_num : fl->dsaddr->stripe_count;
+
+ if (cinfo->ds->nbuckets >= size) {
/* This assumes there is only one IOMODE_RW lseg. What
* we really want to do is have a layout_hdr level
* dictionary of <multipath_list4, fh> keys, each
@@ -864,30 +868,32 @@ filelayout_alloc_commit_info(struct pnfs_layout_segment *lseg,
return 0;
}
- size = (fl->stripe_type == STRIPE_SPARSE) ?
- fl->dsaddr->ds_num : fl->dsaddr->stripe_count;
-
buckets = kcalloc(size, sizeof(struct pnfs_commit_bucket),
gfp_flags);
if (!buckets)
return -ENOMEM;
- else {
- int i;
+ for (i = 0; i < size; i++) {
+ INIT_LIST_HEAD(&buckets[i].written);
+ INIT_LIST_HEAD(&buckets[i].committing);
+ }
- spin_lock(cinfo->lock);
- if (cinfo->ds->nbuckets != 0)
- kfree(buckets);
- else {
- cinfo->ds->buckets = buckets;
- cinfo->ds->nbuckets = size;
- for (i = 0; i < size; i++) {
- INIT_LIST_HEAD(&buckets[i].written);
- INIT_LIST_HEAD(&buckets[i].committing);
- }
- }
- spin_unlock(cinfo->lock);
- return 0;
+ spin_lock(cinfo->lock);
+ if (cinfo->ds->nbuckets >= size)
+ goto out;
+ for (i = 0; i < cinfo->ds->nbuckets; i++) {
+ list_splice(&cinfo->ds->buckets[i].written,
+ &buckets[i].written);
+ list_splice(&cinfo->ds->buckets[i].committing,
+ &buckets[i].committing);
+ buckets[i].wlseg = cinfo->ds->buckets[i].wlseg;
+ buckets[i].clseg = cinfo->ds->buckets[i].clseg;
}
+ swap(cinfo->ds->buckets, buckets);
+ cinfo->ds->nbuckets = size;
+out:
+ spin_unlock(cinfo->lock);
+ kfree(buckets);
+ return 0;
}
static struct pnfs_layout_segment *
--
1.8.5.2 (Apple Git-48)
next prev parent reply other threads:[~2014-05-15 15:57 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-15 15:56 [PATCH v3 00/18] nfs: support multiple requests per page Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 01/18] pnfs: fix race in filelayout commit path Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 02/18] nfs: clean up PG_* flags Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 03/18] nfs: remove unused arg from nfs_create_request Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 04/18] nfs: modify pg_test interface to return size_t Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 05/18] nfs: call nfs_can_coalesce_requests for every req Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 06/18] nfs: add support for multiple nfs reqs per page Weston Andros Adamson
2014-05-15 21:12 ` Anna Schumaker
2014-05-15 22:19 ` Weston Andros Adamson
2014-05-16 12:58 ` Anna Schumaker
2014-05-15 15:56 ` [PATCH v3 07/18] nfs: page group syncing in read path Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 08/18] nfs: page group syncing in write path Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 09/18] nfs: page group support in nfs_mark_uptodate Weston Andros Adamson
2014-05-15 15:56 ` Weston Andros Adamson [this message]
2014-05-15 15:56 ` [PATCH v3 11/18] nfs: allow coalescing of subpage requests Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 12/18] nfs: chain calls to pg_test Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 13/18] nfs: use > 1 request to handle bsize < PAGE_SIZE Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 14/18] nfs: remove data list from pgio header Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 15/18] pnfs: support multiple verfs per direct req Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 16/18] pnfs: allow non page aligned pnfs layout segments Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 17/18] pnfs: filelayout: support non page aligned layouts Weston Andros Adamson
2014-05-15 15:56 ` [PATCH v3 18/18] nfs: support page groups in nfs_read_completion Weston Andros Adamson
2014-05-19 15:37 ` [PATCH v3 00/18] nfs: support multiple requests per page Christoph Hellwig
2014-05-19 16:20 ` Weston Andros Adamson
2014-05-28 23:23 ` Trond Myklebust
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1400169417-28245-11-git-send-email-dros@primarydata.com \
--to=dros@primarydata.com \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@primarydata.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).