mirror of https://gitee.com/openkylin/linux.git
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 iolock;
|
||||
size_t count = iov_iter_count(from);
|
||||
loff_t pos = iocb->ki_pos;
|
||||
loff_t end;
|
||||
struct iov_iter data;
|
||||
struct xfs_buftarg *target = XFS_IS_REALTIME_INODE(ip) ?
|
||||
mp->m_rtdev_targp : mp->m_ddev_targp;
|
||||
|
||||
/* 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;
|
||||
|
||||
/* "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;
|
||||
|
||||
/*
|
||||
|
@ -760,8 +761,7 @@ xfs_file_dio_aio_write(
|
|||
if (ret)
|
||||
goto out;
|
||||
count = iov_iter_count(from);
|
||||
pos = iocb->ki_pos;
|
||||
end = pos + count - 1;
|
||||
end = iocb->ki_pos + count - 1;
|
||||
|
||||
/*
|
||||
* 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);
|
||||
|
||||
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 */
|
||||
if (mapping->nrpages) {
|
||||
invalidate_inode_pages2_range(mapping,
|
||||
pos >> PAGE_SHIFT,
|
||||
iocb->ki_pos >> PAGE_SHIFT,
|
||||
end >> PAGE_SHIFT);
|
||||
}
|
||||
|
||||
if (ret > 0) {
|
||||
pos += ret;
|
||||
iocb->ki_pos += ret;
|
||||
iov_iter_advance(from, ret);
|
||||
iocb->ki_pos = pos;
|
||||
}
|
||||
out:
|
||||
xfs_rw_iunlock(ip, iolock);
|
||||
|
|
Loading…
Reference in New Issue