From: Marc Dionne Date: Sun, 7 Nov 2010 18:14:55 +0000 (-0500) Subject: Cache bypass: make readpage deal with reads at end of file X-Git-Tag: upstream/1.8.0_pre1^2~4538 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=8ec31f26770ef1e85fb3a6005467f0e2d3ce1715;p=packages%2Fo%2Fopenafs.git Cache bypass: make readpage deal with reads at end of file When a file's size is an exact multiple of the page size, the vfs will issue a readpage for an extra page at the end, for which there is no data. Deal with it here instead of letting it trickle down to the background daemon, which will issue an unnecessary read to the server, and maybe get confused because there is no data. Change-Id: If86ed785c4e9d50edb1a960142f726fa869c50fc Reviewed-on: http://gerrit.openafs.org/3281 Reviewed-by: Matt Benjamin Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 748952967..780c8efd3 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -1820,6 +1820,17 @@ afs_linux_bypass_readpage(struct file *fp, struct page *pp) struct nocache_read_request *ancr; int code; + /* + * Special case: if page is at or past end of file, just zero it and set + * it as up to date. + */ + if (page_offset(pp) >= i_size_read(fp->f_mapping->host)) { + zero_user_segment(pp, 0, PAGE_CACHE_SIZE); + SetPageUptodate(pp); + unlock_page(pp); + return 0; + } + ClearPageError(pp); /* receiver frees */