From: Benny Halevy <bhalevy@panasas.com>
To: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 1/3] NFSv4.1: Fix some issues with pnfs_generic_pg_test
Date: Tue, 07 Jun 2011 22:24:25 -0400 [thread overview]
Message-ID: <4DEEDD59.5030902@panasas.com> (raw)
In-Reply-To: <1307495548.12587.5.camel@lade.trondhjem.org>
On 2011-06-07 21:12, Trond Myklebust wrote:
> On Tue, 2011-06-07 at 20:53 -0400, Benny Halevy wrote:
>> On 2011-06-06 18:32, Trond Myklebust wrote:
>>> 1. If the intention is to coalesce requests 'prev' and 'req' then we
>>> have to ensure at least that we have a layout starting at
>>> req_offset(prev).
>>>
>>> 2. If we're only requesting a minimal layout of length desc->pg_count,
>>> we need to test the length actually returned by the server before
>>> we allow the coalescing to occur.
>>>
>>> 3. We need to deal correctly with (pgio->lseg == NULL)
>>>
>>> 4. Fixup the test guarding the pnfs_update_layout.
>>>
>>> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
>>> ---
>>> fs/nfs/objlayout/objio_osd.c | 3 +++
>>> fs/nfs/pnfs.c | 12 +++++++-----
>>> 2 files changed, 10 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/fs/nfs/objlayout/objio_osd.c b/fs/nfs/objlayout/objio_osd.c
>>> index 9cf208d..4c41a60 100644
>>> --- a/fs/nfs/objlayout/objio_osd.c
>>> +++ b/fs/nfs/objlayout/objio_osd.c
>>> @@ -1001,6 +1001,9 @@ static bool objio_pg_test(struct nfs_pageio_descriptor *pgio,
>>> if (!pnfs_generic_pg_test(pgio, prev, req))
>>> return false;
>>>
>>> + if (pgio->pg_lseg == NULL)
>>> + return true;
>>> +
>>> return pgio->pg_count + req->wb_bytes <=
>>> OBJIO_LSEG(pgio->pg_lseg)->max_io_size;
>>> }
>>> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
>>> index 8c1309d..12b53ef 100644
>>> --- a/fs/nfs/pnfs.c
>>> +++ b/fs/nfs/pnfs.c
>>> @@ -1059,19 +1059,21 @@ pnfs_generic_pg_test(struct nfs_pageio_descriptor *pgio, struct nfs_page *prev,
>>> gfp_flags = GFP_NOFS;
>>> }
>>>
>>> - if (pgio->pg_count == prev->wb_bytes) {
>>> + if (pgio->pg_lseg == NULL) {
>>> + if (pgio->pg_count != prev->wb_bytes)
>>> + return true;
>>> /* This is first coelesce call for a series of nfs_pages */
>>> pgio->pg_lseg = pnfs_update_layout(pgio->pg_inode,
>>> prev->wb_context,
>>> - req_offset(req),
>>> + req_offset(prev),
>>> pgio->pg_count,
>>> access_type,
>>> gfp_flags);
>>> - return true;
>>> + if (pgio->pg_lseg == NULL)
>>> + return true;
>>> }
>>>
>>> - if (pgio->pg_lseg &&
>>> - req_offset(req) > end_offset(pgio->pg_lseg->pls_range.offset,
>>> + if (req_offset(req) > end_offset(pgio->pg_lseg->pls_range.offset,
>>
>> One more issue to fix: the condition should be for ">=", not ">"
>
> Hmm.... Shouldn't it rather be:
>
> if (end_offset(req_offset(req), req->wb_bytes) > end_offset(pgio->pg_lseg->pls_range.offset,
> pgio->pg_lseg->pls_range.length))
> return false;
>
> Otherwise you don't know if the entire request fits in this layout
> segment...
True.
Though since we make sure the layout segments are page aligned
having the first offset covered is enough, this is the correct
way to express the condition.
Benny
>
> Cheers
> Trond
next prev parent reply other threads:[~2011-06-08 2:24 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-06 22:32 [PATCH 1/3] NFSv4.1: Fix some issues with pnfs_generic_pg_test Trond Myklebust
2011-06-06 22:32 ` [PATCH 2/3] NFS: Cleanup of the nfs_pageio code in preparation for a pnfs bugfix Trond Myklebust
2011-06-06 22:32 ` [PATCH 3/3] NFSv4.1: Add an initialisation callback for pNFS Trond Myklebust
2011-06-08 0:28 ` [PATCH 2/3] NFS: Cleanup of the nfs_pageio code in preparation for a pnfs bugfix Benny Halevy
2011-06-08 0:51 ` Trond Myklebust
2011-06-08 2:30 ` Benny Halevy
2011-06-09 16:37 ` Trond Myklebust
2011-06-09 17:51 ` Boaz Harrosh
2011-06-09 18:13 ` Trond Myklebust
2011-06-09 18:58 ` Benny Halevy
2011-06-09 21:31 ` Boaz Harrosh
2011-06-08 0:53 ` [PATCH 1/3] NFSv4.1: Fix some issues with pnfs_generic_pg_test Benny Halevy
2011-06-08 1:12 ` Trond Myklebust
2011-06-08 2:24 ` Benny Halevy [this message]
2011-06-09 16:31 ` Trond Myklebust
2011-06-09 18:43 ` 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=4DEEDD59.5030902@panasas.com \
--to=bhalevy@panasas.com \
--cc=Trond.Myklebust@netapp.com \
--cc=linux-nfs@vger.kernel.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