[pnfs] holey file cthon test
Dean Hildebrand
dhildebz at eecs.umich.edu
Wed Sep 6 16:07:57 EDT 2006
Please don't, it will confuse our pNFS changes from the NFSv4 changes.
We should re-base our CVS tree, and include all of the NFS specific
patches (large wsize, holey patch, others?)
Dean
Benny Halevy wrote:
> Yay, cthon04 passes with this patch.
> I guess I'll submit to our cvs tree then :)
>
> Benny
>
> Benny Halevy wrote:
>
>> Looks right. I'll try it out...
>>
>> Benny
>>
>> J. Bruce Fields wrote:
>>
>>> On Wed, Sep 06, 2006 at 11:41:48AM -0700, Garth Goodson wrote:
>>>
>>>
>>>> Can we patch our cvs tree to fix this problem, so that we can try
>>>> to get the connectathon suite running?
>>>>
>>>
>>>
>>> I *think* this was probably it (I guess it was Trond's patch, not
>>> Steve's, I misrememberd). Does this apply to your tree?
>>>
>>> --b.
>>>
>>> commit 79558f3610efd7928e8882b2eaca3093b283630e
>>> Author: Trond Myklebust <Trond.Myklebust at netapp.com>
>>> Date: Tue Aug 22 13:44:32 2006 -0400
>>>
>>> NFS: Fix issue with EIO on NFS read
>>> The problem is that we may be caching writes that would extend
>>> the file and
>>> create a hole in the region that we are reading. In this case, we
>>> need to
>>> detect the eof from the server, ensure that we zero out the pages
>>> that
>>> are part of the hole and mark them as up to date.
>>> Signed-off-by: Trond Myklebust <Trond.Myklebust at netapp.com>
>>> (cherry picked from 856b603b01b99146918c093969b6cb1b1b0f1c01 commit)
>>>
>>> diff --git a/fs/nfs/read.c b/fs/nfs/read.c
>>> index 65c0c5b..da9cf11 100644
>>> --- a/fs/nfs/read.c
>>> +++ b/fs/nfs/read.c
>>> @@ -116,10 +116,17 @@ static void nfs_readpage_truncate_uninit
>>> pages = &data->args.pages[base >> PAGE_CACHE_SHIFT];
>>> base &= ~PAGE_CACHE_MASK;
>>> pglen = PAGE_CACHE_SIZE - base;
>>> - if (pglen < remainder)
>>> + for (;;) {
>>> + if (remainder <= pglen) {
>>> + memclear_highpage_flush(*pages, base, remainder);
>>> + break;
>>> + }
>>> memclear_highpage_flush(*pages, base, pglen);
>>> - else
>>> - memclear_highpage_flush(*pages, base, remainder);
>>> + pages++;
>>> + remainder -= pglen;
>>> + pglen = PAGE_CACHE_SIZE;
>>> + base = 0;
>>> + }
>>> }
>>>
>>> /*
>>> @@ -476,6 +483,8 @@ static void nfs_readpage_set_pages_uptod
>>> unsigned int base = data->args.pgbase;
>>> struct page **pages;
>>>
>>> + if (data->res.eof)
>>> + count = data->args.count;
>>> if (unlikely(count == 0))
>>> return;
>>> pages = &data->args.pages[base >> PAGE_CACHE_SHIFT];
>>> @@ -483,11 +492,7 @@ static void nfs_readpage_set_pages_uptod
>>> count += base;
>>> for (;count >= PAGE_CACHE_SIZE; count -= PAGE_CACHE_SIZE, pages++)
>>> SetPageUptodate(*pages);
>>> - /*
>>> - * Was this an eof or a short read? If the latter, don't mark
>>> the page
>>> - * as uptodate yet.
>>> - */
>>> - if (count > 0 && (data->res.eof || data->args.count ==
>>> data->res.count))
>>> + if (count != 0)
>>> SetPageUptodate(*pages);
>>> }
>>>
>>> @@ -502,6 +507,8 @@ static void nfs_readpage_set_pages_error
>>> count += base;
>>> for (;count >= PAGE_CACHE_SIZE; count -= PAGE_CACHE_SIZE, pages++)
>>> SetPageError(*pages);
>>> + if (count != 0)
>>> + SetPageError(*pages);
>>> }
>>>
>>> /*
>>> _______________________________________________
>>> pNFS mailing list
>>> pNFS at linux-nfs.org
>>> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>>>
>>>
>>
>>
>> _______________________________________________
>> pNFS mailing list
>> pNFS at linux-nfs.org
>> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
>
>
>
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
--
Dean Hildebrand
Ph.D. Candidate
University of Michigan
More information about the pNFS
mailing list