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

Commit a0815d55 authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFSv4.1/pnfs: Ensure that writes respect the O_SYNC flag when doing O_DIRECT



If the caller does not specify the O_SYNC flag, then it is legitimate
to return from O_DIRECT without doing a pNFS layoutcommit operation.
However if the file is opened O_DIRECT|O_SYNC then we'd better get it
right.

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
parent 9e1681c2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1034,6 +1034,7 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter,
			if (i_size_read(inode) < iocb->ki_pos)
				i_size_write(inode, iocb->ki_pos);
			spin_unlock(&inode->i_lock);
			generic_write_sync(file, pos, result);
		}
	}
	nfs_direct_req_release(dreq);
+1 −0
Original line number Diff line number Diff line
@@ -281,6 +281,7 @@ nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync)

	trace_nfs_fsync_enter(inode);

	nfs_inode_dio_wait(inode);
	do {
		ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
		if (ret != 0)
+1 −0
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ nfs4_file_fsync(struct file *file, loff_t start, loff_t end, int datasync)

	trace_nfs_fsync_enter(inode);

	nfs_inode_dio_wait(inode);
	do {
		ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
		if (ret != 0)