Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e1681c2 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFSv4: Truncating file opens should also sync O_DIRECT writes



We don't just want to sync out buffered writes, but also O_DIRECT ones.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent d9dabc1a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -133,11 +133,12 @@ void nfs_evict_inode(struct inode *inode)
	nfs_clear_inode(inode);
}

static int nfs_sync_inode(struct inode *inode)
int nfs_sync_inode(struct inode *inode)
{
	nfs_inode_dio_wait(inode);
	return nfs_wb_all(inode);
}
EXPORT_SYMBOL_GPL(nfs_sync_inode);

/**
 * nfs_sync_mapping - helper to flush all mmapped dirty data to disk
+1 −1
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ nfs4_file_open(struct inode *inode, struct file *filp)
	if (openflags & O_TRUNC) {
		attr.ia_valid |= ATTR_SIZE;
		attr.ia_size = 0;
		nfs_wb_all(inode);
		nfs_sync_inode(inode);
	}

	inode = NFS_PROTO(dir)->open_context(dir, ctx, openflags, &attr, &opened);
+1 −0
Original line number Diff line number Diff line
@@ -512,6 +512,7 @@ extern int nfs_updatepage(struct file *, struct page *, unsigned int, unsigned
 * Try to write back everything synchronously (but check the
 * return value!)
 */
extern int nfs_sync_inode(struct inode *inode);
extern int nfs_wb_all(struct inode *inode);
extern int nfs_wb_page(struct inode *inode, struct page* page);
extern int nfs_wb_page_cancel(struct inode *inode, struct page* page);