From: Boaz Harrosh <bharrosh@panasas.com>
To: Trond Myklebust <Trond.Myklebust@netapp.com>,
Benny Halevy <bhalevy@panasas.com>,
NFS list <linux-nfs@vger.kernel.org>,
open-osd <osd-dev@open-osd.org>
Subject: [PATCH 32/32] pnfs-obj: pg_test check for max_io_size
Date: Sun, 29 May 2011 21:30:06 +0300 [thread overview]
Message-ID: <1306693806-8608-1-git-send-email-bharrosh@panasas.com> (raw)
In-Reply-To: <4DE28CFB.4060608@panasas.com>
Implement pg_test vector to test for max IO sizes. We calculate
a max_io_size member only once, and cache it in lseg so to not
do so on every page insert.
Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
[simplify logic]
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfs/objlayout/objio_osd.c | 19 ++++++++++++++++++-
1 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/fs/nfs/objlayout/objio_osd.c b/fs/nfs/objlayout/objio_osd.c
index 3b10d09..9cf208d 100644
--- a/fs/nfs/objlayout/objio_osd.c
+++ b/fs/nfs/objlayout/objio_osd.c
@@ -128,6 +128,8 @@ struct objio_segment {
u64 group_depth;
unsigned group_count;
+ unsigned max_io_size;
+
unsigned comps_index;
unsigned num_comps;
/* variable length */
@@ -365,6 +367,11 @@ int objio_alloc_lseg(struct pnfs_layout_segment **outp,
objio_seg->group_count = 1;
}
+ /* Cache this calculation it will hit for every page */
+ objio_seg->max_io_size = (BIO_MAX_PAGES_KMALLOC * PAGE_SIZE -
+ objio_seg->stripe_unit) *
+ objio_seg->group_width;
+
*outp = &objio_seg->lseg;
return 0;
@@ -988,6 +995,16 @@ ssize_t objio_write_pagelist(struct objlayout_io_state *ol_state, bool stable)
return _write_exec(ios);
}
+static bool objio_pg_test(struct nfs_pageio_descriptor *pgio,
+ struct nfs_page *prev, struct nfs_page *req)
+{
+ if (!pnfs_generic_pg_test(pgio, prev, req))
+ return false;
+
+ return pgio->pg_count + req->wb_bytes <=
+ OBJIO_LSEG(pgio->pg_lseg)->max_io_size;
+}
+
static struct pnfs_layoutdriver_type objlayout_type = {
.id = LAYOUT_OSD2_OBJECTS,
.name = "LAYOUT_OSD2_OBJECTS",
@@ -1001,7 +1018,7 @@ static struct pnfs_layoutdriver_type objlayout_type = {
.read_pagelist = objlayout_read_pagelist,
.write_pagelist = objlayout_write_pagelist,
- .pg_test = pnfs_generic_pg_test,
+ .pg_test = objio_pg_test,
.free_deviceid_node = objio_free_deviceid_node,
--
1.7.2.3
next prev parent reply other threads:[~2011-05-29 18:30 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-29 18:14 [PATCHSET final 00/32] pnfs-obj: pnfs-objects layout driver submission Boaz Harrosh
2011-05-29 18:16 ` [PATCH 01/32] NFSv4.1: fix typo in filelayout_check_layout Boaz Harrosh
2011-05-29 18:17 ` [PATCH 02/32] NFSv4.1: use struct nfs_client to qualify deviceid Boaz Harrosh
2011-05-29 18:17 ` [PATCH 03/32] pnfs: resolve header dependency in pnfs.h Boaz Harrosh
2011-05-29 18:18 ` [PATCH 04/32] NFSv4.1: make deviceid cache global Boaz Harrosh
2011-05-29 18:18 ` [PATCH 05/32] NFSv4.1: purge deviceid cache on nfs_free_client Boaz Harrosh
2011-05-29 18:19 ` [PATCH 06/32] pnfs: CB_NOTIFY_DEVICEID Boaz Harrosh
2011-05-29 18:19 ` [PATCH 07/32] NFSv4.1: use layout driver in global device cache Boaz Harrosh
2011-05-29 18:19 ` [PATCH 08/32] SUNRPC: introduce xdr_init_decode_pages Boaz Harrosh
2011-05-29 18:19 ` [PATCH 09/32] pnfs: Use byte-range for layoutget Boaz Harrosh
2011-05-29 18:20 ` [PATCH 10/32] pnfs: align layoutget requests on page boundaries Boaz Harrosh
2011-05-29 18:20 ` [PATCH 11/32] pnfs: Use byte-range for cb_layoutrecall Boaz Harrosh
2011-05-29 18:21 ` [PATCH 12/32] pnfs: client stats Boaz Harrosh
2011-05-29 18:21 ` [PATCH 13/32] pnfs-obj: objlayoutdriver module skeleton Boaz Harrosh
2011-05-29 18:21 ` [PATCH 14/32] pnfs-obj: pnfs_osd XDR definitions Boaz Harrosh
2011-05-29 18:22 ` [PATCH 15/32] pnfs-obj: pnfs_osd XDR client implementation Boaz Harrosh
2011-05-29 18:22 ` [PATCH 16/32] pnfs-obj: decode layout, alloc/free lseg Boaz Harrosh
2011-05-29 18:22 ` [PATCH 17/32] pnfs-obj: objio_osd device information retrieval and caching Boaz Harrosh
2011-05-29 18:23 ` [PATCH 18/32] pnfs: alloc and free layout_hdr layoutdriver methods Boaz Harrosh
2011-05-29 18:23 ` [PATCH 19/32] pnfs-obj: define per-inode private structure Boaz Harrosh
2011-05-29 18:24 ` [PATCH 20/32] pnfs: support for non-rpc layout drivers Boaz Harrosh
2011-05-29 18:25 ` [PATCH 21/32] pnfs-obj: osd raid engine read/write implementation Boaz Harrosh
2011-05-29 18:25 ` [PATCH 22/32] pnfs: layoutreturn Boaz Harrosh
2011-05-29 18:26 ` [PATCH 23/32] pnfs: layoutret_on_setattr Boaz Harrosh
2011-05-29 18:26 ` [PATCH 24/32] pnfs: encode_layoutreturn Boaz Harrosh
2011-05-29 18:26 ` [PATCH 25/32] pnfs-obj: report errors and .encode_layoutreturn Implementation Boaz Harrosh
2011-05-29 18:27 ` [PATCH 26/32] pnfs: encode_layoutcommit Boaz Harrosh
2011-05-29 18:27 ` [PATCH 27/32] pnfs-obj: objlayout_encode_layoutcommit implementation Boaz Harrosh
2011-05-29 18:27 ` [PATCH 28/32] NFSv4.1: unify pnfs_pageio_init functions Boaz Harrosh
2011-05-29 18:28 ` [PATCH 29/32] NFSv4.1: change pg_test return type to bool Boaz Harrosh
2011-05-29 18:28 ` [PATCH 30/32] NFSv4.1: use pnfs_generic_pg_test directly by layout driver Boaz Harrosh
2011-05-29 18:29 ` [PATCH 31/32] NFSv4.1: define nfs_generic_pg_test Boaz Harrosh
2011-05-29 18:30 ` Boaz Harrosh [this message]
2011-05-29 18:36 ` [osd-dev] [PATCHSET final 00/32] pnfs-obj: pnfs-objects layout driver submission Boaz Harrosh
2011-05-31 5:58 ` Benny Halevy
2011-05-31 23:32 ` Jim Rees
2011-06-01 11:55 ` Benny Halevy
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=1306693806-8608-1-git-send-email-bharrosh@panasas.com \
--to=bharrosh@panasas.com \
--cc=Trond.Myklebust@netapp.com \
--cc=bhalevy@panasas.com \
--cc=linux-nfs@vger.kernel.org \
--cc=osd-dev@open-osd.org \
/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).