[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