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