Re: [PATCH] nfs: fix page dirtying in NFS DIO read codepath

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux