On Wed, 2012-12-12 at 12:36 -0500, Jeff Layton wrote: > The NFS DIO code will dirty pages that catch read responses in order to > handle the case where someone is doing DIO reads into an mmapped buffer. > The existing code doesn't really do the right thing though since it > doesn't take into account the case where we might be attempting to read > past the EOF. > > Fix the logic in that code to only dirty pages that ended up receiving > data from the read. Note too that it really doesn't matter if > NFS_IOHDR_ERROR is set or not. All that matters is if the page was > altered by the read. > > Cc: Fred Isaman <iisaman@xxxxxxxxxx> > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> > --- > fs/nfs/direct.c | 9 ++------- > 1 file changed, 2 insertions(+), 7 deletions(-) > > diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c > index 594f4e7..0bd7a55 100644 > --- a/fs/nfs/direct.c > +++ b/fs/nfs/direct.c > @@ -266,13 +266,8 @@ static void nfs_direct_read_completion(struct nfs_pgio_header *hdr) > struct nfs_page *req = nfs_list_entry(hdr->pages.next); > struct page *page = req->wb_page; > > - if (!PageCompound(page)) { > - if (test_bit(NFS_IOHDR_ERROR, &hdr->flags)) { > - if (bytes < hdr->good_bytes) > - set_page_dirty(page); > - } else > - set_page_dirty(page); > - } > + if (!PageCompound(page) && bytes < hdr->good_bytes) > + set_page_dirty(page); > bytes += req->wb_bytes; > nfs_list_remove_request(req); > nfs_direct_readpage_release(req); Thanks Jeff! -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥