Loading...
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
4 * All Rights Reserved.
5 */
6#include "xfs.h"
7#include "xfs_fs.h"
8#include "xfs_shared.h"
9#include "xfs_format.h"
10#include "xfs_log_format.h"
11#include "xfs_trans_resv.h"
12#include "xfs_mount.h"
13#include "xfs_inode.h"
14#include "xfs_trans.h"
15#include "xfs_inode_item.h"
16#include "xfs_bmap.h"
17#include "xfs_bmap_util.h"
18#include "xfs_dir2.h"
19#include "xfs_dir2_priv.h"
20#include "xfs_ioctl.h"
21#include "xfs_trace.h"
22#include "xfs_log.h"
23#include "xfs_icache.h"
24#include "xfs_pnfs.h"
25#include "xfs_iomap.h"
26#include "xfs_reflink.h"
27
28#include <linux/dax.h>
29#include <linux/falloc.h>
30#include <linux/backing-dev.h>
31#include <linux/mman.h>
32#include <linux/fadvise.h>
33#include <linux/mount.h>
34
35static const struct vm_operations_struct xfs_file_vm_ops;
36
37/*
38 * Decide if the given file range is aligned to the size of the fundamental
39 * allocation unit for the file.
40 */
41static bool
42xfs_is_falloc_aligned(
43 struct xfs_inode *ip,
44 loff_t pos,
45 long long int len)
46{
47 struct xfs_mount *mp = ip->i_mount;
48 uint64_t mask;
49
50 if (XFS_IS_REALTIME_INODE(ip)) {
51 if (!is_power_of_2(mp->m_sb.sb_rextsize)) {
52 u64 rextbytes;
53 u32 mod;
54
55 rextbytes = XFS_FSB_TO_B(mp, mp->m_sb.sb_rextsize);
56 div_u64_rem(pos, rextbytes, &mod);
57 if (mod)
58 return false;
59 div_u64_rem(len, rextbytes, &mod);
60 return mod == 0;
61 }
62 mask = XFS_FSB_TO_B(mp, mp->m_sb.sb_rextsize) - 1;
63 } else {
64 mask = mp->m_sb.sb_blocksize - 1;
65 }
66
67 return !((pos | len) & mask);
68}
69
70/*
71 * Fsync operations on directories are much simpler than on regular files,
72 * as there is no file data to flush, and thus also no need for explicit
73 * cache flush operations, and there are no non-transaction metadata updates
74 * on directories either.
75 */
76STATIC int
77xfs_dir_fsync(
78 struct file *file,
79 loff_t start,
80 loff_t end,
81 int datasync)
82{
83 struct xfs_inode *ip = XFS_I(file->f_mapping->host);
84
85 trace_xfs_dir_fsync(ip);
86 return xfs_log_force_inode(ip);
87}
88
89static xfs_csn_t
90xfs_fsync_seq(
91 struct xfs_inode *ip,
92 bool datasync)
93{
94 if (!xfs_ipincount(ip))
95 return 0;
96 if (datasync && !(ip->i_itemp->ili_fsync_fields & ~XFS_ILOG_TIMESTAMP))
97 return 0;
98 return ip->i_itemp->ili_commit_seq;
99}
100
101/*
102 * All metadata updates are logged, which means that we just have to flush the
103 * log up to the latest LSN that touched the inode.
104 *
105 * If we have concurrent fsync/fdatasync() calls, we need them to all block on
106 * the log force before we clear the ili_fsync_fields field. This ensures that
107 * we don't get a racing sync operation that does not wait for the metadata to
108 * hit the journal before returning. If we race with clearing ili_fsync_fields,
109 * then all that will happen is the log force will do nothing as the lsn will
110 * already be on disk. We can't race with setting ili_fsync_fields because that
111 * is done under XFS_ILOCK_EXCL, and that can't happen because we hold the lock
112 * shared until after the ili_fsync_fields is cleared.
113 */
114static int
115xfs_fsync_flush_log(
116 struct xfs_inode *ip,
117 bool datasync,
118 int *log_flushed)
119{
120 int error = 0;
121 xfs_csn_t seq;
122
123 xfs_ilock(ip, XFS_ILOCK_SHARED);
124 seq = xfs_fsync_seq(ip, datasync);
125 if (seq) {
126 error = xfs_log_force_seq(ip->i_mount, seq, XFS_LOG_SYNC,
127 log_flushed);
128
129 spin_lock(&ip->i_itemp->ili_lock);
130 ip->i_itemp->ili_fsync_fields = 0;
131 spin_unlock(&ip->i_itemp->ili_lock);
132 }
133 xfs_iunlock(ip, XFS_ILOCK_SHARED);
134 return error;
135}
136
137STATIC int
138xfs_file_fsync(
139 struct file *file,
140 loff_t start,
141 loff_t end,
142 int datasync)
143{
144 struct xfs_inode *ip = XFS_I(file->f_mapping->host);
145 struct xfs_mount *mp = ip->i_mount;
146 int error, err2;
147 int log_flushed = 0;
148
149 trace_xfs_file_fsync(ip);
150
151 error = file_write_and_wait_range(file, start, end);
152 if (error)
153 return error;
154
155 if (xfs_is_shutdown(mp))
156 return -EIO;
157
158 xfs_iflags_clear(ip, XFS_ITRUNCATED);
159
160 /*
161 * If we have an RT and/or log subvolume we need to make sure to flush
162 * the write cache the device used for file data first. This is to
163 * ensure newly written file data make it to disk before logging the new
164 * inode size in case of an extending write.
165 */
166 if (XFS_IS_REALTIME_INODE(ip))
167 error = blkdev_issue_flush(mp->m_rtdev_targp->bt_bdev);
168 else if (mp->m_logdev_targp != mp->m_ddev_targp)
169 error = blkdev_issue_flush(mp->m_ddev_targp->bt_bdev);
170
171 /*
172 * Any inode that has dirty modifications in the log is pinned. The
173 * racy check here for a pinned inode will not catch modifications
174 * that happen concurrently to the fsync call, but fsync semantics
175 * only require to sync previously completed I/O.
176 */
177 if (xfs_ipincount(ip)) {
178 err2 = xfs_fsync_flush_log(ip, datasync, &log_flushed);
179 if (err2 && !error)
180 error = err2;
181 }
182
183 /*
184 * If we only have a single device, and the log force about was
185 * a no-op we might have to flush the data device cache here.
186 * This can only happen for fdatasync/O_DSYNC if we were overwriting
187 * an already allocated file and thus do not have any metadata to
188 * commit.
189 */
190 if (!log_flushed && !XFS_IS_REALTIME_INODE(ip) &&
191 mp->m_logdev_targp == mp->m_ddev_targp) {
192 err2 = blkdev_issue_flush(mp->m_ddev_targp->bt_bdev);
193 if (err2 && !error)
194 error = err2;
195 }
196
197 return error;
198}
199
200static int
201xfs_ilock_iocb(
202 struct kiocb *iocb,
203 unsigned int lock_mode)
204{
205 struct xfs_inode *ip = XFS_I(file_inode(iocb->ki_filp));
206
207 if (iocb->ki_flags & IOCB_NOWAIT) {
208 if (!xfs_ilock_nowait(ip, lock_mode))
209 return -EAGAIN;
210 } else {
211 xfs_ilock(ip, lock_mode);
212 }
213
214 return 0;
215}
216
217static int
218xfs_ilock_iocb_for_write(
219 struct kiocb *iocb,
220 unsigned int *lock_mode)
221{
222 ssize_t ret;
223 struct xfs_inode *ip = XFS_I(file_inode(iocb->ki_filp));
224
225 ret = xfs_ilock_iocb(iocb, *lock_mode);
226 if (ret)
227 return ret;
228
229 if (*lock_mode == XFS_IOLOCK_EXCL)
230 return 0;
231 if (!xfs_iflags_test(ip, XFS_IREMAPPING))
232 return 0;
233
234 xfs_iunlock(ip, *lock_mode);
235 *lock_mode = XFS_IOLOCK_EXCL;
236 return xfs_ilock_iocb(iocb, *lock_mode);
237}
238
239static unsigned int
240xfs_ilock_for_write_fault(
241 struct xfs_inode *ip)
242{
243 /* get a shared lock if no remapping in progress */
244 xfs_ilock(ip, XFS_MMAPLOCK_SHARED);
245 if (!xfs_iflags_test(ip, XFS_IREMAPPING))
246 return XFS_MMAPLOCK_SHARED;
247
248 /* wait for remapping to complete */
249 xfs_iunlock(ip, XFS_MMAPLOCK_SHARED);
250 xfs_ilock(ip, XFS_MMAPLOCK_EXCL);
251 return XFS_MMAPLOCK_EXCL;
252}
253
254STATIC ssize_t
255xfs_file_dio_read(
256 struct kiocb *iocb,
257 struct iov_iter *to)
258{
259 struct xfs_inode *ip = XFS_I(file_inode(iocb->ki_filp));
260 ssize_t ret;
261
262 trace_xfs_file_direct_read(iocb, to);
263
264 if (!iov_iter_count(to))
265 return 0; /* skip atime */
266
267 file_accessed(iocb->ki_filp);
268
269 ret = xfs_ilock_iocb(iocb, XFS_IOLOCK_SHARED);
270 if (ret)
271 return ret;
272 ret = iomap_dio_rw(iocb, to, &xfs_read_iomap_ops, NULL, 0, NULL, 0);
273 xfs_iunlock(ip, XFS_IOLOCK_SHARED);
274
275 return ret;
276}
277
278static noinline ssize_t
279xfs_file_dax_read(
280 struct kiocb *iocb,
281 struct iov_iter *to)
282{
283 struct xfs_inode *ip = XFS_I(iocb->ki_filp->f_mapping->host);
284 ssize_t ret = 0;
285
286 trace_xfs_file_dax_read(iocb, to);
287
288 if (!iov_iter_count(to))
289 return 0; /* skip atime */
290
291 ret = xfs_ilock_iocb(iocb, XFS_IOLOCK_SHARED);
292 if (ret)
293 return ret;
294 ret = dax_iomap_rw(iocb, to, &xfs_read_iomap_ops);
295 xfs_iunlock(ip, XFS_IOLOCK_SHARED);
296
297 file_accessed(iocb->ki_filp);
298 return ret;
299}
300
301STATIC ssize_t
302xfs_file_buffered_read(
303 struct kiocb *iocb,
304 struct iov_iter *to)
305{
306 struct xfs_inode *ip = XFS_I(file_inode(iocb->ki_filp));
307 ssize_t ret;
308
309 trace_xfs_file_buffered_read(iocb, to);
310
311 ret = xfs_ilock_iocb(iocb, XFS_IOLOCK_SHARED);
312 if (ret)
313 return ret;
314 ret = generic_file_read_iter(iocb, to);
315 xfs_iunlock(ip, XFS_IOLOCK_SHARED);
316
317 return ret;
318}
319
320STATIC ssize_t
321xfs_file_read_iter(
322 struct kiocb *iocb,
323 struct iov_iter *to)
324{
325 struct inode *inode = file_inode(iocb->ki_filp);
326 struct xfs_mount *mp = XFS_I(inode)->i_mount;
327 ssize_t ret = 0;
328
329 XFS_STATS_INC(mp, xs_read_calls);
330
331 if (xfs_is_shutdown(mp))
332 return -EIO;
333
334 if (IS_DAX(inode))
335 ret = xfs_file_dax_read(iocb, to);
336 else if (iocb->ki_flags & IOCB_DIRECT)
337 ret = xfs_file_dio_read(iocb, to);
338 else
339 ret = xfs_file_buffered_read(iocb, to);
340
341 if (ret > 0)
342 XFS_STATS_ADD(mp, xs_read_bytes, ret);
343 return ret;
344}
345
346STATIC ssize_t
347xfs_file_splice_read(
348 struct file *in,
349 loff_t *ppos,
350 struct pipe_inode_info *pipe,
351 size_t len,
352 unsigned int flags)
353{
354 struct inode *inode = file_inode(in);
355 struct xfs_inode *ip = XFS_I(inode);
356 struct xfs_mount *mp = ip->i_mount;
357 ssize_t ret = 0;
358
359 XFS_STATS_INC(mp, xs_read_calls);
360
361 if (xfs_is_shutdown(mp))
362 return -EIO;
363
364 trace_xfs_file_splice_read(ip, *ppos, len);
365
366 xfs_ilock(ip, XFS_IOLOCK_SHARED);
367 ret = filemap_splice_read(in, ppos, pipe, len, flags);
368 xfs_iunlock(ip, XFS_IOLOCK_SHARED);
369 if (ret > 0)
370 XFS_STATS_ADD(mp, xs_read_bytes, ret);
371 return ret;
372}
373
374/*
375 * Common pre-write limit and setup checks.
376 *
377 * Called with the iolocked held either shared and exclusive according to
378 * @iolock, and returns with it held. Might upgrade the iolock to exclusive
379 * if called for a direct write beyond i_size.
380 */
381STATIC ssize_t
382xfs_file_write_checks(
383 struct kiocb *iocb,
384 struct iov_iter *from,
385 unsigned int *iolock)
386{
387 struct file *file = iocb->ki_filp;
388 struct inode *inode = file->f_mapping->host;
389 struct xfs_inode *ip = XFS_I(inode);
390 ssize_t error = 0;
391 size_t count = iov_iter_count(from);
392 bool drained_dio = false;
393 loff_t isize;
394
395restart:
396 error = generic_write_checks(iocb, from);
397 if (error <= 0)
398 return error;
399
400 if (iocb->ki_flags & IOCB_NOWAIT) {
401 error = break_layout(inode, false);
402 if (error == -EWOULDBLOCK)
403 error = -EAGAIN;
404 } else {
405 error = xfs_break_layouts(inode, iolock, BREAK_WRITE);
406 }
407
408 if (error)
409 return error;
410
411 /*
412 * For changing security info in file_remove_privs() we need i_rwsem
413 * exclusively.
414 */
415 if (*iolock == XFS_IOLOCK_SHARED && !IS_NOSEC(inode)) {
416 xfs_iunlock(ip, *iolock);
417 *iolock = XFS_IOLOCK_EXCL;
418 error = xfs_ilock_iocb(iocb, *iolock);
419 if (error) {
420 *iolock = 0;
421 return error;
422 }
423 goto restart;
424 }
425
426 /*
427 * If the offset is beyond the size of the file, we need to zero any
428 * blocks that fall between the existing EOF and the start of this
429 * write. If zeroing is needed and we are currently holding the iolock
430 * shared, we need to update it to exclusive which implies having to
431 * redo all checks before.
432 *
433 * We need to serialise against EOF updates that occur in IO completions
434 * here. We want to make sure that nobody is changing the size while we
435 * do this check until we have placed an IO barrier (i.e. hold the
436 * XFS_IOLOCK_EXCL) that prevents new IO from being dispatched. The
437 * spinlock effectively forms a memory barrier once we have the
438 * XFS_IOLOCK_EXCL so we are guaranteed to see the latest EOF value and
439 * hence be able to correctly determine if we need to run zeroing.
440 *
441 * We can do an unlocked check here safely as IO completion can only
442 * extend EOF. Truncate is locked out at this point, so the EOF can
443 * not move backwards, only forwards. Hence we only need to take the
444 * slow path and spin locks when we are at or beyond the current EOF.
445 */
446 if (iocb->ki_pos <= i_size_read(inode))
447 goto out;
448
449 spin_lock(&ip->i_flags_lock);
450 isize = i_size_read(inode);
451 if (iocb->ki_pos > isize) {
452 spin_unlock(&ip->i_flags_lock);
453
454 if (iocb->ki_flags & IOCB_NOWAIT)
455 return -EAGAIN;
456
457 if (!drained_dio) {
458 if (*iolock == XFS_IOLOCK_SHARED) {
459 xfs_iunlock(ip, *iolock);
460 *iolock = XFS_IOLOCK_EXCL;
461 xfs_ilock(ip, *iolock);
462 iov_iter_reexpand(from, count);
463 }
464 /*
465 * We now have an IO submission barrier in place, but
466 * AIO can do EOF updates during IO completion and hence
467 * we now need to wait for all of them to drain. Non-AIO
468 * DIO will have drained before we are given the
469 * XFS_IOLOCK_EXCL, and so for most cases this wait is a
470 * no-op.
471 */
472 inode_dio_wait(inode);
473 drained_dio = true;
474 goto restart;
475 }
476
477 trace_xfs_zero_eof(ip, isize, iocb->ki_pos - isize);
478 error = xfs_zero_range(ip, isize, iocb->ki_pos - isize, NULL);
479 if (error)
480 return error;
481 } else
482 spin_unlock(&ip->i_flags_lock);
483
484out:
485 return kiocb_modified(iocb);
486}
487
488static int
489xfs_dio_write_end_io(
490 struct kiocb *iocb,
491 ssize_t size,
492 int error,
493 unsigned flags)
494{
495 struct inode *inode = file_inode(iocb->ki_filp);
496 struct xfs_inode *ip = XFS_I(inode);
497 loff_t offset = iocb->ki_pos;
498 unsigned int nofs_flag;
499
500 trace_xfs_end_io_direct_write(ip, offset, size);
501
502 if (xfs_is_shutdown(ip->i_mount))
503 return -EIO;
504
505 if (error)
506 return error;
507 if (!size)
508 return 0;
509
510 /*
511 * Capture amount written on completion as we can't reliably account
512 * for it on submission.
513 */
514 XFS_STATS_ADD(ip->i_mount, xs_write_bytes, size);
515
516 /*
517 * We can allocate memory here while doing writeback on behalf of
518 * memory reclaim. To avoid memory allocation deadlocks set the
519 * task-wide nofs context for the following operations.
520 */
521 nofs_flag = memalloc_nofs_save();
522
523 if (flags & IOMAP_DIO_COW) {
524 error = xfs_reflink_end_cow(ip, offset, size);
525 if (error)
526 goto out;
527 }
528
529 /*
530 * Unwritten conversion updates the in-core isize after extent
531 * conversion but before updating the on-disk size. Updating isize any
532 * earlier allows a racing dio read to find unwritten extents before
533 * they are converted.
534 */
535 if (flags & IOMAP_DIO_UNWRITTEN) {
536 error = xfs_iomap_write_unwritten(ip, offset, size, true);
537 goto out;
538 }
539
540 /*
541 * We need to update the in-core inode size here so that we don't end up
542 * with the on-disk inode size being outside the in-core inode size. We
543 * have no other method of updating EOF for AIO, so always do it here
544 * if necessary.
545 *
546 * We need to lock the test/set EOF update as we can be racing with
547 * other IO completions here to update the EOF. Failing to serialise
548 * here can result in EOF moving backwards and Bad Things Happen when
549 * that occurs.
550 *
551 * As IO completion only ever extends EOF, we can do an unlocked check
552 * here to avoid taking the spinlock. If we land within the current EOF,
553 * then we do not need to do an extending update at all, and we don't
554 * need to take the lock to check this. If we race with an update moving
555 * EOF, then we'll either still be beyond EOF and need to take the lock,
556 * or we'll be within EOF and we don't need to take it at all.
557 */
558 if (offset + size <= i_size_read(inode))
559 goto out;
560
561 spin_lock(&ip->i_flags_lock);
562 if (offset + size > i_size_read(inode)) {
563 i_size_write(inode, offset + size);
564 spin_unlock(&ip->i_flags_lock);
565 error = xfs_setfilesize(ip, offset, size);
566 } else {
567 spin_unlock(&ip->i_flags_lock);
568 }
569
570out:
571 memalloc_nofs_restore(nofs_flag);
572 return error;
573}
574
575static const struct iomap_dio_ops xfs_dio_write_ops = {
576 .end_io = xfs_dio_write_end_io,
577};
578
579/*
580 * Handle block aligned direct I/O writes
581 */
582static noinline ssize_t
583xfs_file_dio_write_aligned(
584 struct xfs_inode *ip,
585 struct kiocb *iocb,
586 struct iov_iter *from)
587{
588 unsigned int iolock = XFS_IOLOCK_SHARED;
589 ssize_t ret;
590
591 ret = xfs_ilock_iocb_for_write(iocb, &iolock);
592 if (ret)
593 return ret;
594 ret = xfs_file_write_checks(iocb, from, &iolock);
595 if (ret)
596 goto out_unlock;
597
598 /*
599 * We don't need to hold the IOLOCK exclusively across the IO, so demote
600 * the iolock back to shared if we had to take the exclusive lock in
601 * xfs_file_write_checks() for other reasons.
602 */
603 if (iolock == XFS_IOLOCK_EXCL) {
604 xfs_ilock_demote(ip, XFS_IOLOCK_EXCL);
605 iolock = XFS_IOLOCK_SHARED;
606 }
607 trace_xfs_file_direct_write(iocb, from);
608 ret = iomap_dio_rw(iocb, from, &xfs_direct_write_iomap_ops,
609 &xfs_dio_write_ops, 0, NULL, 0);
610out_unlock:
611 if (iolock)
612 xfs_iunlock(ip, iolock);
613 return ret;
614}
615
616/*
617 * Handle block unaligned direct I/O writes
618 *
619 * In most cases direct I/O writes will be done holding IOLOCK_SHARED, allowing
620 * them to be done in parallel with reads and other direct I/O writes. However,
621 * if the I/O is not aligned to filesystem blocks, the direct I/O layer may need
622 * to do sub-block zeroing and that requires serialisation against other direct
623 * I/O to the same block. In this case we need to serialise the submission of
624 * the unaligned I/O so that we don't get racing block zeroing in the dio layer.
625 * In the case where sub-block zeroing is not required, we can do concurrent
626 * sub-block dios to the same block successfully.
627 *
628 * Optimistically submit the I/O using the shared lock first, but use the
629 * IOMAP_DIO_OVERWRITE_ONLY flag to tell the lower layers to return -EAGAIN
630 * if block allocation or partial block zeroing would be required. In that case
631 * we try again with the exclusive lock.
632 */
633static noinline ssize_t
634xfs_file_dio_write_unaligned(
635 struct xfs_inode *ip,
636 struct kiocb *iocb,
637 struct iov_iter *from)
638{
639 size_t isize = i_size_read(VFS_I(ip));
640 size_t count = iov_iter_count(from);
641 unsigned int iolock = XFS_IOLOCK_SHARED;
642 unsigned int flags = IOMAP_DIO_OVERWRITE_ONLY;
643 ssize_t ret;
644
645 /*
646 * Extending writes need exclusivity because of the sub-block zeroing
647 * that the DIO code always does for partial tail blocks beyond EOF, so
648 * don't even bother trying the fast path in this case.
649 */
650 if (iocb->ki_pos > isize || iocb->ki_pos + count >= isize) {
651 if (iocb->ki_flags & IOCB_NOWAIT)
652 return -EAGAIN;
653retry_exclusive:
654 iolock = XFS_IOLOCK_EXCL;
655 flags = IOMAP_DIO_FORCE_WAIT;
656 }
657
658 ret = xfs_ilock_iocb_for_write(iocb, &iolock);
659 if (ret)
660 return ret;
661
662 /*
663 * We can't properly handle unaligned direct I/O to reflink files yet,
664 * as we can't unshare a partial block.
665 */
666 if (xfs_is_cow_inode(ip)) {
667 trace_xfs_reflink_bounce_dio_write(iocb, from);
668 ret = -ENOTBLK;
669 goto out_unlock;
670 }
671
672 ret = xfs_file_write_checks(iocb, from, &iolock);
673 if (ret)
674 goto out_unlock;
675
676 /*
677 * If we are doing exclusive unaligned I/O, this must be the only I/O
678 * in-flight. Otherwise we risk data corruption due to unwritten extent
679 * conversions from the AIO end_io handler. Wait for all other I/O to
680 * drain first.
681 */
682 if (flags & IOMAP_DIO_FORCE_WAIT)
683 inode_dio_wait(VFS_I(ip));
684
685 trace_xfs_file_direct_write(iocb, from);
686 ret = iomap_dio_rw(iocb, from, &xfs_direct_write_iomap_ops,
687 &xfs_dio_write_ops, flags, NULL, 0);
688
689 /*
690 * Retry unaligned I/O with exclusive blocking semantics if the DIO
691 * layer rejected it for mapping or locking reasons. If we are doing
692 * nonblocking user I/O, propagate the error.
693 */
694 if (ret == -EAGAIN && !(iocb->ki_flags & IOCB_NOWAIT)) {
695 ASSERT(flags & IOMAP_DIO_OVERWRITE_ONLY);
696 xfs_iunlock(ip, iolock);
697 goto retry_exclusive;
698 }
699
700out_unlock:
701 if (iolock)
702 xfs_iunlock(ip, iolock);
703 return ret;
704}
705
706static ssize_t
707xfs_file_dio_write(
708 struct kiocb *iocb,
709 struct iov_iter *from)
710{
711 struct xfs_inode *ip = XFS_I(file_inode(iocb->ki_filp));
712 struct xfs_buftarg *target = xfs_inode_buftarg(ip);
713 size_t count = iov_iter_count(from);
714
715 /* direct I/O must be aligned to device logical sector size */
716 if ((iocb->ki_pos | count) & target->bt_logical_sectormask)
717 return -EINVAL;
718 if ((iocb->ki_pos | count) & ip->i_mount->m_blockmask)
719 return xfs_file_dio_write_unaligned(ip, iocb, from);
720 return xfs_file_dio_write_aligned(ip, iocb, from);
721}
722
723static noinline ssize_t
724xfs_file_dax_write(
725 struct kiocb *iocb,
726 struct iov_iter *from)
727{
728 struct inode *inode = iocb->ki_filp->f_mapping->host;
729 struct xfs_inode *ip = XFS_I(inode);
730 unsigned int iolock = XFS_IOLOCK_EXCL;
731 ssize_t ret, error = 0;
732 loff_t pos;
733
734 ret = xfs_ilock_iocb(iocb, iolock);
735 if (ret)
736 return ret;
737 ret = xfs_file_write_checks(iocb, from, &iolock);
738 if (ret)
739 goto out;
740
741 pos = iocb->ki_pos;
742
743 trace_xfs_file_dax_write(iocb, from);
744 ret = dax_iomap_rw(iocb, from, &xfs_dax_write_iomap_ops);
745 if (ret > 0 && iocb->ki_pos > i_size_read(inode)) {
746 i_size_write(inode, iocb->ki_pos);
747 error = xfs_setfilesize(ip, pos, ret);
748 }
749out:
750 if (iolock)
751 xfs_iunlock(ip, iolock);
752 if (error)
753 return error;
754
755 if (ret > 0) {
756 XFS_STATS_ADD(ip->i_mount, xs_write_bytes, ret);
757
758 /* Handle various SYNC-type writes */
759 ret = generic_write_sync(iocb, ret);
760 }
761 return ret;
762}
763
764STATIC ssize_t
765xfs_file_buffered_write(
766 struct kiocb *iocb,
767 struct iov_iter *from)
768{
769 struct inode *inode = iocb->ki_filp->f_mapping->host;
770 struct xfs_inode *ip = XFS_I(inode);
771 ssize_t ret;
772 bool cleared_space = false;
773 unsigned int iolock;
774
775write_retry:
776 iolock = XFS_IOLOCK_EXCL;
777 ret = xfs_ilock_iocb(iocb, iolock);
778 if (ret)
779 return ret;
780
781 ret = xfs_file_write_checks(iocb, from, &iolock);
782 if (ret)
783 goto out;
784
785 trace_xfs_file_buffered_write(iocb, from);
786 ret = iomap_file_buffered_write(iocb, from,
787 &xfs_buffered_write_iomap_ops);
788
789 /*
790 * If we hit a space limit, try to free up some lingering preallocated
791 * space before returning an error. In the case of ENOSPC, first try to
792 * write back all dirty inodes to free up some of the excess reserved
793 * metadata space. This reduces the chances that the eofblocks scan
794 * waits on dirty mappings. Since xfs_flush_inodes() is serialized, this
795 * also behaves as a filter to prevent too many eofblocks scans from
796 * running at the same time. Use a synchronous scan to increase the
797 * effectiveness of the scan.
798 */
799 if (ret == -EDQUOT && !cleared_space) {
800 xfs_iunlock(ip, iolock);
801 xfs_blockgc_free_quota(ip, XFS_ICWALK_FLAG_SYNC);
802 cleared_space = true;
803 goto write_retry;
804 } else if (ret == -ENOSPC && !cleared_space) {
805 struct xfs_icwalk icw = {0};
806
807 cleared_space = true;
808 xfs_flush_inodes(ip->i_mount);
809
810 xfs_iunlock(ip, iolock);
811 icw.icw_flags = XFS_ICWALK_FLAG_SYNC;
812 xfs_blockgc_free_space(ip->i_mount, &icw);
813 goto write_retry;
814 }
815
816out:
817 if (iolock)
818 xfs_iunlock(ip, iolock);
819
820 if (ret > 0) {
821 XFS_STATS_ADD(ip->i_mount, xs_write_bytes, ret);
822 /* Handle various SYNC-type writes */
823 ret = generic_write_sync(iocb, ret);
824 }
825 return ret;
826}
827
828STATIC ssize_t
829xfs_file_write_iter(
830 struct kiocb *iocb,
831 struct iov_iter *from)
832{
833 struct inode *inode = iocb->ki_filp->f_mapping->host;
834 struct xfs_inode *ip = XFS_I(inode);
835 ssize_t ret;
836 size_t ocount = iov_iter_count(from);
837
838 XFS_STATS_INC(ip->i_mount, xs_write_calls);
839
840 if (ocount == 0)
841 return 0;
842
843 if (xfs_is_shutdown(ip->i_mount))
844 return -EIO;
845
846 if (IS_DAX(inode))
847 return xfs_file_dax_write(iocb, from);
848
849 if (iocb->ki_flags & IOCB_DIRECT) {
850 /*
851 * Allow a directio write to fall back to a buffered
852 * write *only* in the case that we're doing a reflink
853 * CoW. In all other directio scenarios we do not
854 * allow an operation to fall back to buffered mode.
855 */
856 ret = xfs_file_dio_write(iocb, from);
857 if (ret != -ENOTBLK)
858 return ret;
859 }
860
861 return xfs_file_buffered_write(iocb, from);
862}
863
864static void
865xfs_wait_dax_page(
866 struct inode *inode)
867{
868 struct xfs_inode *ip = XFS_I(inode);
869
870 xfs_iunlock(ip, XFS_MMAPLOCK_EXCL);
871 schedule();
872 xfs_ilock(ip, XFS_MMAPLOCK_EXCL);
873}
874
875int
876xfs_break_dax_layouts(
877 struct inode *inode,
878 bool *retry)
879{
880 struct page *page;
881
882 ASSERT(xfs_isilocked(XFS_I(inode), XFS_MMAPLOCK_EXCL));
883
884 page = dax_layout_busy_page(inode->i_mapping);
885 if (!page)
886 return 0;
887
888 *retry = true;
889 return ___wait_var_event(&page->_refcount,
890 atomic_read(&page->_refcount) == 1, TASK_INTERRUPTIBLE,
891 0, 0, xfs_wait_dax_page(inode));
892}
893
894int
895xfs_break_layouts(
896 struct inode *inode,
897 uint *iolock,
898 enum layout_break_reason reason)
899{
900 bool retry;
901 int error;
902
903 ASSERT(xfs_isilocked(XFS_I(inode), XFS_IOLOCK_SHARED|XFS_IOLOCK_EXCL));
904
905 do {
906 retry = false;
907 switch (reason) {
908 case BREAK_UNMAP:
909 error = xfs_break_dax_layouts(inode, &retry);
910 if (error || retry)
911 break;
912 fallthrough;
913 case BREAK_WRITE:
914 error = xfs_break_leased_layouts(inode, iolock, &retry);
915 break;
916 default:
917 WARN_ON_ONCE(1);
918 error = -EINVAL;
919 }
920 } while (error == 0 && retry);
921
922 return error;
923}
924
925/* Does this file, inode, or mount want synchronous writes? */
926static inline bool xfs_file_sync_writes(struct file *filp)
927{
928 struct xfs_inode *ip = XFS_I(file_inode(filp));
929
930 if (xfs_has_wsync(ip->i_mount))
931 return true;
932 if (filp->f_flags & (__O_SYNC | O_DSYNC))
933 return true;
934 if (IS_SYNC(file_inode(filp)))
935 return true;
936
937 return false;
938}
939
940#define XFS_FALLOC_FL_SUPPORTED \
941 (FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | \
942 FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE | \
943 FALLOC_FL_INSERT_RANGE | FALLOC_FL_UNSHARE_RANGE)
944
945STATIC long
946xfs_file_fallocate(
947 struct file *file,
948 int mode,
949 loff_t offset,
950 loff_t len)
951{
952 struct inode *inode = file_inode(file);
953 struct xfs_inode *ip = XFS_I(inode);
954 long error;
955 uint iolock = XFS_IOLOCK_EXCL | XFS_MMAPLOCK_EXCL;
956 loff_t new_size = 0;
957 bool do_file_insert = false;
958
959 if (!S_ISREG(inode->i_mode))
960 return -EINVAL;
961 if (mode & ~XFS_FALLOC_FL_SUPPORTED)
962 return -EOPNOTSUPP;
963
964 xfs_ilock(ip, iolock);
965 error = xfs_break_layouts(inode, &iolock, BREAK_UNMAP);
966 if (error)
967 goto out_unlock;
968
969 /*
970 * Must wait for all AIO to complete before we continue as AIO can
971 * change the file size on completion without holding any locks we
972 * currently hold. We must do this first because AIO can update both
973 * the on disk and in memory inode sizes, and the operations that follow
974 * require the in-memory size to be fully up-to-date.
975 */
976 inode_dio_wait(inode);
977
978 /*
979 * Now AIO and DIO has drained we flush and (if necessary) invalidate
980 * the cached range over the first operation we are about to run.
981 *
982 * We care about zero and collapse here because they both run a hole
983 * punch over the range first. Because that can zero data, and the range
984 * of invalidation for the shift operations is much larger, we still do
985 * the required flush for collapse in xfs_prepare_shift().
986 *
987 * Insert has the same range requirements as collapse, and we extend the
988 * file first which can zero data. Hence insert has the same
989 * flush/invalidate requirements as collapse and so they are both
990 * handled at the right time by xfs_prepare_shift().
991 */
992 if (mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE |
993 FALLOC_FL_COLLAPSE_RANGE)) {
994 error = xfs_flush_unmap_range(ip, offset, len);
995 if (error)
996 goto out_unlock;
997 }
998
999 error = file_modified(file);
1000 if (error)
1001 goto out_unlock;
1002
1003 if (mode & FALLOC_FL_PUNCH_HOLE) {
1004 error = xfs_free_file_space(ip, offset, len);
1005 if (error)
1006 goto out_unlock;
1007 } else if (mode & FALLOC_FL_COLLAPSE_RANGE) {
1008 if (!xfs_is_falloc_aligned(ip, offset, len)) {
1009 error = -EINVAL;
1010 goto out_unlock;
1011 }
1012
1013 /*
1014 * There is no need to overlap collapse range with EOF,
1015 * in which case it is effectively a truncate operation
1016 */
1017 if (offset + len >= i_size_read(inode)) {
1018 error = -EINVAL;
1019 goto out_unlock;
1020 }
1021
1022 new_size = i_size_read(inode) - len;
1023
1024 error = xfs_collapse_file_space(ip, offset, len);
1025 if (error)
1026 goto out_unlock;
1027 } else if (mode & FALLOC_FL_INSERT_RANGE) {
1028 loff_t isize = i_size_read(inode);
1029
1030 if (!xfs_is_falloc_aligned(ip, offset, len)) {
1031 error = -EINVAL;
1032 goto out_unlock;
1033 }
1034
1035 /*
1036 * New inode size must not exceed ->s_maxbytes, accounting for
1037 * possible signed overflow.
1038 */
1039 if (inode->i_sb->s_maxbytes - isize < len) {
1040 error = -EFBIG;
1041 goto out_unlock;
1042 }
1043 new_size = isize + len;
1044
1045 /* Offset should be less than i_size */
1046 if (offset >= isize) {
1047 error = -EINVAL;
1048 goto out_unlock;
1049 }
1050 do_file_insert = true;
1051 } else {
1052 if (!(mode & FALLOC_FL_KEEP_SIZE) &&
1053 offset + len > i_size_read(inode)) {
1054 new_size = offset + len;
1055 error = inode_newsize_ok(inode, new_size);
1056 if (error)
1057 goto out_unlock;
1058 }
1059
1060 if (mode & FALLOC_FL_ZERO_RANGE) {
1061 /*
1062 * Punch a hole and prealloc the range. We use a hole
1063 * punch rather than unwritten extent conversion for two
1064 * reasons:
1065 *
1066 * 1.) Hole punch handles partial block zeroing for us.
1067 * 2.) If prealloc returns ENOSPC, the file range is
1068 * still zero-valued by virtue of the hole punch.
1069 */
1070 unsigned int blksize = i_blocksize(inode);
1071
1072 trace_xfs_zero_file_space(ip);
1073
1074 error = xfs_free_file_space(ip, offset, len);
1075 if (error)
1076 goto out_unlock;
1077
1078 len = round_up(offset + len, blksize) -
1079 round_down(offset, blksize);
1080 offset = round_down(offset, blksize);
1081 } else if (mode & FALLOC_FL_UNSHARE_RANGE) {
1082 error = xfs_reflink_unshare(ip, offset, len);
1083 if (error)
1084 goto out_unlock;
1085 } else {
1086 /*
1087 * If always_cow mode we can't use preallocations and
1088 * thus should not create them.
1089 */
1090 if (xfs_is_always_cow_inode(ip)) {
1091 error = -EOPNOTSUPP;
1092 goto out_unlock;
1093 }
1094 }
1095
1096 if (!xfs_is_always_cow_inode(ip)) {
1097 error = xfs_alloc_file_space(ip, offset, len);
1098 if (error)
1099 goto out_unlock;
1100 }
1101 }
1102
1103 /* Change file size if needed */
1104 if (new_size) {
1105 struct iattr iattr;
1106
1107 iattr.ia_valid = ATTR_SIZE;
1108 iattr.ia_size = new_size;
1109 error = xfs_vn_setattr_size(file_mnt_idmap(file),
1110 file_dentry(file), &iattr);
1111 if (error)
1112 goto out_unlock;
1113 }
1114
1115 /*
1116 * Perform hole insertion now that the file size has been
1117 * updated so that if we crash during the operation we don't
1118 * leave shifted extents past EOF and hence losing access to
1119 * the data that is contained within them.
1120 */
1121 if (do_file_insert) {
1122 error = xfs_insert_file_space(ip, offset, len);
1123 if (error)
1124 goto out_unlock;
1125 }
1126
1127 if (xfs_file_sync_writes(file))
1128 error = xfs_log_force_inode(ip);
1129
1130out_unlock:
1131 xfs_iunlock(ip, iolock);
1132 return error;
1133}
1134
1135STATIC int
1136xfs_file_fadvise(
1137 struct file *file,
1138 loff_t start,
1139 loff_t end,
1140 int advice)
1141{
1142 struct xfs_inode *ip = XFS_I(file_inode(file));
1143 int ret;
1144 int lockflags = 0;
1145
1146 /*
1147 * Operations creating pages in page cache need protection from hole
1148 * punching and similar ops
1149 */
1150 if (advice == POSIX_FADV_WILLNEED) {
1151 lockflags = XFS_IOLOCK_SHARED;
1152 xfs_ilock(ip, lockflags);
1153 }
1154 ret = generic_fadvise(file, start, end, advice);
1155 if (lockflags)
1156 xfs_iunlock(ip, lockflags);
1157 return ret;
1158}
1159
1160STATIC loff_t
1161xfs_file_remap_range(
1162 struct file *file_in,
1163 loff_t pos_in,
1164 struct file *file_out,
1165 loff_t pos_out,
1166 loff_t len,
1167 unsigned int remap_flags)
1168{
1169 struct inode *inode_in = file_inode(file_in);
1170 struct xfs_inode *src = XFS_I(inode_in);
1171 struct inode *inode_out = file_inode(file_out);
1172 struct xfs_inode *dest = XFS_I(inode_out);
1173 struct xfs_mount *mp = src->i_mount;
1174 loff_t remapped = 0;
1175 xfs_extlen_t cowextsize;
1176 int ret;
1177
1178 if (remap_flags & ~(REMAP_FILE_DEDUP | REMAP_FILE_ADVISORY))
1179 return -EINVAL;
1180
1181 if (!xfs_has_reflink(mp))
1182 return -EOPNOTSUPP;
1183
1184 if (xfs_is_shutdown(mp))
1185 return -EIO;
1186
1187 /* Prepare and then clone file data. */
1188 ret = xfs_reflink_remap_prep(file_in, pos_in, file_out, pos_out,
1189 &len, remap_flags);
1190 if (ret || len == 0)
1191 return ret;
1192
1193 trace_xfs_reflink_remap_range(src, pos_in, len, dest, pos_out);
1194
1195 ret = xfs_reflink_remap_blocks(src, pos_in, dest, pos_out, len,
1196 &remapped);
1197 if (ret)
1198 goto out_unlock;
1199
1200 /*
1201 * Carry the cowextsize hint from src to dest if we're sharing the
1202 * entire source file to the entire destination file, the source file
1203 * has a cowextsize hint, and the destination file does not.
1204 */
1205 cowextsize = 0;
1206 if (pos_in == 0 && len == i_size_read(inode_in) &&
1207 (src->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE) &&
1208 pos_out == 0 && len >= i_size_read(inode_out) &&
1209 !(dest->i_diflags2 & XFS_DIFLAG2_COWEXTSIZE))
1210 cowextsize = src->i_cowextsize;
1211
1212 ret = xfs_reflink_update_dest(dest, pos_out + len, cowextsize,
1213 remap_flags);
1214 if (ret)
1215 goto out_unlock;
1216
1217 if (xfs_file_sync_writes(file_in) || xfs_file_sync_writes(file_out))
1218 xfs_log_force_inode(dest);
1219out_unlock:
1220 xfs_iunlock2_remapping(src, dest);
1221 if (ret)
1222 trace_xfs_reflink_remap_range_error(dest, ret, _RET_IP_);
1223 return remapped > 0 ? remapped : ret;
1224}
1225
1226STATIC int
1227xfs_file_open(
1228 struct inode *inode,
1229 struct file *file)
1230{
1231 if (xfs_is_shutdown(XFS_M(inode->i_sb)))
1232 return -EIO;
1233 file->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC | FMODE_BUF_WASYNC |
1234 FMODE_DIO_PARALLEL_WRITE | FMODE_CAN_ODIRECT;
1235 return generic_file_open(inode, file);
1236}
1237
1238STATIC int
1239xfs_dir_open(
1240 struct inode *inode,
1241 struct file *file)
1242{
1243 struct xfs_inode *ip = XFS_I(inode);
1244 unsigned int mode;
1245 int error;
1246
1247 error = xfs_file_open(inode, file);
1248 if (error)
1249 return error;
1250
1251 /*
1252 * If there are any blocks, read-ahead block 0 as we're almost
1253 * certain to have the next operation be a read there.
1254 */
1255 mode = xfs_ilock_data_map_shared(ip);
1256 if (ip->i_df.if_nextents > 0)
1257 error = xfs_dir3_data_readahead(ip, 0, 0);
1258 xfs_iunlock(ip, mode);
1259 return error;
1260}
1261
1262STATIC int
1263xfs_file_release(
1264 struct inode *inode,
1265 struct file *filp)
1266{
1267 return xfs_release(XFS_I(inode));
1268}
1269
1270STATIC int
1271xfs_file_readdir(
1272 struct file *file,
1273 struct dir_context *ctx)
1274{
1275 struct inode *inode = file_inode(file);
1276 xfs_inode_t *ip = XFS_I(inode);
1277 size_t bufsize;
1278
1279 /*
1280 * The Linux API doesn't pass down the total size of the buffer
1281 * we read into down to the filesystem. With the filldir concept
1282 * it's not needed for correct information, but the XFS dir2 leaf
1283 * code wants an estimate of the buffer size to calculate it's
1284 * readahead window and size the buffers used for mapping to
1285 * physical blocks.
1286 *
1287 * Try to give it an estimate that's good enough, maybe at some
1288 * point we can change the ->readdir prototype to include the
1289 * buffer size. For now we use the current glibc buffer size.
1290 */
1291 bufsize = (size_t)min_t(loff_t, XFS_READDIR_BUFSIZE, ip->i_disk_size);
1292
1293 return xfs_readdir(NULL, ip, ctx, bufsize);
1294}
1295
1296STATIC loff_t
1297xfs_file_llseek(
1298 struct file *file,
1299 loff_t offset,
1300 int whence)
1301{
1302 struct inode *inode = file->f_mapping->host;
1303
1304 if (xfs_is_shutdown(XFS_I(inode)->i_mount))
1305 return -EIO;
1306
1307 switch (whence) {
1308 default:
1309 return generic_file_llseek(file, offset, whence);
1310 case SEEK_HOLE:
1311 offset = iomap_seek_hole(inode, offset, &xfs_seek_iomap_ops);
1312 break;
1313 case SEEK_DATA:
1314 offset = iomap_seek_data(inode, offset, &xfs_seek_iomap_ops);
1315 break;
1316 }
1317
1318 if (offset < 0)
1319 return offset;
1320 return vfs_setpos(file, offset, inode->i_sb->s_maxbytes);
1321}
1322
1323#ifdef CONFIG_FS_DAX
1324static inline vm_fault_t
1325xfs_dax_fault(
1326 struct vm_fault *vmf,
1327 unsigned int order,
1328 bool write_fault,
1329 pfn_t *pfn)
1330{
1331 return dax_iomap_fault(vmf, order, pfn, NULL,
1332 (write_fault && !vmf->cow_page) ?
1333 &xfs_dax_write_iomap_ops :
1334 &xfs_read_iomap_ops);
1335}
1336#else
1337static inline vm_fault_t
1338xfs_dax_fault(
1339 struct vm_fault *vmf,
1340 unsigned int order,
1341 bool write_fault,
1342 pfn_t *pfn)
1343{
1344 ASSERT(0);
1345 return VM_FAULT_SIGBUS;
1346}
1347#endif
1348
1349/*
1350 * Locking for serialisation of IO during page faults. This results in a lock
1351 * ordering of:
1352 *
1353 * mmap_lock (MM)
1354 * sb_start_pagefault(vfs, freeze)
1355 * invalidate_lock (vfs/XFS_MMAPLOCK - truncate serialisation)
1356 * page_lock (MM)
1357 * i_lock (XFS - extent map serialisation)
1358 */
1359static vm_fault_t
1360__xfs_filemap_fault(
1361 struct vm_fault *vmf,
1362 unsigned int order,
1363 bool write_fault)
1364{
1365 struct inode *inode = file_inode(vmf->vma->vm_file);
1366 struct xfs_inode *ip = XFS_I(inode);
1367 vm_fault_t ret;
1368 unsigned int lock_mode = 0;
1369
1370 trace_xfs_filemap_fault(ip, order, write_fault);
1371
1372 if (write_fault) {
1373 sb_start_pagefault(inode->i_sb);
1374 file_update_time(vmf->vma->vm_file);
1375 }
1376
1377 if (IS_DAX(inode) || write_fault)
1378 lock_mode = xfs_ilock_for_write_fault(XFS_I(inode));
1379
1380 if (IS_DAX(inode)) {
1381 pfn_t pfn;
1382
1383 ret = xfs_dax_fault(vmf, order, write_fault, &pfn);
1384 if (ret & VM_FAULT_NEEDDSYNC)
1385 ret = dax_finish_sync_fault(vmf, order, pfn);
1386 } else if (write_fault) {
1387 ret = iomap_page_mkwrite(vmf, &xfs_page_mkwrite_iomap_ops);
1388 } else {
1389 ret = filemap_fault(vmf);
1390 }
1391
1392 if (lock_mode)
1393 xfs_iunlock(XFS_I(inode), lock_mode);
1394
1395 if (write_fault)
1396 sb_end_pagefault(inode->i_sb);
1397 return ret;
1398}
1399
1400static inline bool
1401xfs_is_write_fault(
1402 struct vm_fault *vmf)
1403{
1404 return (vmf->flags & FAULT_FLAG_WRITE) &&
1405 (vmf->vma->vm_flags & VM_SHARED);
1406}
1407
1408static vm_fault_t
1409xfs_filemap_fault(
1410 struct vm_fault *vmf)
1411{
1412 /* DAX can shortcut the normal fault path on write faults! */
1413 return __xfs_filemap_fault(vmf, 0,
1414 IS_DAX(file_inode(vmf->vma->vm_file)) &&
1415 xfs_is_write_fault(vmf));
1416}
1417
1418static vm_fault_t
1419xfs_filemap_huge_fault(
1420 struct vm_fault *vmf,
1421 unsigned int order)
1422{
1423 if (!IS_DAX(file_inode(vmf->vma->vm_file)))
1424 return VM_FAULT_FALLBACK;
1425
1426 /* DAX can shortcut the normal fault path on write faults! */
1427 return __xfs_filemap_fault(vmf, order,
1428 xfs_is_write_fault(vmf));
1429}
1430
1431static vm_fault_t
1432xfs_filemap_page_mkwrite(
1433 struct vm_fault *vmf)
1434{
1435 return __xfs_filemap_fault(vmf, 0, true);
1436}
1437
1438/*
1439 * pfn_mkwrite was originally intended to ensure we capture time stamp updates
1440 * on write faults. In reality, it needs to serialise against truncate and
1441 * prepare memory for writing so handle is as standard write fault.
1442 */
1443static vm_fault_t
1444xfs_filemap_pfn_mkwrite(
1445 struct vm_fault *vmf)
1446{
1447
1448 return __xfs_filemap_fault(vmf, 0, true);
1449}
1450
1451static const struct vm_operations_struct xfs_file_vm_ops = {
1452 .fault = xfs_filemap_fault,
1453 .huge_fault = xfs_filemap_huge_fault,
1454 .map_pages = filemap_map_pages,
1455 .page_mkwrite = xfs_filemap_page_mkwrite,
1456 .pfn_mkwrite = xfs_filemap_pfn_mkwrite,
1457};
1458
1459STATIC int
1460xfs_file_mmap(
1461 struct file *file,
1462 struct vm_area_struct *vma)
1463{
1464 struct inode *inode = file_inode(file);
1465 struct xfs_buftarg *target = xfs_inode_buftarg(XFS_I(inode));
1466
1467 /*
1468 * We don't support synchronous mappings for non-DAX files and
1469 * for DAX files if underneath dax_device is not synchronous.
1470 */
1471 if (!daxdev_mapping_supported(vma, target->bt_daxdev))
1472 return -EOPNOTSUPP;
1473
1474 file_accessed(file);
1475 vma->vm_ops = &xfs_file_vm_ops;
1476 if (IS_DAX(inode))
1477 vm_flags_set(vma, VM_HUGEPAGE);
1478 return 0;
1479}
1480
1481const struct file_operations xfs_file_operations = {
1482 .llseek = xfs_file_llseek,
1483 .read_iter = xfs_file_read_iter,
1484 .write_iter = xfs_file_write_iter,
1485 .splice_read = xfs_file_splice_read,
1486 .splice_write = iter_file_splice_write,
1487 .iopoll = iocb_bio_iopoll,
1488 .unlocked_ioctl = xfs_file_ioctl,
1489#ifdef CONFIG_COMPAT
1490 .compat_ioctl = xfs_file_compat_ioctl,
1491#endif
1492 .mmap = xfs_file_mmap,
1493 .mmap_supported_flags = MAP_SYNC,
1494 .open = xfs_file_open,
1495 .release = xfs_file_release,
1496 .fsync = xfs_file_fsync,
1497 .get_unmapped_area = thp_get_unmapped_area,
1498 .fallocate = xfs_file_fallocate,
1499 .fadvise = xfs_file_fadvise,
1500 .remap_file_range = xfs_file_remap_range,
1501};
1502
1503const struct file_operations xfs_dir_file_operations = {
1504 .open = xfs_dir_open,
1505 .read = generic_read_dir,
1506 .iterate_shared = xfs_file_readdir,
1507 .llseek = generic_file_llseek,
1508 .unlocked_ioctl = xfs_file_ioctl,
1509#ifdef CONFIG_COMPAT
1510 .compat_ioctl = xfs_file_compat_ioctl,
1511#endif
1512 .fsync = xfs_dir_fsync,
1513};
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
4 * All Rights Reserved.
5 */
6#include "xfs.h"
7#include "xfs_fs.h"
8#include "xfs_shared.h"
9#include "xfs_format.h"
10#include "xfs_log_format.h"
11#include "xfs_trans_resv.h"
12#include "xfs_mount.h"
13#include "xfs_inode.h"
14#include "xfs_trans.h"
15#include "xfs_inode_item.h"
16#include "xfs_bmap.h"
17#include "xfs_bmap_util.h"
18#include "xfs_dir2.h"
19#include "xfs_dir2_priv.h"
20#include "xfs_ioctl.h"
21#include "xfs_trace.h"
22#include "xfs_log.h"
23#include "xfs_icache.h"
24#include "xfs_pnfs.h"
25#include "xfs_iomap.h"
26#include "xfs_reflink.h"
27
28#include <linux/falloc.h>
29#include <linux/backing-dev.h>
30#include <linux/mman.h>
31#include <linux/fadvise.h>
32
33static const struct vm_operations_struct xfs_file_vm_ops;
34
35int
36xfs_update_prealloc_flags(
37 struct xfs_inode *ip,
38 enum xfs_prealloc_flags flags)
39{
40 struct xfs_trans *tp;
41 int error;
42
43 error = xfs_trans_alloc(ip->i_mount, &M_RES(ip->i_mount)->tr_writeid,
44 0, 0, 0, &tp);
45 if (error)
46 return error;
47
48 xfs_ilock(ip, XFS_ILOCK_EXCL);
49 xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
50
51 if (!(flags & XFS_PREALLOC_INVISIBLE)) {
52 VFS_I(ip)->i_mode &= ~S_ISUID;
53 if (VFS_I(ip)->i_mode & S_IXGRP)
54 VFS_I(ip)->i_mode &= ~S_ISGID;
55 xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
56 }
57
58 if (flags & XFS_PREALLOC_SET)
59 ip->i_d.di_flags |= XFS_DIFLAG_PREALLOC;
60 if (flags & XFS_PREALLOC_CLEAR)
61 ip->i_d.di_flags &= ~XFS_DIFLAG_PREALLOC;
62
63 xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
64 if (flags & XFS_PREALLOC_SYNC)
65 xfs_trans_set_sync(tp);
66 return xfs_trans_commit(tp);
67}
68
69/*
70 * Fsync operations on directories are much simpler than on regular files,
71 * as there is no file data to flush, and thus also no need for explicit
72 * cache flush operations, and there are no non-transaction metadata updates
73 * on directories either.
74 */
75STATIC int
76xfs_dir_fsync(
77 struct file *file,
78 loff_t start,
79 loff_t end,
80 int datasync)
81{
82 struct xfs_inode *ip = XFS_I(file->f_mapping->host);
83 struct xfs_mount *mp = ip->i_mount;
84 xfs_lsn_t lsn = 0;
85
86 trace_xfs_dir_fsync(ip);
87
88 xfs_ilock(ip, XFS_ILOCK_SHARED);
89 if (xfs_ipincount(ip))
90 lsn = ip->i_itemp->ili_last_lsn;
91 xfs_iunlock(ip, XFS_ILOCK_SHARED);
92
93 if (!lsn)
94 return 0;
95 return xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, NULL);
96}
97
98STATIC int
99xfs_file_fsync(
100 struct file *file,
101 loff_t start,
102 loff_t end,
103 int datasync)
104{
105 struct inode *inode = file->f_mapping->host;
106 struct xfs_inode *ip = XFS_I(inode);
107 struct xfs_mount *mp = ip->i_mount;
108 int error = 0;
109 int log_flushed = 0;
110 xfs_lsn_t lsn = 0;
111
112 trace_xfs_file_fsync(ip);
113
114 error = file_write_and_wait_range(file, start, end);
115 if (error)
116 return error;
117
118 if (XFS_FORCED_SHUTDOWN(mp))
119 return -EIO;
120
121 xfs_iflags_clear(ip, XFS_ITRUNCATED);
122
123 /*
124 * If we have an RT and/or log subvolume we need to make sure to flush
125 * the write cache the device used for file data first. This is to
126 * ensure newly written file data make it to disk before logging the new
127 * inode size in case of an extending write.
128 */
129 if (XFS_IS_REALTIME_INODE(ip))
130 xfs_blkdev_issue_flush(mp->m_rtdev_targp);
131 else if (mp->m_logdev_targp != mp->m_ddev_targp)
132 xfs_blkdev_issue_flush(mp->m_ddev_targp);
133
134 /*
135 * All metadata updates are logged, which means that we just have to
136 * flush the log up to the latest LSN that touched the inode. If we have
137 * concurrent fsync/fdatasync() calls, we need them to all block on the
138 * log force before we clear the ili_fsync_fields field. This ensures
139 * that we don't get a racing sync operation that does not wait for the
140 * metadata to hit the journal before returning. If we race with
141 * clearing the ili_fsync_fields, then all that will happen is the log
142 * force will do nothing as the lsn will already be on disk. We can't
143 * race with setting ili_fsync_fields because that is done under
144 * XFS_ILOCK_EXCL, and that can't happen because we hold the lock shared
145 * until after the ili_fsync_fields is cleared.
146 */
147 xfs_ilock(ip, XFS_ILOCK_SHARED);
148 if (xfs_ipincount(ip)) {
149 if (!datasync ||
150 (ip->i_itemp->ili_fsync_fields & ~XFS_ILOG_TIMESTAMP))
151 lsn = ip->i_itemp->ili_last_lsn;
152 }
153
154 if (lsn) {
155 error = xfs_log_force_lsn(mp, lsn, XFS_LOG_SYNC, &log_flushed);
156 ip->i_itemp->ili_fsync_fields = 0;
157 }
158 xfs_iunlock(ip, XFS_ILOCK_SHARED);
159
160 /*
161 * If we only have a single device, and the log force about was
162 * a no-op we might have to flush the data device cache here.
163 * This can only happen for fdatasync/O_DSYNC if we were overwriting
164 * an already allocated file and thus do not have any metadata to
165 * commit.
166 */
167 if (!log_flushed && !XFS_IS_REALTIME_INODE(ip) &&
168 mp->m_logdev_targp == mp->m_ddev_targp)
169 xfs_blkdev_issue_flush(mp->m_ddev_targp);
170
171 return error;
172}
173
174STATIC ssize_t
175xfs_file_dio_aio_read(
176 struct kiocb *iocb,
177 struct iov_iter *to)
178{
179 struct xfs_inode *ip = XFS_I(file_inode(iocb->ki_filp));
180 size_t count = iov_iter_count(to);
181 ssize_t ret;
182
183 trace_xfs_file_direct_read(ip, count, iocb->ki_pos);
184
185 if (!count)
186 return 0; /* skip atime */
187
188 file_accessed(iocb->ki_filp);
189
190 xfs_ilock(ip, XFS_IOLOCK_SHARED);
191 ret = iomap_dio_rw(iocb, to, &xfs_iomap_ops, NULL);
192 xfs_iunlock(ip, XFS_IOLOCK_SHARED);
193
194 return ret;
195}
196
197static noinline ssize_t
198xfs_file_dax_read(
199 struct kiocb *iocb,
200 struct iov_iter *to)
201{
202 struct xfs_inode *ip = XFS_I(iocb->ki_filp->f_mapping->host);
203 size_t count = iov_iter_count(to);
204 ssize_t ret = 0;
205
206 trace_xfs_file_dax_read(ip, count, iocb->ki_pos);
207
208 if (!count)
209 return 0; /* skip atime */
210
211 if (iocb->ki_flags & IOCB_NOWAIT) {
212 if (!xfs_ilock_nowait(ip, XFS_IOLOCK_SHARED))
213 return -EAGAIN;
214 } else {
215 xfs_ilock(ip, XFS_IOLOCK_SHARED);
216 }
217
218 ret = dax_iomap_rw(iocb, to, &xfs_iomap_ops);
219 xfs_iunlock(ip, XFS_IOLOCK_SHARED);
220
221 file_accessed(iocb->ki_filp);
222 return ret;
223}
224
225STATIC ssize_t
226xfs_file_buffered_aio_read(
227 struct kiocb *iocb,
228 struct iov_iter *to)
229{
230 struct xfs_inode *ip = XFS_I(file_inode(iocb->ki_filp));
231 ssize_t ret;
232
233 trace_xfs_file_buffered_read(ip, iov_iter_count(to), iocb->ki_pos);
234
235 if (iocb->ki_flags & IOCB_NOWAIT) {
236 if (!xfs_ilock_nowait(ip, XFS_IOLOCK_SHARED))
237 return -EAGAIN;
238 } else {
239 xfs_ilock(ip, XFS_IOLOCK_SHARED);
240 }
241 ret = generic_file_read_iter(iocb, to);
242 xfs_iunlock(ip, XFS_IOLOCK_SHARED);
243
244 return ret;
245}
246
247STATIC ssize_t
248xfs_file_read_iter(
249 struct kiocb *iocb,
250 struct iov_iter *to)
251{
252 struct inode *inode = file_inode(iocb->ki_filp);
253 struct xfs_mount *mp = XFS_I(inode)->i_mount;
254 ssize_t ret = 0;
255
256 XFS_STATS_INC(mp, xs_read_calls);
257
258 if (XFS_FORCED_SHUTDOWN(mp))
259 return -EIO;
260
261 if (IS_DAX(inode))
262 ret = xfs_file_dax_read(iocb, to);
263 else if (iocb->ki_flags & IOCB_DIRECT)
264 ret = xfs_file_dio_aio_read(iocb, to);
265 else
266 ret = xfs_file_buffered_aio_read(iocb, to);
267
268 if (ret > 0)
269 XFS_STATS_ADD(mp, xs_read_bytes, ret);
270 return ret;
271}
272
273/*
274 * Common pre-write limit and setup checks.
275 *
276 * Called with the iolocked held either shared and exclusive according to
277 * @iolock, and returns with it held. Might upgrade the iolock to exclusive
278 * if called for a direct write beyond i_size.
279 */
280STATIC ssize_t
281xfs_file_aio_write_checks(
282 struct kiocb *iocb,
283 struct iov_iter *from,
284 int *iolock)
285{
286 struct file *file = iocb->ki_filp;
287 struct inode *inode = file->f_mapping->host;
288 struct xfs_inode *ip = XFS_I(inode);
289 ssize_t error = 0;
290 size_t count = iov_iter_count(from);
291 bool drained_dio = false;
292 loff_t isize;
293
294restart:
295 error = generic_write_checks(iocb, from);
296 if (error <= 0)
297 return error;
298
299 error = xfs_break_layouts(inode, iolock, BREAK_WRITE);
300 if (error)
301 return error;
302
303 /*
304 * For changing security info in file_remove_privs() we need i_rwsem
305 * exclusively.
306 */
307 if (*iolock == XFS_IOLOCK_SHARED && !IS_NOSEC(inode)) {
308 xfs_iunlock(ip, *iolock);
309 *iolock = XFS_IOLOCK_EXCL;
310 xfs_ilock(ip, *iolock);
311 goto restart;
312 }
313 /*
314 * If the offset is beyond the size of the file, we need to zero any
315 * blocks that fall between the existing EOF and the start of this
316 * write. If zeroing is needed and we are currently holding the
317 * iolock shared, we need to update it to exclusive which implies
318 * having to redo all checks before.
319 *
320 * We need to serialise against EOF updates that occur in IO
321 * completions here. We want to make sure that nobody is changing the
322 * size while we do this check until we have placed an IO barrier (i.e.
323 * hold the XFS_IOLOCK_EXCL) that prevents new IO from being dispatched.
324 * The spinlock effectively forms a memory barrier once we have the
325 * XFS_IOLOCK_EXCL so we are guaranteed to see the latest EOF value
326 * and hence be able to correctly determine if we need to run zeroing.
327 */
328 spin_lock(&ip->i_flags_lock);
329 isize = i_size_read(inode);
330 if (iocb->ki_pos > isize) {
331 spin_unlock(&ip->i_flags_lock);
332 if (!drained_dio) {
333 if (*iolock == XFS_IOLOCK_SHARED) {
334 xfs_iunlock(ip, *iolock);
335 *iolock = XFS_IOLOCK_EXCL;
336 xfs_ilock(ip, *iolock);
337 iov_iter_reexpand(from, count);
338 }
339 /*
340 * We now have an IO submission barrier in place, but
341 * AIO can do EOF updates during IO completion and hence
342 * we now need to wait for all of them to drain. Non-AIO
343 * DIO will have drained before we are given the
344 * XFS_IOLOCK_EXCL, and so for most cases this wait is a
345 * no-op.
346 */
347 inode_dio_wait(inode);
348 drained_dio = true;
349 goto restart;
350 }
351
352 trace_xfs_zero_eof(ip, isize, iocb->ki_pos - isize);
353 error = iomap_zero_range(inode, isize, iocb->ki_pos - isize,
354 NULL, &xfs_iomap_ops);
355 if (error)
356 return error;
357 } else
358 spin_unlock(&ip->i_flags_lock);
359
360 /*
361 * Updating the timestamps will grab the ilock again from
362 * xfs_fs_dirty_inode, so we have to call it after dropping the
363 * lock above. Eventually we should look into a way to avoid
364 * the pointless lock roundtrip.
365 */
366 return file_modified(file);
367}
368
369static int
370xfs_dio_write_end_io(
371 struct kiocb *iocb,
372 ssize_t size,
373 int error,
374 unsigned flags)
375{
376 struct inode *inode = file_inode(iocb->ki_filp);
377 struct xfs_inode *ip = XFS_I(inode);
378 loff_t offset = iocb->ki_pos;
379 unsigned int nofs_flag;
380
381 trace_xfs_end_io_direct_write(ip, offset, size);
382
383 if (XFS_FORCED_SHUTDOWN(ip->i_mount))
384 return -EIO;
385
386 if (error)
387 return error;
388 if (!size)
389 return 0;
390
391 /*
392 * Capture amount written on completion as we can't reliably account
393 * for it on submission.
394 */
395 XFS_STATS_ADD(ip->i_mount, xs_write_bytes, size);
396
397 /*
398 * We can allocate memory here while doing writeback on behalf of
399 * memory reclaim. To avoid memory allocation deadlocks set the
400 * task-wide nofs context for the following operations.
401 */
402 nofs_flag = memalloc_nofs_save();
403
404 if (flags & IOMAP_DIO_COW) {
405 error = xfs_reflink_end_cow(ip, offset, size);
406 if (error)
407 goto out;
408 }
409
410 /*
411 * Unwritten conversion updates the in-core isize after extent
412 * conversion but before updating the on-disk size. Updating isize any
413 * earlier allows a racing dio read to find unwritten extents before
414 * they are converted.
415 */
416 if (flags & IOMAP_DIO_UNWRITTEN) {
417 error = xfs_iomap_write_unwritten(ip, offset, size, true);
418 goto out;
419 }
420
421 /*
422 * We need to update the in-core inode size here so that we don't end up
423 * with the on-disk inode size being outside the in-core inode size. We
424 * have no other method of updating EOF for AIO, so always do it here
425 * if necessary.
426 *
427 * We need to lock the test/set EOF update as we can be racing with
428 * other IO completions here to update the EOF. Failing to serialise
429 * here can result in EOF moving backwards and Bad Things Happen when
430 * that occurs.
431 */
432 spin_lock(&ip->i_flags_lock);
433 if (offset + size > i_size_read(inode)) {
434 i_size_write(inode, offset + size);
435 spin_unlock(&ip->i_flags_lock);
436 error = xfs_setfilesize(ip, offset, size);
437 } else {
438 spin_unlock(&ip->i_flags_lock);
439 }
440
441out:
442 memalloc_nofs_restore(nofs_flag);
443 return error;
444}
445
446static const struct iomap_dio_ops xfs_dio_write_ops = {
447 .end_io = xfs_dio_write_end_io,
448};
449
450/*
451 * xfs_file_dio_aio_write - handle direct IO writes
452 *
453 * Lock the inode appropriately to prepare for and issue a direct IO write.
454 * By separating it from the buffered write path we remove all the tricky to
455 * follow locking changes and looping.
456 *
457 * If there are cached pages or we're extending the file, we need IOLOCK_EXCL
458 * until we're sure the bytes at the new EOF have been zeroed and/or the cached
459 * pages are flushed out.
460 *
461 * In most cases the direct IO writes will be done holding IOLOCK_SHARED
462 * allowing them to be done in parallel with reads and other direct IO writes.
463 * However, if the IO is not aligned to filesystem blocks, the direct IO layer
464 * needs to do sub-block zeroing and that requires serialisation against other
465 * direct IOs to the same block. In this case we need to serialise the
466 * submission of the unaligned IOs so that we don't get racing block zeroing in
467 * the dio layer. To avoid the problem with aio, we also need to wait for
468 * outstanding IOs to complete so that unwritten extent conversion is completed
469 * before we try to map the overlapping block. This is currently implemented by
470 * hitting it with a big hammer (i.e. inode_dio_wait()).
471 *
472 * Returns with locks held indicated by @iolock and errors indicated by
473 * negative return values.
474 */
475STATIC ssize_t
476xfs_file_dio_aio_write(
477 struct kiocb *iocb,
478 struct iov_iter *from)
479{
480 struct file *file = iocb->ki_filp;
481 struct address_space *mapping = file->f_mapping;
482 struct inode *inode = mapping->host;
483 struct xfs_inode *ip = XFS_I(inode);
484 struct xfs_mount *mp = ip->i_mount;
485 ssize_t ret = 0;
486 int unaligned_io = 0;
487 int iolock;
488 size_t count = iov_iter_count(from);
489 struct xfs_buftarg *target = XFS_IS_REALTIME_INODE(ip) ?
490 mp->m_rtdev_targp : mp->m_ddev_targp;
491
492 /* DIO must be aligned to device logical sector size */
493 if ((iocb->ki_pos | count) & target->bt_logical_sectormask)
494 return -EINVAL;
495
496 /*
497 * Don't take the exclusive iolock here unless the I/O is unaligned to
498 * the file system block size. We don't need to consider the EOF
499 * extension case here because xfs_file_aio_write_checks() will relock
500 * the inode as necessary for EOF zeroing cases and fill out the new
501 * inode size as appropriate.
502 */
503 if ((iocb->ki_pos & mp->m_blockmask) ||
504 ((iocb->ki_pos + count) & mp->m_blockmask)) {
505 unaligned_io = 1;
506
507 /*
508 * We can't properly handle unaligned direct I/O to reflink
509 * files yet, as we can't unshare a partial block.
510 */
511 if (xfs_is_cow_inode(ip)) {
512 trace_xfs_reflink_bounce_dio_write(ip, iocb->ki_pos, count);
513 return -EREMCHG;
514 }
515 iolock = XFS_IOLOCK_EXCL;
516 } else {
517 iolock = XFS_IOLOCK_SHARED;
518 }
519
520 if (iocb->ki_flags & IOCB_NOWAIT) {
521 /* unaligned dio always waits, bail */
522 if (unaligned_io)
523 return -EAGAIN;
524 if (!xfs_ilock_nowait(ip, iolock))
525 return -EAGAIN;
526 } else {
527 xfs_ilock(ip, iolock);
528 }
529
530 ret = xfs_file_aio_write_checks(iocb, from, &iolock);
531 if (ret)
532 goto out;
533 count = iov_iter_count(from);
534
535 /*
536 * If we are doing unaligned IO, we can't allow any other overlapping IO
537 * in-flight at the same time or we risk data corruption. Wait for all
538 * other IO to drain before we submit. If the IO is aligned, demote the
539 * iolock if we had to take the exclusive lock in
540 * xfs_file_aio_write_checks() for other reasons.
541 */
542 if (unaligned_io) {
543 inode_dio_wait(inode);
544 } else if (iolock == XFS_IOLOCK_EXCL) {
545 xfs_ilock_demote(ip, XFS_IOLOCK_EXCL);
546 iolock = XFS_IOLOCK_SHARED;
547 }
548
549 trace_xfs_file_direct_write(ip, count, iocb->ki_pos);
550 ret = iomap_dio_rw(iocb, from, &xfs_iomap_ops, &xfs_dio_write_ops);
551
552 /*
553 * If unaligned, this is the only IO in-flight. If it has not yet
554 * completed, wait on it before we release the iolock to prevent
555 * subsequent overlapping IO.
556 */
557 if (ret == -EIOCBQUEUED && unaligned_io)
558 inode_dio_wait(inode);
559out:
560 xfs_iunlock(ip, iolock);
561
562 /*
563 * No fallback to buffered IO on errors for XFS, direct IO will either
564 * complete fully or fail.
565 */
566 ASSERT(ret < 0 || ret == count);
567 return ret;
568}
569
570static noinline ssize_t
571xfs_file_dax_write(
572 struct kiocb *iocb,
573 struct iov_iter *from)
574{
575 struct inode *inode = iocb->ki_filp->f_mapping->host;
576 struct xfs_inode *ip = XFS_I(inode);
577 int iolock = XFS_IOLOCK_EXCL;
578 ssize_t ret, error = 0;
579 size_t count;
580 loff_t pos;
581
582 if (iocb->ki_flags & IOCB_NOWAIT) {
583 if (!xfs_ilock_nowait(ip, iolock))
584 return -EAGAIN;
585 } else {
586 xfs_ilock(ip, iolock);
587 }
588
589 ret = xfs_file_aio_write_checks(iocb, from, &iolock);
590 if (ret)
591 goto out;
592
593 pos = iocb->ki_pos;
594 count = iov_iter_count(from);
595
596 trace_xfs_file_dax_write(ip, count, pos);
597 ret = dax_iomap_rw(iocb, from, &xfs_iomap_ops);
598 if (ret > 0 && iocb->ki_pos > i_size_read(inode)) {
599 i_size_write(inode, iocb->ki_pos);
600 error = xfs_setfilesize(ip, pos, ret);
601 }
602out:
603 xfs_iunlock(ip, iolock);
604 if (error)
605 return error;
606
607 if (ret > 0) {
608 XFS_STATS_ADD(ip->i_mount, xs_write_bytes, ret);
609
610 /* Handle various SYNC-type writes */
611 ret = generic_write_sync(iocb, ret);
612 }
613 return ret;
614}
615
616STATIC ssize_t
617xfs_file_buffered_aio_write(
618 struct kiocb *iocb,
619 struct iov_iter *from)
620{
621 struct file *file = iocb->ki_filp;
622 struct address_space *mapping = file->f_mapping;
623 struct inode *inode = mapping->host;
624 struct xfs_inode *ip = XFS_I(inode);
625 ssize_t ret;
626 int enospc = 0;
627 int iolock;
628
629 if (iocb->ki_flags & IOCB_NOWAIT)
630 return -EOPNOTSUPP;
631
632write_retry:
633 iolock = XFS_IOLOCK_EXCL;
634 xfs_ilock(ip, iolock);
635
636 ret = xfs_file_aio_write_checks(iocb, from, &iolock);
637 if (ret)
638 goto out;
639
640 /* We can write back this queue in page reclaim */
641 current->backing_dev_info = inode_to_bdi(inode);
642
643 trace_xfs_file_buffered_write(ip, iov_iter_count(from), iocb->ki_pos);
644 ret = iomap_file_buffered_write(iocb, from, &xfs_iomap_ops);
645 if (likely(ret >= 0))
646 iocb->ki_pos += ret;
647
648 /*
649 * If we hit a space limit, try to free up some lingering preallocated
650 * space before returning an error. In the case of ENOSPC, first try to
651 * write back all dirty inodes to free up some of the excess reserved
652 * metadata space. This reduces the chances that the eofblocks scan
653 * waits on dirty mappings. Since xfs_flush_inodes() is serialized, this
654 * also behaves as a filter to prevent too many eofblocks scans from
655 * running at the same time.
656 */
657 if (ret == -EDQUOT && !enospc) {
658 xfs_iunlock(ip, iolock);
659 enospc = xfs_inode_free_quota_eofblocks(ip);
660 if (enospc)
661 goto write_retry;
662 enospc = xfs_inode_free_quota_cowblocks(ip);
663 if (enospc)
664 goto write_retry;
665 iolock = 0;
666 } else if (ret == -ENOSPC && !enospc) {
667 struct xfs_eofblocks eofb = {0};
668
669 enospc = 1;
670 xfs_flush_inodes(ip->i_mount);
671
672 xfs_iunlock(ip, iolock);
673 eofb.eof_flags = XFS_EOF_FLAGS_SYNC;
674 xfs_icache_free_eofblocks(ip->i_mount, &eofb);
675 xfs_icache_free_cowblocks(ip->i_mount, &eofb);
676 goto write_retry;
677 }
678
679 current->backing_dev_info = NULL;
680out:
681 if (iolock)
682 xfs_iunlock(ip, iolock);
683
684 if (ret > 0) {
685 XFS_STATS_ADD(ip->i_mount, xs_write_bytes, ret);
686 /* Handle various SYNC-type writes */
687 ret = generic_write_sync(iocb, ret);
688 }
689 return ret;
690}
691
692STATIC ssize_t
693xfs_file_write_iter(
694 struct kiocb *iocb,
695 struct iov_iter *from)
696{
697 struct file *file = iocb->ki_filp;
698 struct address_space *mapping = file->f_mapping;
699 struct inode *inode = mapping->host;
700 struct xfs_inode *ip = XFS_I(inode);
701 ssize_t ret;
702 size_t ocount = iov_iter_count(from);
703
704 XFS_STATS_INC(ip->i_mount, xs_write_calls);
705
706 if (ocount == 0)
707 return 0;
708
709 if (XFS_FORCED_SHUTDOWN(ip->i_mount))
710 return -EIO;
711
712 if (IS_DAX(inode))
713 return xfs_file_dax_write(iocb, from);
714
715 if (iocb->ki_flags & IOCB_DIRECT) {
716 /*
717 * Allow a directio write to fall back to a buffered
718 * write *only* in the case that we're doing a reflink
719 * CoW. In all other directio scenarios we do not
720 * allow an operation to fall back to buffered mode.
721 */
722 ret = xfs_file_dio_aio_write(iocb, from);
723 if (ret != -EREMCHG)
724 return ret;
725 }
726
727 return xfs_file_buffered_aio_write(iocb, from);
728}
729
730static void
731xfs_wait_dax_page(
732 struct inode *inode)
733{
734 struct xfs_inode *ip = XFS_I(inode);
735
736 xfs_iunlock(ip, XFS_MMAPLOCK_EXCL);
737 schedule();
738 xfs_ilock(ip, XFS_MMAPLOCK_EXCL);
739}
740
741static int
742xfs_break_dax_layouts(
743 struct inode *inode,
744 bool *retry)
745{
746 struct page *page;
747
748 ASSERT(xfs_isilocked(XFS_I(inode), XFS_MMAPLOCK_EXCL));
749
750 page = dax_layout_busy_page(inode->i_mapping);
751 if (!page)
752 return 0;
753
754 *retry = true;
755 return ___wait_var_event(&page->_refcount,
756 atomic_read(&page->_refcount) == 1, TASK_INTERRUPTIBLE,
757 0, 0, xfs_wait_dax_page(inode));
758}
759
760int
761xfs_break_layouts(
762 struct inode *inode,
763 uint *iolock,
764 enum layout_break_reason reason)
765{
766 bool retry;
767 int error;
768
769 ASSERT(xfs_isilocked(XFS_I(inode), XFS_IOLOCK_SHARED|XFS_IOLOCK_EXCL));
770
771 do {
772 retry = false;
773 switch (reason) {
774 case BREAK_UNMAP:
775 error = xfs_break_dax_layouts(inode, &retry);
776 if (error || retry)
777 break;
778 /* fall through */
779 case BREAK_WRITE:
780 error = xfs_break_leased_layouts(inode, iolock, &retry);
781 break;
782 default:
783 WARN_ON_ONCE(1);
784 error = -EINVAL;
785 }
786 } while (error == 0 && retry);
787
788 return error;
789}
790
791#define XFS_FALLOC_FL_SUPPORTED \
792 (FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | \
793 FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE | \
794 FALLOC_FL_INSERT_RANGE | FALLOC_FL_UNSHARE_RANGE)
795
796STATIC long
797xfs_file_fallocate(
798 struct file *file,
799 int mode,
800 loff_t offset,
801 loff_t len)
802{
803 struct inode *inode = file_inode(file);
804 struct xfs_inode *ip = XFS_I(inode);
805 long error;
806 enum xfs_prealloc_flags flags = 0;
807 uint iolock = XFS_IOLOCK_EXCL | XFS_MMAPLOCK_EXCL;
808 loff_t new_size = 0;
809 bool do_file_insert = false;
810
811 if (!S_ISREG(inode->i_mode))
812 return -EINVAL;
813 if (mode & ~XFS_FALLOC_FL_SUPPORTED)
814 return -EOPNOTSUPP;
815
816 xfs_ilock(ip, iolock);
817 error = xfs_break_layouts(inode, &iolock, BREAK_UNMAP);
818 if (error)
819 goto out_unlock;
820
821 if (mode & FALLOC_FL_PUNCH_HOLE) {
822 error = xfs_free_file_space(ip, offset, len);
823 if (error)
824 goto out_unlock;
825 } else if (mode & FALLOC_FL_COLLAPSE_RANGE) {
826 unsigned int blksize_mask = i_blocksize(inode) - 1;
827
828 if (offset & blksize_mask || len & blksize_mask) {
829 error = -EINVAL;
830 goto out_unlock;
831 }
832
833 /*
834 * There is no need to overlap collapse range with EOF,
835 * in which case it is effectively a truncate operation
836 */
837 if (offset + len >= i_size_read(inode)) {
838 error = -EINVAL;
839 goto out_unlock;
840 }
841
842 new_size = i_size_read(inode) - len;
843
844 error = xfs_collapse_file_space(ip, offset, len);
845 if (error)
846 goto out_unlock;
847 } else if (mode & FALLOC_FL_INSERT_RANGE) {
848 unsigned int blksize_mask = i_blocksize(inode) - 1;
849 loff_t isize = i_size_read(inode);
850
851 if (offset & blksize_mask || len & blksize_mask) {
852 error = -EINVAL;
853 goto out_unlock;
854 }
855
856 /*
857 * New inode size must not exceed ->s_maxbytes, accounting for
858 * possible signed overflow.
859 */
860 if (inode->i_sb->s_maxbytes - isize < len) {
861 error = -EFBIG;
862 goto out_unlock;
863 }
864 new_size = isize + len;
865
866 /* Offset should be less than i_size */
867 if (offset >= isize) {
868 error = -EINVAL;
869 goto out_unlock;
870 }
871 do_file_insert = true;
872 } else {
873 flags |= XFS_PREALLOC_SET;
874
875 if (!(mode & FALLOC_FL_KEEP_SIZE) &&
876 offset + len > i_size_read(inode)) {
877 new_size = offset + len;
878 error = inode_newsize_ok(inode, new_size);
879 if (error)
880 goto out_unlock;
881 }
882
883 if (mode & FALLOC_FL_ZERO_RANGE) {
884 error = xfs_zero_file_space(ip, offset, len);
885 } else if (mode & FALLOC_FL_UNSHARE_RANGE) {
886 error = xfs_reflink_unshare(ip, offset, len);
887 if (error)
888 goto out_unlock;
889
890 if (!xfs_is_always_cow_inode(ip)) {
891 error = xfs_alloc_file_space(ip, offset, len,
892 XFS_BMAPI_PREALLOC);
893 }
894 } else {
895 /*
896 * If always_cow mode we can't use preallocations and
897 * thus should not create them.
898 */
899 if (xfs_is_always_cow_inode(ip)) {
900 error = -EOPNOTSUPP;
901 goto out_unlock;
902 }
903
904 error = xfs_alloc_file_space(ip, offset, len,
905 XFS_BMAPI_PREALLOC);
906 }
907 if (error)
908 goto out_unlock;
909 }
910
911 if (file->f_flags & O_DSYNC)
912 flags |= XFS_PREALLOC_SYNC;
913
914 error = xfs_update_prealloc_flags(ip, flags);
915 if (error)
916 goto out_unlock;
917
918 /* Change file size if needed */
919 if (new_size) {
920 struct iattr iattr;
921
922 iattr.ia_valid = ATTR_SIZE;
923 iattr.ia_size = new_size;
924 error = xfs_vn_setattr_size(file_dentry(file), &iattr);
925 if (error)
926 goto out_unlock;
927 }
928
929 /*
930 * Perform hole insertion now that the file size has been
931 * updated so that if we crash during the operation we don't
932 * leave shifted extents past EOF and hence losing access to
933 * the data that is contained within them.
934 */
935 if (do_file_insert)
936 error = xfs_insert_file_space(ip, offset, len);
937
938out_unlock:
939 xfs_iunlock(ip, iolock);
940 return error;
941}
942
943STATIC int
944xfs_file_fadvise(
945 struct file *file,
946 loff_t start,
947 loff_t end,
948 int advice)
949{
950 struct xfs_inode *ip = XFS_I(file_inode(file));
951 int ret;
952 int lockflags = 0;
953
954 /*
955 * Operations creating pages in page cache need protection from hole
956 * punching and similar ops
957 */
958 if (advice == POSIX_FADV_WILLNEED) {
959 lockflags = XFS_IOLOCK_SHARED;
960 xfs_ilock(ip, lockflags);
961 }
962 ret = generic_fadvise(file, start, end, advice);
963 if (lockflags)
964 xfs_iunlock(ip, lockflags);
965 return ret;
966}
967
968STATIC loff_t
969xfs_file_remap_range(
970 struct file *file_in,
971 loff_t pos_in,
972 struct file *file_out,
973 loff_t pos_out,
974 loff_t len,
975 unsigned int remap_flags)
976{
977 struct inode *inode_in = file_inode(file_in);
978 struct xfs_inode *src = XFS_I(inode_in);
979 struct inode *inode_out = file_inode(file_out);
980 struct xfs_inode *dest = XFS_I(inode_out);
981 struct xfs_mount *mp = src->i_mount;
982 loff_t remapped = 0;
983 xfs_extlen_t cowextsize;
984 int ret;
985
986 if (remap_flags & ~(REMAP_FILE_DEDUP | REMAP_FILE_ADVISORY))
987 return -EINVAL;
988
989 if (!xfs_sb_version_hasreflink(&mp->m_sb))
990 return -EOPNOTSUPP;
991
992 if (XFS_FORCED_SHUTDOWN(mp))
993 return -EIO;
994
995 /* Prepare and then clone file data. */
996 ret = xfs_reflink_remap_prep(file_in, pos_in, file_out, pos_out,
997 &len, remap_flags);
998 if (ret < 0 || len == 0)
999 return ret;
1000
1001 trace_xfs_reflink_remap_range(src, pos_in, len, dest, pos_out);
1002
1003 ret = xfs_reflink_remap_blocks(src, pos_in, dest, pos_out, len,
1004 &remapped);
1005 if (ret)
1006 goto out_unlock;
1007
1008 /*
1009 * Carry the cowextsize hint from src to dest if we're sharing the
1010 * entire source file to the entire destination file, the source file
1011 * has a cowextsize hint, and the destination file does not.
1012 */
1013 cowextsize = 0;
1014 if (pos_in == 0 && len == i_size_read(inode_in) &&
1015 (src->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE) &&
1016 pos_out == 0 && len >= i_size_read(inode_out) &&
1017 !(dest->i_d.di_flags2 & XFS_DIFLAG2_COWEXTSIZE))
1018 cowextsize = src->i_d.di_cowextsize;
1019
1020 ret = xfs_reflink_update_dest(dest, pos_out + len, cowextsize,
1021 remap_flags);
1022
1023out_unlock:
1024 xfs_reflink_remap_unlock(file_in, file_out);
1025 if (ret)
1026 trace_xfs_reflink_remap_range_error(dest, ret, _RET_IP_);
1027 return remapped > 0 ? remapped : ret;
1028}
1029
1030STATIC int
1031xfs_file_open(
1032 struct inode *inode,
1033 struct file *file)
1034{
1035 if (!(file->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS)
1036 return -EFBIG;
1037 if (XFS_FORCED_SHUTDOWN(XFS_M(inode->i_sb)))
1038 return -EIO;
1039 file->f_mode |= FMODE_NOWAIT;
1040 return 0;
1041}
1042
1043STATIC int
1044xfs_dir_open(
1045 struct inode *inode,
1046 struct file *file)
1047{
1048 struct xfs_inode *ip = XFS_I(inode);
1049 int mode;
1050 int error;
1051
1052 error = xfs_file_open(inode, file);
1053 if (error)
1054 return error;
1055
1056 /*
1057 * If there are any blocks, read-ahead block 0 as we're almost
1058 * certain to have the next operation be a read there.
1059 */
1060 mode = xfs_ilock_data_map_shared(ip);
1061 if (ip->i_d.di_nextents > 0)
1062 error = xfs_dir3_data_readahead(ip, 0, -1);
1063 xfs_iunlock(ip, mode);
1064 return error;
1065}
1066
1067STATIC int
1068xfs_file_release(
1069 struct inode *inode,
1070 struct file *filp)
1071{
1072 return xfs_release(XFS_I(inode));
1073}
1074
1075STATIC int
1076xfs_file_readdir(
1077 struct file *file,
1078 struct dir_context *ctx)
1079{
1080 struct inode *inode = file_inode(file);
1081 xfs_inode_t *ip = XFS_I(inode);
1082 size_t bufsize;
1083
1084 /*
1085 * The Linux API doesn't pass down the total size of the buffer
1086 * we read into down to the filesystem. With the filldir concept
1087 * it's not needed for correct information, but the XFS dir2 leaf
1088 * code wants an estimate of the buffer size to calculate it's
1089 * readahead window and size the buffers used for mapping to
1090 * physical blocks.
1091 *
1092 * Try to give it an estimate that's good enough, maybe at some
1093 * point we can change the ->readdir prototype to include the
1094 * buffer size. For now we use the current glibc buffer size.
1095 */
1096 bufsize = (size_t)min_t(loff_t, XFS_READDIR_BUFSIZE, ip->i_d.di_size);
1097
1098 return xfs_readdir(NULL, ip, ctx, bufsize);
1099}
1100
1101STATIC loff_t
1102xfs_file_llseek(
1103 struct file *file,
1104 loff_t offset,
1105 int whence)
1106{
1107 struct inode *inode = file->f_mapping->host;
1108
1109 if (XFS_FORCED_SHUTDOWN(XFS_I(inode)->i_mount))
1110 return -EIO;
1111
1112 switch (whence) {
1113 default:
1114 return generic_file_llseek(file, offset, whence);
1115 case SEEK_HOLE:
1116 offset = iomap_seek_hole(inode, offset, &xfs_seek_iomap_ops);
1117 break;
1118 case SEEK_DATA:
1119 offset = iomap_seek_data(inode, offset, &xfs_seek_iomap_ops);
1120 break;
1121 }
1122
1123 if (offset < 0)
1124 return offset;
1125 return vfs_setpos(file, offset, inode->i_sb->s_maxbytes);
1126}
1127
1128/*
1129 * Locking for serialisation of IO during page faults. This results in a lock
1130 * ordering of:
1131 *
1132 * mmap_sem (MM)
1133 * sb_start_pagefault(vfs, freeze)
1134 * i_mmaplock (XFS - truncate serialisation)
1135 * page_lock (MM)
1136 * i_lock (XFS - extent map serialisation)
1137 */
1138static vm_fault_t
1139__xfs_filemap_fault(
1140 struct vm_fault *vmf,
1141 enum page_entry_size pe_size,
1142 bool write_fault)
1143{
1144 struct inode *inode = file_inode(vmf->vma->vm_file);
1145 struct xfs_inode *ip = XFS_I(inode);
1146 vm_fault_t ret;
1147
1148 trace_xfs_filemap_fault(ip, pe_size, write_fault);
1149
1150 if (write_fault) {
1151 sb_start_pagefault(inode->i_sb);
1152 file_update_time(vmf->vma->vm_file);
1153 }
1154
1155 xfs_ilock(XFS_I(inode), XFS_MMAPLOCK_SHARED);
1156 if (IS_DAX(inode)) {
1157 pfn_t pfn;
1158
1159 ret = dax_iomap_fault(vmf, pe_size, &pfn, NULL, &xfs_iomap_ops);
1160 if (ret & VM_FAULT_NEEDDSYNC)
1161 ret = dax_finish_sync_fault(vmf, pe_size, pfn);
1162 } else {
1163 if (write_fault)
1164 ret = iomap_page_mkwrite(vmf, &xfs_iomap_ops);
1165 else
1166 ret = filemap_fault(vmf);
1167 }
1168 xfs_iunlock(XFS_I(inode), XFS_MMAPLOCK_SHARED);
1169
1170 if (write_fault)
1171 sb_end_pagefault(inode->i_sb);
1172 return ret;
1173}
1174
1175static vm_fault_t
1176xfs_filemap_fault(
1177 struct vm_fault *vmf)
1178{
1179 /* DAX can shortcut the normal fault path on write faults! */
1180 return __xfs_filemap_fault(vmf, PE_SIZE_PTE,
1181 IS_DAX(file_inode(vmf->vma->vm_file)) &&
1182 (vmf->flags & FAULT_FLAG_WRITE));
1183}
1184
1185static vm_fault_t
1186xfs_filemap_huge_fault(
1187 struct vm_fault *vmf,
1188 enum page_entry_size pe_size)
1189{
1190 if (!IS_DAX(file_inode(vmf->vma->vm_file)))
1191 return VM_FAULT_FALLBACK;
1192
1193 /* DAX can shortcut the normal fault path on write faults! */
1194 return __xfs_filemap_fault(vmf, pe_size,
1195 (vmf->flags & FAULT_FLAG_WRITE));
1196}
1197
1198static vm_fault_t
1199xfs_filemap_page_mkwrite(
1200 struct vm_fault *vmf)
1201{
1202 return __xfs_filemap_fault(vmf, PE_SIZE_PTE, true);
1203}
1204
1205/*
1206 * pfn_mkwrite was originally intended to ensure we capture time stamp updates
1207 * on write faults. In reality, it needs to serialise against truncate and
1208 * prepare memory for writing so handle is as standard write fault.
1209 */
1210static vm_fault_t
1211xfs_filemap_pfn_mkwrite(
1212 struct vm_fault *vmf)
1213{
1214
1215 return __xfs_filemap_fault(vmf, PE_SIZE_PTE, true);
1216}
1217
1218static const struct vm_operations_struct xfs_file_vm_ops = {
1219 .fault = xfs_filemap_fault,
1220 .huge_fault = xfs_filemap_huge_fault,
1221 .map_pages = filemap_map_pages,
1222 .page_mkwrite = xfs_filemap_page_mkwrite,
1223 .pfn_mkwrite = xfs_filemap_pfn_mkwrite,
1224};
1225
1226STATIC int
1227xfs_file_mmap(
1228 struct file *filp,
1229 struct vm_area_struct *vma)
1230{
1231 struct dax_device *dax_dev;
1232
1233 dax_dev = xfs_find_daxdev_for_inode(file_inode(filp));
1234 /*
1235 * We don't support synchronous mappings for non-DAX files and
1236 * for DAX files if underneath dax_device is not synchronous.
1237 */
1238 if (!daxdev_mapping_supported(vma, dax_dev))
1239 return -EOPNOTSUPP;
1240
1241 file_accessed(filp);
1242 vma->vm_ops = &xfs_file_vm_ops;
1243 if (IS_DAX(file_inode(filp)))
1244 vma->vm_flags |= VM_HUGEPAGE;
1245 return 0;
1246}
1247
1248const struct file_operations xfs_file_operations = {
1249 .llseek = xfs_file_llseek,
1250 .read_iter = xfs_file_read_iter,
1251 .write_iter = xfs_file_write_iter,
1252 .splice_read = generic_file_splice_read,
1253 .splice_write = iter_file_splice_write,
1254 .iopoll = iomap_dio_iopoll,
1255 .unlocked_ioctl = xfs_file_ioctl,
1256#ifdef CONFIG_COMPAT
1257 .compat_ioctl = xfs_file_compat_ioctl,
1258#endif
1259 .mmap = xfs_file_mmap,
1260 .mmap_supported_flags = MAP_SYNC,
1261 .open = xfs_file_open,
1262 .release = xfs_file_release,
1263 .fsync = xfs_file_fsync,
1264 .get_unmapped_area = thp_get_unmapped_area,
1265 .fallocate = xfs_file_fallocate,
1266 .fadvise = xfs_file_fadvise,
1267 .remap_file_range = xfs_file_remap_range,
1268};
1269
1270const struct file_operations xfs_dir_file_operations = {
1271 .open = xfs_dir_open,
1272 .read = generic_read_dir,
1273 .iterate_shared = xfs_file_readdir,
1274 .llseek = generic_file_llseek,
1275 .unlocked_ioctl = xfs_file_ioctl,
1276#ifdef CONFIG_COMPAT
1277 .compat_ioctl = xfs_file_compat_ioctl,
1278#endif
1279 .fsync = xfs_dir_fsync,
1280};