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 14/18 v2] nfs: remove list of [rw]data from pgio header
Date: Thu, 24 Apr 2014 14:15:24 -0400 [thread overview]
Message-ID: <1398363328-7100-15-git-send-email-dros@primarydata.com> (raw)
In-Reply-To: <1398363328-7100-1-git-send-email-dros@primarydata.com>
Since the ability to split pages into subpage requests has been added,
nfs_pgio_header->rpc_list only ever has one wdata/rdata.
Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
---
fs/nfs/pageio.c | 35 ++++-------------------------------
fs/nfs/pnfs.c | 41 +++++++++++++++--------------------------
include/linux/nfs_xdr.h | 4 +++-
3 files changed, 22 insertions(+), 58 deletions(-)
diff --git a/fs/nfs/pageio.c b/fs/nfs/pageio.c
index 1899977..f578cc9 100644
--- a/fs/nfs/pageio.c
+++ b/fs/nfs/pageio.c
@@ -29,7 +29,6 @@ struct nfs_rw_header *nfs_rw_header_alloc(const struct nfs_rw_ops *ops)
struct nfs_pgio_header *hdr = &header->header;
INIT_LIST_HEAD(&hdr->pages);
- INIT_LIST_HEAD(&hdr->rpc_list);
spin_lock_init(&hdr->lock);
atomic_set(&hdr->refcnt, 0);
hdr->rw_ops = ops;
@@ -182,37 +181,12 @@ static int nfs_do_pgio(struct nfs_pgio_data *data,
return nfs_initiate_pgio(NFS_CLIENT(inode), data, call_ops, how, 0);
}
-int nfs_do_multiple_pgios(struct list_head *head,
- const struct rpc_call_ops *call_ops,
- int how)
-{
- struct nfs_pgio_data *data;
- int ret = 0;
-
- while (!list_empty(head)) {
- int ret2;
-
- data = list_first_entry(head, struct nfs_pgio_data, list);
- list_del_init(&data->list);
-
- ret2 = nfs_do_pgio(data, call_ops, how);
- if (ret == 0)
- ret = ret2;
- }
- return ret;
-}
-
static int nfs_pgio_error(struct nfs_pageio_descriptor *desc,
struct nfs_pgio_header *hdr)
{
- struct nfs_pgio_data *data;
-
set_bit(NFS_IOHDR_REDO, &hdr->flags);
- while (!list_empty(&hdr->rpc_list)) {
- data = list_first_entry(&hdr->rpc_list, struct nfs_pgio_data, list);
- list_del(&data->list);
- nfs_pgio_data_release(data);
- }
+ nfs_pgio_data_release(hdr->data);
+ hdr->data = NULL;
desc->pg_completion_ops->error_cleanup(&desc->pg_list);
return -ENOMEM;
}
@@ -254,7 +228,7 @@ int nfs_generic_pgio(struct nfs_pageio_descriptor *desc,
/* Set up the argument struct */
nfs_pgio_rpcsetup(data, desc->pg_count, 0, desc->pg_ioflags, &cinfo);
- list_add(&data->list, &hdr->rpc_list);
+ hdr->data = data;
desc->pg_rpc_callops = &nfs_pgio_common_ops;
return 0;
}
@@ -276,8 +250,7 @@ static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc)
atomic_inc(&hdr->refcnt);
ret = nfs_generic_pgio(desc, hdr);
if (ret == 0)
- ret = nfs_do_multiple_pgios(&hdr->rpc_list,
- desc->pg_rpc_callops, 0);
+ ret = nfs_do_pgio(hdr->data, desc->pg_rpc_callops, 0);
if (atomic_dec_and_test(&hdr->refcnt))
hdr->completion_ops->completion(hdr);
return ret;
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 354c53c..6ef108b 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -1573,23 +1573,18 @@ pnfs_try_to_write_data(struct nfs_pgio_data *wdata,
}
static void
-pnfs_do_multiple_writes(struct nfs_pageio_descriptor *desc, struct list_head *head, int how)
+pnfs_do_write(struct nfs_pageio_descriptor *desc,
+ struct nfs_pgio_header *hdr, int how)
{
- struct nfs_pgio_data *data;
+ struct nfs_pgio_data *data = hdr->data;
const struct rpc_call_ops *call_ops = desc->pg_rpc_callops;
struct pnfs_layout_segment *lseg = desc->pg_lseg;
+ enum pnfs_try_status trypnfs;
desc->pg_lseg = NULL;
- while (!list_empty(head)) {
- enum pnfs_try_status trypnfs;
-
- data = list_first_entry(head, struct nfs_pgio_data, list);
- list_del_init(&data->list);
-
- trypnfs = pnfs_try_to_write_data(data, call_ops, lseg, how);
- if (trypnfs == PNFS_NOT_ATTEMPTED)
- pnfs_write_through_mds(desc, data);
- }
+ trypnfs = pnfs_try_to_write_data(data, call_ops, lseg, how);
+ if (trypnfs == PNFS_NOT_ATTEMPTED)
+ pnfs_write_through_mds(desc, data);
pnfs_put_lseg(lseg);
}
@@ -1623,7 +1618,7 @@ pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc)
pnfs_put_lseg(desc->pg_lseg);
desc->pg_lseg = NULL;
} else
- pnfs_do_multiple_writes(desc, &hdr->rpc_list, desc->pg_ioflags);
+ pnfs_do_write(desc, hdr, desc->pg_ioflags);
if (atomic_dec_and_test(&hdr->refcnt))
hdr->completion_ops->completion(hdr);
return ret;
@@ -1731,23 +1726,17 @@ pnfs_try_to_read_data(struct nfs_pgio_data *rdata,
}
static void
-pnfs_do_multiple_reads(struct nfs_pageio_descriptor *desc, struct list_head *head)
+pnfs_do_read(struct nfs_pageio_descriptor *desc, struct nfs_pgio_header *hdr)
{
- struct nfs_pgio_data *data;
+ struct nfs_pgio_data *data = hdr->data;
const struct rpc_call_ops *call_ops = desc->pg_rpc_callops;
struct pnfs_layout_segment *lseg = desc->pg_lseg;
+ enum pnfs_try_status trypnfs;
desc->pg_lseg = NULL;
- while (!list_empty(head)) {
- enum pnfs_try_status trypnfs;
-
- data = list_first_entry(head, struct nfs_pgio_data, list);
- list_del_init(&data->list);
-
- trypnfs = pnfs_try_to_read_data(data, call_ops, lseg);
- if (trypnfs == PNFS_NOT_ATTEMPTED)
- pnfs_read_through_mds(desc, data);
- }
+ trypnfs = pnfs_try_to_read_data(data, call_ops, lseg);
+ if (trypnfs == PNFS_NOT_ATTEMPTED)
+ pnfs_read_through_mds(desc, data);
pnfs_put_lseg(lseg);
}
@@ -1782,7 +1771,7 @@ pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc)
pnfs_put_lseg(desc->pg_lseg);
desc->pg_lseg = NULL;
} else
- pnfs_do_multiple_reads(desc, &hdr->rpc_list);
+ pnfs_do_read(desc, hdr);
if (atomic_dec_and_test(&hdr->refcnt))
hdr->completion_ops->completion(hdr);
return ret;
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index dacd240..29828c7 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1255,11 +1255,13 @@ enum {
NFS_IOHDR_NEED_RESCHED,
};
+struct nfs_pgio_data;
+
struct nfs_pgio_header {
struct inode *inode;
struct rpc_cred *cred;
struct list_head pages;
- struct list_head rpc_list;
+ struct nfs_pgio_data *data;
atomic_t refcnt;
struct nfs_page *req;
struct nfs_writeverf verf; /* Used for writes */
--
1.8.5.2 (Apple Git-48)
next prev parent reply other threads:[~2014-04-24 18:15 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-24 18:15 [PATCH 00/18 v2] nfs: support multiple requests per page Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 01/18 v2] pnfs: fix race in filelayout commit path Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 02/18 v2] nfs: clean up PG_* flags Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 03/18 v2] nfs: remove unused arg from nfs_create_request Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 04/18 v2] nfs: modify pg_test interface to return size_t Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 05/18 v2] nfs: call nfs_can_coalesce_requests for every req Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 06/18 v2] nfs: add support for multiple nfs reqs per page Weston Andros Adamson
2014-04-24 20:49 ` Anna Schumaker
2014-04-24 21:03 ` Anna Schumaker
2014-04-24 23:06 ` Weston Andros Adamson
2014-04-25 13:32 ` Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 07/18 v2] nfs: page group syncing in read path Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 08/18 v2] nfs: page group syncing in write path Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 09/18 v2] nfs: page group support in nfs_mark_uptodate Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 10/18 v2] pnfs: clean up filelayout_alloc_commit_info Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 11/18 v2] nfs: allow coalescing of subpage requests Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 12/18 v2] nfs: chain calls to pg_test Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 13/18 v2] nfs: use > 1 request to handle bsize < PAGE_SIZE Weston Andros Adamson
2014-04-24 18:15 ` Weston Andros Adamson [this message]
2014-04-25 13:56 ` [PATCH 14/18 v2] nfs: remove list of [rw]data from pgio header Anna Schumaker
2014-04-25 13:58 ` Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 15/18 v2] pnfs: support multiple verfs per direct req Weston Andros Adamson
2014-04-25 14:15 ` Anna Schumaker
2014-04-25 15:12 ` Weston Andros Adamson
2014-04-25 15:38 ` Weston Andros Adamson
2014-04-25 15:53 ` Anna Schumaker
2014-04-25 16:04 ` Weston Andros Adamson
2014-04-25 17:22 ` Anna Schumaker
2014-04-24 18:15 ` [PATCH 16/18 v2] pnfs: allow non page aligned pnfs layout segments Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 17/18 v2] pnfs: filelayout: support non page aligned layouts Weston Andros Adamson
2014-04-24 18:15 ` [PATCH 18/18 v2] nfs: support page groups in nfs_read_completion Weston Andros Adamson
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=1398363328-7100-15-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).