|
@@ -527,6 +527,15 @@ xfs_file_dio_aio_write(
|
|
if ((iocb->ki_pos & mp->m_blockmask) ||
|
|
if ((iocb->ki_pos & mp->m_blockmask) ||
|
|
((iocb->ki_pos + count) & mp->m_blockmask)) {
|
|
((iocb->ki_pos + count) & mp->m_blockmask)) {
|
|
unaligned_io = 1;
|
|
unaligned_io = 1;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * We can't properly handle unaligned direct I/O to reflink
|
|
|
|
+ * files yet, as we can't unshare a partial block.
|
|
|
|
+ */
|
|
|
|
+ if (xfs_is_reflink_inode(ip)) {
|
|
|
|
+ trace_xfs_reflink_bounce_dio_write(ip, iocb->ki_pos, count);
|
|
|
|
+ return -EREMCHG;
|
|
|
|
+ }
|
|
iolock = XFS_IOLOCK_EXCL;
|
|
iolock = XFS_IOLOCK_EXCL;
|
|
} else {
|
|
} else {
|
|
iolock = XFS_IOLOCK_SHARED;
|
|
iolock = XFS_IOLOCK_SHARED;
|