[pnfs] holey file cthon test

Benny Halevy bhalevy at panasas.com
Wed Sep 6 16:15:50 EDT 2006


Ok. I didn't commit it.

Benny

Dean Hildebrand wrote:

> 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
>
>




More information about the pNFS mailing list