xfs: eliminate the pos variable in xfs_file_dio_aio_write

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Christoph Hellwig 2016-04-07 08:51:57 -07:00 committed by Al Viro
parent 1af5bb491f
commit 13712713ca
1 changed files with 8 additions and 9 deletions

View File

@ -718,18 +718,19 @@ xfs_file_dio_aio_write(
int unaligned_io = 0; int unaligned_io = 0;
int iolock; int iolock;
size_t count = iov_iter_count(from); size_t count = iov_iter_count(from);
loff_t pos = iocb->ki_pos;
loff_t end; loff_t end;
struct iov_iter data; struct iov_iter data;
struct xfs_buftarg *target = XFS_IS_REALTIME_INODE(ip) ? struct xfs_buftarg *target = XFS_IS_REALTIME_INODE(ip) ?
mp->m_rtdev_targp : mp->m_ddev_targp; mp->m_rtdev_targp : mp->m_ddev_targp;
/* DIO must be aligned to device logical sector size */ /* DIO must be aligned to device logical sector size */
if (!IS_DAX(inode) && ((pos | count) & target->bt_logical_sectormask)) if (!IS_DAX(inode) &&
((iocb->ki_pos | count) & target->bt_logical_sectormask))
return -EINVAL; return -EINVAL;
/* "unaligned" here means not aligned to a filesystem block */ /* "unaligned" here means not aligned to a filesystem block */
if ((pos & mp->m_blockmask) || ((pos + count) & mp->m_blockmask)) if ((iocb->ki_pos & mp->m_blockmask) ||
((iocb->ki_pos + count) & mp->m_blockmask))
unaligned_io = 1; unaligned_io = 1;
/* /*
@ -760,8 +761,7 @@ xfs_file_dio_aio_write(
if (ret) if (ret)
goto out; goto out;
count = iov_iter_count(from); count = iov_iter_count(from);
pos = iocb->ki_pos; end = iocb->ki_pos + count - 1;
end = pos + count - 1;
/* /*
* See xfs_file_read_iter() for why we do a full-file flush here. * See xfs_file_read_iter() for why we do a full-file flush here.
@ -794,19 +794,18 @@ xfs_file_dio_aio_write(
trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0); trace_xfs_file_direct_write(ip, count, iocb->ki_pos, 0);
data = *from; data = *from;
ret = mapping->a_ops->direct_IO(iocb, &data, pos); ret = mapping->a_ops->direct_IO(iocb, &data, iocb->ki_pos);
/* see generic_file_direct_write() for why this is necessary */ /* see generic_file_direct_write() for why this is necessary */
if (mapping->nrpages) { if (mapping->nrpages) {
invalidate_inode_pages2_range(mapping, invalidate_inode_pages2_range(mapping,
pos >> PAGE_SHIFT, iocb->ki_pos >> PAGE_SHIFT,
end >> PAGE_SHIFT); end >> PAGE_SHIFT);
} }
if (ret > 0) { if (ret > 0) {
pos += ret; iocb->ki_pos += ret;
iov_iter_advance(from, ret); iov_iter_advance(from, ret);
iocb->ki_pos = pos;
} }
out: out:
xfs_rw_iunlock(ip, iolock); xfs_rw_iunlock(ip, iolock);