[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