[pnfs] holey file cthon test

William A.(Andy) Adamson andros at citi.umich.edu
Wed Sep 6 16:41:48 EDT 2006


thanks dean

i'll rebase the CVS tree vendor branch first thing tomorrow.

-->Andy

> 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
> >
> >
> 
> 
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs




More information about the pNFS mailing list