|
@@ -714,24 +714,11 @@ xfs_file_dax_write(
|
|
|
struct address_space *mapping = iocb->ki_filp->f_mapping;
|
|
|
struct inode *inode = mapping->host;
|
|
|
struct xfs_inode *ip = XFS_I(inode);
|
|
|
- struct xfs_mount *mp = ip->i_mount;
|
|
|
ssize_t ret = 0;
|
|
|
- int unaligned_io = 0;
|
|
|
- int iolock;
|
|
|
+ int iolock = XFS_IOLOCK_EXCL;
|
|
|
struct iov_iter data;
|
|
|
|
|
|
- /* "unaligned" here means not aligned to a filesystem block */
|
|
|
- if ((iocb->ki_pos & mp->m_blockmask) ||
|
|
|
- ((iocb->ki_pos + iov_iter_count(from)) & mp->m_blockmask)) {
|
|
|
- unaligned_io = 1;
|
|
|
- iolock = XFS_IOLOCK_EXCL;
|
|
|
- } else if (mapping->nrpages) {
|
|
|
- iolock = XFS_IOLOCK_EXCL;
|
|
|
- } else {
|
|
|
- iolock = XFS_IOLOCK_SHARED;
|
|
|
- }
|
|
|
xfs_rw_ilock(ip, iolock);
|
|
|
-
|
|
|
ret = xfs_file_aio_write_checks(iocb, from, &iolock);
|
|
|
if (ret)
|
|
|
goto out;
|
|
@@ -758,11 +745,6 @@ xfs_file_dax_write(
|
|
|
WARN_ON_ONCE(ret);
|
|
|
}
|
|
|
|
|
|
- if (iolock == XFS_IOLOCK_EXCL && !unaligned_io) {
|
|
|
- xfs_rw_ilock_demote(ip, XFS_IOLOCK_EXCL);
|
|
|
- iolock = XFS_IOLOCK_SHARED;
|
|
|
- }
|
|
|
-
|
|
|
trace_xfs_file_dax_write(ip, iov_iter_count(from), iocb->ki_pos);
|
|
|
|
|
|
data = *from;
|