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:
parent
1af5bb491f
commit
13712713ca
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue