diff options
Diffstat (limited to 'fs/nfs/read.c')
-rw-r--r-- | fs/nfs/read.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/fs/nfs/read.c b/fs/nfs/read.c index 6f1fdd7ff..3f9b16078 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c @@ -225,11 +225,24 @@ nfs_readpage(struct file *file, struct page *page) { struct dentry *dentry = file->f_dentry; struct inode *inode = dentry->d_inode; - int error = -1; + int error; dprintk("NFS: nfs_readpage (%p %ld@%ld)\n", page, PAGE_SIZE, page->offset); set_bit(PG_locked, &page->flags); + + /* + * Try to flush any pending writes to the file.. + * + * NOTE! Because we own the page lock, there cannot + * be any new pending writes generated at this point + * for this page (other pages can be written to). + */ + error = nfs_wb_page(inode, page); + if (error) + return error; + + error = -1; atomic_inc(&page->count); if (!IS_SWAPFILE(inode) && !PageError(page) && NFS_SERVER(inode)->rsize >= PAGE_SIZE) |