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

Commit dde0c2e7 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Al Viro
Browse files

fs: add IOCB_SYNC and IOCB_DSYNC



This will allow us to do per-I/O sync file writes, as required by a lot
of fileservers or storage targets.

XXX: Will need a few additional audits for O_DSYNC

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 716b9bc0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1662,7 +1662,7 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
	ret = __generic_file_write_iter(iocb, from);
	if (ret > 0) {
		ssize_t err;
		err = generic_write_sync(file, iocb->ki_pos - ret, ret);
		err = generic_write_sync(iocb, iocb->ki_pos - ret, ret);
		if (err < 0)
			ret = err;
	}
+1 −1
Original line number Diff line number Diff line
@@ -1852,7 +1852,7 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
	BTRFS_I(inode)->last_sub_trans = root->log_transid;
	spin_unlock(&BTRFS_I(inode)->lock);
	if (num_written > 0) {
		err = generic_write_sync(file, pos, num_written);
		err = generic_write_sync(iocb, pos, num_written);
		if (err < 0)
			num_written = err;
	}
+1 −1
Original line number Diff line number Diff line
@@ -2688,7 +2688,7 @@ cifs_writev(struct kiocb *iocb, struct iov_iter *from)
	inode_unlock(inode);

	if (rc > 0) {
		ssize_t err = generic_write_sync(file, iocb->ki_pos - rc, rc);
		ssize_t err = generic_write_sync(iocb, iocb->ki_pos - rc, rc);
		if (err < 0)
			rc = err;
	}
+1 −1
Original line number Diff line number Diff line
@@ -268,7 +268,7 @@ static ssize_t dio_complete(struct dio *dio, ssize_t ret, bool is_async)
		if (dio->rw & WRITE) {
			int err;

			err = generic_write_sync(dio->iocb->ki_filp, offset,
			err = generic_write_sync(dio->iocb, offset,
						 transferred);
			if (err < 0 && ret > 0)
				ret = err;
+1 −1
Original line number Diff line number Diff line
@@ -172,7 +172,7 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
	if (ret > 0) {
		ssize_t err;

		err = generic_write_sync(file, iocb->ki_pos - ret, ret);
		err = generic_write_sync(iocb, iocb->ki_pos - ret, ret);
		if (err < 0)
			ret = err;
	}
Loading