1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * linux/fs/ext4/file.c
4 *
5 * Copyright (C) 1992, 1993, 1994, 1995
6 * Remy Card (card@masi.ibp.fr)
7 * Laboratoire MASI - Institut Blaise Pascal
8 * Universite Pierre et Marie Curie (Paris VI)
9 *
10 * from
11 *
12 * linux/fs/minix/file.c
13 *
14 * Copyright (C) 1991, 1992 Linus Torvalds
15 *
16 * ext4 fs regular file handling primitives
17 *
18 * 64-bit file support on 64-bit platforms by Jakub Jelinek
19 * (jj@sunsite.ms.mff.cuni.cz)
20 */
21
22 #include <linux/time.h>
23 #include <linux/fs.h>
24 #include <linux/iomap.h>
25 #include <linux/mount.h>
26 #include <linux/path.h>
27 #include <linux/dax.h>
28 #include <linux/quotaops.h>
29 #include <linux/pagevec.h>
30 #include <linux/uio.h>
31 #include <linux/mman.h>
32 #include <linux/backing-dev.h>
33 #include "ext4.h"
34 #include "ext4_jbd2.h"
35 #include "xattr.h"
36 #include "acl.h"
37 #include "truncate.h"
38
ext4_dio_supported(struct inode * inode)39 static bool ext4_dio_supported(struct inode *inode)
40 {
41 if (IS_ENABLED(CONFIG_FS_ENCRYPTION) && IS_ENCRYPTED(inode))
42 return false;
43 if (fsverity_active(inode))
44 return false;
45 if (ext4_should_journal_data(inode))
46 return false;
47 if (ext4_has_inline_data(inode))
48 return false;
49 return true;
50 }
51
ext4_dio_read_iter(struct kiocb * iocb,struct iov_iter * to)52 static ssize_t ext4_dio_read_iter(struct kiocb *iocb, struct iov_iter *to)
53 {
54 ssize_t ret;
55 struct inode *inode = file_inode(iocb->ki_filp);
56
57 if (iocb->ki_flags & IOCB_NOWAIT) {
58 if (!inode_trylock_shared(inode))
59 return -EAGAIN;
60 } else {
61 inode_lock_shared(inode);
62 }
63
64 if (!ext4_dio_supported(inode)) {
65 inode_unlock_shared(inode);
66 /*
67 * Fallback to buffered I/O if the operation being performed on
68 * the inode is not supported by direct I/O. The IOCB_DIRECT
69 * flag needs to be cleared here in order to ensure that the
70 * direct I/O path within generic_file_read_iter() is not
71 * taken.
72 */
73 iocb->ki_flags &= ~IOCB_DIRECT;
74 return generic_file_read_iter(iocb, to);
75 }
76
77 ret = iomap_dio_rw(iocb, to, &ext4_iomap_ops, NULL,
78 is_sync_kiocb(iocb));
79 inode_unlock_shared(inode);
80
81 file_accessed(iocb->ki_filp);
82 return ret;
83 }
84
85 #ifdef CONFIG_FS_DAX
ext4_dax_read_iter(struct kiocb * iocb,struct iov_iter * to)86 static ssize_t ext4_dax_read_iter(struct kiocb *iocb, struct iov_iter *to)
87 {
88 struct inode *inode = file_inode(iocb->ki_filp);
89 ssize_t ret;
90
91 if (iocb->ki_flags & IOCB_NOWAIT) {
92 if (!inode_trylock_shared(inode))
93 return -EAGAIN;
94 } else {
95 inode_lock_shared(inode);
96 }
97 /*
98 * Recheck under inode lock - at this point we are sure it cannot
99 * change anymore
100 */
101 if (!IS_DAX(inode)) {
102 inode_unlock_shared(inode);
103 /* Fallback to buffered IO in case we cannot support DAX */
104 return generic_file_read_iter(iocb, to);
105 }
106 ret = dax_iomap_rw(iocb, to, &ext4_iomap_ops);
107 inode_unlock_shared(inode);
108
109 file_accessed(iocb->ki_filp);
110 return ret;
111 }
112 #endif
113
ext4_file_read_iter(struct kiocb * iocb,struct iov_iter * to)114 static ssize_t ext4_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
115 {
116 struct inode *inode = file_inode(iocb->ki_filp);
117
118 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
119 return -EIO;
120
121 if (!iov_iter_count(to))
122 return 0; /* skip atime */
123
124 #ifdef CONFIG_FS_DAX
125 if (IS_DAX(inode))
126 return ext4_dax_read_iter(iocb, to);
127 #endif
128 if (iocb->ki_flags & IOCB_DIRECT)
129 return ext4_dio_read_iter(iocb, to);
130
131 return generic_file_read_iter(iocb, to);
132 }
133
134 /*
135 * Called when an inode is released. Note that this is different
136 * from ext4_file_open: open gets called at every open, but release
137 * gets called only when /all/ the files are closed.
138 */
ext4_release_file(struct inode * inode,struct file * filp)139 static int ext4_release_file(struct inode *inode, struct file *filp)
140 {
141 if (ext4_test_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE)) {
142 ext4_alloc_da_blocks(inode);
143 ext4_clear_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE);
144 }
145 /* if we are the last writer on the inode, drop the block reservation */
146 if ((filp->f_mode & FMODE_WRITE) &&
147 (atomic_read(&inode->i_writecount) == 1) &&
148 !EXT4_I(inode)->i_reserved_data_blocks) {
149 down_write(&EXT4_I(inode)->i_data_sem);
150 ext4_discard_preallocations(inode, 0);
151 up_write(&EXT4_I(inode)->i_data_sem);
152 }
153 if (is_dx(inode) && filp->private_data)
154 ext4_htree_free_dir_info(filp->private_data);
155
156 return 0;
157 }
158
159 /*
160 * This tests whether the IO in question is block-aligned or not.
161 * Ext4 utilizes unwritten extents when hole-filling during direct IO, and they
162 * are converted to written only after the IO is complete. Until they are
163 * mapped, these blocks appear as holes, so dio_zero_block() will assume that
164 * it needs to zero out portions of the start and/or end block. If 2 AIO
165 * threads are at work on the same unwritten block, they must be synchronized
166 * or one thread will zero the other's data, causing corruption.
167 */
168 static bool
ext4_unaligned_io(struct inode * inode,struct iov_iter * from,loff_t pos)169 ext4_unaligned_io(struct inode *inode, struct iov_iter *from, loff_t pos)
170 {
171 struct super_block *sb = inode->i_sb;
172 unsigned long blockmask = sb->s_blocksize - 1;
173
174 if ((pos | iov_iter_alignment(from)) & blockmask)
175 return true;
176
177 return false;
178 }
179
180 static bool
ext4_extending_io(struct inode * inode,loff_t offset,size_t len)181 ext4_extending_io(struct inode *inode, loff_t offset, size_t len)
182 {
183 if (offset + len > i_size_read(inode) ||
184 offset + len > EXT4_I(inode)->i_disksize)
185 return true;
186 return false;
187 }
188
189 /* Is IO overwriting allocated and initialized blocks? */
ext4_overwrite_io(struct inode * inode,loff_t pos,loff_t len)190 static bool ext4_overwrite_io(struct inode *inode, loff_t pos, loff_t len)
191 {
192 struct ext4_map_blocks map;
193 unsigned int blkbits = inode->i_blkbits;
194 int err, blklen;
195
196 if (pos + len > i_size_read(inode))
197 return false;
198
199 map.m_lblk = pos >> blkbits;
200 map.m_len = EXT4_MAX_BLOCKS(len, pos, blkbits);
201 blklen = map.m_len;
202
203 err = ext4_map_blocks(NULL, inode, &map, 0);
204 /*
205 * 'err==len' means that all of the blocks have been preallocated,
206 * regardless of whether they have been initialized or not. To exclude
207 * unwritten extents, we need to check m_flags.
208 */
209 return err == blklen && (map.m_flags & EXT4_MAP_MAPPED);
210 }
211
ext4_generic_write_checks(struct kiocb * iocb,struct iov_iter * from)212 static ssize_t ext4_generic_write_checks(struct kiocb *iocb,
213 struct iov_iter *from)
214 {
215 struct inode *inode = file_inode(iocb->ki_filp);
216 ssize_t ret;
217
218 if (unlikely(IS_IMMUTABLE(inode)))
219 return -EPERM;
220
221 ret = generic_write_checks(iocb, from);
222 if (ret <= 0)
223 return ret;
224
225 /*
226 * If we have encountered a bitmap-format file, the size limit
227 * is smaller than s_maxbytes, which is for extent-mapped files.
228 */
229 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) {
230 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
231
232 if (iocb->ki_pos >= sbi->s_bitmap_maxbytes)
233 return -EFBIG;
234 iov_iter_truncate(from, sbi->s_bitmap_maxbytes - iocb->ki_pos);
235 }
236
237 return iov_iter_count(from);
238 }
239
ext4_write_checks(struct kiocb * iocb,struct iov_iter * from)240 static ssize_t ext4_write_checks(struct kiocb *iocb, struct iov_iter *from)
241 {
242 ssize_t ret, count;
243
244 count = ext4_generic_write_checks(iocb, from);
245 if (count <= 0)
246 return count;
247
248 ret = file_modified(iocb->ki_filp);
249 if (ret)
250 return ret;
251 return count;
252 }
253
ext4_buffered_write_iter(struct kiocb * iocb,struct iov_iter * from)254 static ssize_t ext4_buffered_write_iter(struct kiocb *iocb,
255 struct iov_iter *from)
256 {
257 ssize_t ret;
258 struct inode *inode = file_inode(iocb->ki_filp);
259
260 if (iocb->ki_flags & IOCB_NOWAIT)
261 return -EOPNOTSUPP;
262
263 inode_lock(inode);
264 ret = ext4_write_checks(iocb, from);
265 if (ret <= 0)
266 goto out;
267
268 current->backing_dev_info = inode_to_bdi(inode);
269 ret = generic_perform_write(iocb->ki_filp, from, iocb->ki_pos);
270 current->backing_dev_info = NULL;
271
272 out:
273 inode_unlock(inode);
274 if (likely(ret > 0)) {
275 iocb->ki_pos += ret;
276 ret = generic_write_sync(iocb, ret);
277 }
278
279 return ret;
280 }
281
ext4_handle_inode_extension(struct inode * inode,loff_t offset,ssize_t count)282 static ssize_t ext4_handle_inode_extension(struct inode *inode, loff_t offset,
283 ssize_t count)
284 {
285 handle_t *handle;
286
287 lockdep_assert_held_write(&inode->i_rwsem);
288 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2);
289 if (IS_ERR(handle))
290 return PTR_ERR(handle);
291
292 if (ext4_update_inode_size(inode, offset + count)) {
293 int ret = ext4_mark_inode_dirty(handle, inode);
294 if (unlikely(ret)) {
295 ext4_journal_stop(handle);
296 return ret;
297 }
298 }
299
300 if (inode->i_nlink)
301 ext4_orphan_del(handle, inode);
302 ext4_journal_stop(handle);
303
304 return count;
305 }
306
307 /*
308 * Clean up the inode after DIO or DAX extending write has completed and the
309 * inode size has been updated using ext4_handle_inode_extension().
310 */
ext4_inode_extension_cleanup(struct inode * inode,bool need_trunc)311 static void ext4_inode_extension_cleanup(struct inode *inode, bool need_trunc)
312 {
313 lockdep_assert_held_write(&inode->i_rwsem);
314 if (need_trunc) {
315 ext4_truncate_failed_write(inode);
316 /*
317 * If the truncate operation failed early, then the inode may
318 * still be on the orphan list. In that case, we need to try
319 * remove the inode from the in-memory linked list.
320 */
321 if (inode->i_nlink)
322 ext4_orphan_del(NULL, inode);
323 return;
324 }
325 /*
326 * If i_disksize got extended either due to writeback of delalloc
327 * blocks or extending truncate while the DIO was running we could fail
328 * to cleanup the orphan list in ext4_handle_inode_extension(). Do it
329 * now.
330 */
331 if (!list_empty(&EXT4_I(inode)->i_orphan) && inode->i_nlink) {
332 handle_t *handle = ext4_journal_start(inode, EXT4_HT_INODE, 2);
333
334 if (IS_ERR(handle)) {
335 /*
336 * The write has successfully completed. Not much to
337 * do with the error here so just cleanup the orphan
338 * list and hope for the best.
339 */
340 ext4_orphan_del(NULL, inode);
341 return;
342 }
343 ext4_orphan_del(handle, inode);
344 ext4_journal_stop(handle);
345 }
346 }
347
ext4_dio_write_end_io(struct kiocb * iocb,ssize_t size,int error,unsigned int flags)348 static int ext4_dio_write_end_io(struct kiocb *iocb, ssize_t size,
349 int error, unsigned int flags)
350 {
351 loff_t pos = iocb->ki_pos;
352 struct inode *inode = file_inode(iocb->ki_filp);
353
354 if (!error && size && flags & IOMAP_DIO_UNWRITTEN)
355 error = ext4_convert_unwritten_extents(NULL, inode, pos, size);
356 if (error)
357 return error;
358 /*
359 * Note that EXT4_I(inode)->i_disksize can get extended up to
360 * inode->i_size while the I/O was running due to writeback of delalloc
361 * blocks. But the code in ext4_iomap_alloc() is careful to use
362 * zeroed/unwritten extents if this is possible; thus we won't leave
363 * uninitialized blocks in a file even if we didn't succeed in writing
364 * as much as we intended. Also we can race with truncate or write
365 * expanding the file so we have to be a bit careful here.
366 */
367 if (pos + size <= READ_ONCE(EXT4_I(inode)->i_disksize) &&
368 pos + size <= i_size_read(inode))
369 return size;
370 return ext4_handle_inode_extension(inode, pos, size);
371 }
372
373 static const struct iomap_dio_ops ext4_dio_write_ops = {
374 .end_io = ext4_dio_write_end_io,
375 };
376
377 /*
378 * The intention here is to start with shared lock acquired then see if any
379 * condition requires an exclusive inode lock. If yes, then we restart the
380 * whole operation by releasing the shared lock and acquiring exclusive lock.
381 *
382 * - For unaligned_io we never take shared lock as it may cause data corruption
383 * when two unaligned IO tries to modify the same block e.g. while zeroing.
384 *
385 * - For extending writes case we don't take the shared lock, since it requires
386 * updating inode i_disksize and/or orphan handling with exclusive lock.
387 *
388 * - shared locking will only be true mostly with overwrites. Otherwise we will
389 * switch to exclusive i_rwsem lock.
390 */
ext4_dio_write_checks(struct kiocb * iocb,struct iov_iter * from,bool * ilock_shared,bool * extend)391 static ssize_t ext4_dio_write_checks(struct kiocb *iocb, struct iov_iter *from,
392 bool *ilock_shared, bool *extend)
393 {
394 struct file *file = iocb->ki_filp;
395 struct inode *inode = file_inode(file);
396 loff_t offset;
397 size_t count;
398 ssize_t ret;
399
400 restart:
401 ret = ext4_generic_write_checks(iocb, from);
402 if (ret <= 0)
403 goto out;
404
405 offset = iocb->ki_pos;
406 count = ret;
407 if (ext4_extending_io(inode, offset, count))
408 *extend = true;
409 /*
410 * Determine whether the IO operation will overwrite allocated
411 * and initialized blocks.
412 * We need exclusive i_rwsem for changing security info
413 * in file_modified().
414 */
415 if (*ilock_shared && (!IS_NOSEC(inode) || *extend ||
416 !ext4_overwrite_io(inode, offset, count))) {
417 if (iocb->ki_flags & IOCB_NOWAIT) {
418 ret = -EAGAIN;
419 goto out;
420 }
421 inode_unlock_shared(inode);
422 *ilock_shared = false;
423 inode_lock(inode);
424 goto restart;
425 }
426
427 ret = file_modified(file);
428 if (ret < 0)
429 goto out;
430
431 return count;
432 out:
433 if (*ilock_shared)
434 inode_unlock_shared(inode);
435 else
436 inode_unlock(inode);
437 return ret;
438 }
439
ext4_dio_write_iter(struct kiocb * iocb,struct iov_iter * from)440 static ssize_t ext4_dio_write_iter(struct kiocb *iocb, struct iov_iter *from)
441 {
442 ssize_t ret;
443 handle_t *handle;
444 struct inode *inode = file_inode(iocb->ki_filp);
445 loff_t offset = iocb->ki_pos;
446 size_t count = iov_iter_count(from);
447 const struct iomap_ops *iomap_ops = &ext4_iomap_ops;
448 bool extend = false, unaligned_io = false;
449 bool ilock_shared = true;
450
451 /*
452 * We initially start with shared inode lock unless it is
453 * unaligned IO which needs exclusive lock anyways.
454 */
455 if (ext4_unaligned_io(inode, from, offset)) {
456 unaligned_io = true;
457 ilock_shared = false;
458 }
459 /*
460 * Quick check here without any i_rwsem lock to see if it is extending
461 * IO. A more reliable check is done in ext4_dio_write_checks() with
462 * proper locking in place.
463 */
464 if (offset + count > i_size_read(inode))
465 ilock_shared = false;
466
467 if (iocb->ki_flags & IOCB_NOWAIT) {
468 if (ilock_shared) {
469 if (!inode_trylock_shared(inode))
470 return -EAGAIN;
471 } else {
472 if (!inode_trylock(inode))
473 return -EAGAIN;
474 }
475 } else {
476 if (ilock_shared)
477 inode_lock_shared(inode);
478 else
479 inode_lock(inode);
480 }
481
482 /* Fallback to buffered I/O if the inode does not support direct I/O. */
483 if (!ext4_dio_supported(inode)) {
484 if (ilock_shared)
485 inode_unlock_shared(inode);
486 else
487 inode_unlock(inode);
488 return ext4_buffered_write_iter(iocb, from);
489 }
490
491 ret = ext4_dio_write_checks(iocb, from, &ilock_shared, &extend);
492 if (ret <= 0)
493 return ret;
494
495 /* if we're going to block and IOCB_NOWAIT is set, return -EAGAIN */
496 if ((iocb->ki_flags & IOCB_NOWAIT) && (unaligned_io || extend)) {
497 ret = -EAGAIN;
498 goto out;
499 }
500 /*
501 * Make sure inline data cannot be created anymore since we are going
502 * to allocate blocks for DIO. We know the inode does not have any
503 * inline data now because ext4_dio_supported() checked for that.
504 */
505 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA);
506
507 offset = iocb->ki_pos;
508 count = ret;
509
510 /*
511 * Unaligned direct IO must be serialized among each other as zeroing
512 * of partial blocks of two competing unaligned IOs can result in data
513 * corruption.
514 *
515 * So we make sure we don't allow any unaligned IO in flight.
516 * For IOs where we need not wait (like unaligned non-AIO DIO),
517 * below inode_dio_wait() may anyway become a no-op, since we start
518 * with exclusive lock.
519 */
520 if (unaligned_io)
521 inode_dio_wait(inode);
522
523 if (extend) {
524 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2);
525 if (IS_ERR(handle)) {
526 ret = PTR_ERR(handle);
527 goto out;
528 }
529
530 ret = ext4_orphan_add(handle, inode);
531 if (ret) {
532 ext4_journal_stop(handle);
533 goto out;
534 }
535
536 ext4_journal_stop(handle);
537 }
538
539 if (ilock_shared)
540 iomap_ops = &ext4_iomap_overwrite_ops;
541 ret = iomap_dio_rw(iocb, from, iomap_ops, &ext4_dio_write_ops,
542 is_sync_kiocb(iocb) || unaligned_io || extend);
543 if (ret == -ENOTBLK)
544 ret = 0;
545 if (extend) {
546 /*
547 * We always perform extending DIO write synchronously so by
548 * now the IO is completed and ext4_handle_inode_extension()
549 * was called. Cleanup the inode in case of error or race with
550 * writeback of delalloc blocks.
551 */
552 WARN_ON_ONCE(ret == -EIOCBQUEUED);
553 ext4_inode_extension_cleanup(inode, ret < 0);
554 }
555
556 out:
557 if (ilock_shared)
558 inode_unlock_shared(inode);
559 else
560 inode_unlock(inode);
561
562 if (ret >= 0 && iov_iter_count(from)) {
563 ssize_t err;
564 loff_t endbyte;
565
566 offset = iocb->ki_pos;
567 err = ext4_buffered_write_iter(iocb, from);
568 if (err < 0)
569 return err;
570
571 /*
572 * We need to ensure that the pages within the page cache for
573 * the range covered by this I/O are written to disk and
574 * invalidated. This is in attempt to preserve the expected
575 * direct I/O semantics in the case we fallback to buffered I/O
576 * to complete off the I/O request.
577 */
578 ret += err;
579 endbyte = offset + err - 1;
580 err = filemap_write_and_wait_range(iocb->ki_filp->f_mapping,
581 offset, endbyte);
582 if (!err)
583 invalidate_mapping_pages(iocb->ki_filp->f_mapping,
584 offset >> PAGE_SHIFT,
585 endbyte >> PAGE_SHIFT);
586 }
587
588 return ret;
589 }
590
591 #ifdef CONFIG_FS_DAX
592 static ssize_t
ext4_dax_write_iter(struct kiocb * iocb,struct iov_iter * from)593 ext4_dax_write_iter(struct kiocb *iocb, struct iov_iter *from)
594 {
595 ssize_t ret;
596 size_t count;
597 loff_t offset;
598 handle_t *handle;
599 bool extend = false;
600 struct inode *inode = file_inode(iocb->ki_filp);
601
602 if (iocb->ki_flags & IOCB_NOWAIT) {
603 if (!inode_trylock(inode))
604 return -EAGAIN;
605 } else {
606 inode_lock(inode);
607 }
608
609 ret = ext4_write_checks(iocb, from);
610 if (ret <= 0)
611 goto out;
612
613 offset = iocb->ki_pos;
614 count = iov_iter_count(from);
615
616 if (offset + count > EXT4_I(inode)->i_disksize) {
617 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2);
618 if (IS_ERR(handle)) {
619 ret = PTR_ERR(handle);
620 goto out;
621 }
622
623 ret = ext4_orphan_add(handle, inode);
624 if (ret) {
625 ext4_journal_stop(handle);
626 goto out;
627 }
628
629 extend = true;
630 ext4_journal_stop(handle);
631 }
632
633 ret = dax_iomap_rw(iocb, from, &ext4_iomap_ops);
634
635 if (extend) {
636 ret = ext4_handle_inode_extension(inode, offset, ret);
637 ext4_inode_extension_cleanup(inode, ret < (ssize_t)count);
638 }
639 out:
640 inode_unlock(inode);
641 if (ret > 0)
642 ret = generic_write_sync(iocb, ret);
643 return ret;
644 }
645 #endif
646
647 static ssize_t
ext4_file_write_iter(struct kiocb * iocb,struct iov_iter * from)648 ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
649 {
650 struct inode *inode = file_inode(iocb->ki_filp);
651
652 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
653 return -EIO;
654
655 #ifdef CONFIG_FS_DAX
656 if (IS_DAX(inode))
657 return ext4_dax_write_iter(iocb, from);
658 #endif
659 if (iocb->ki_flags & IOCB_DIRECT)
660 return ext4_dio_write_iter(iocb, from);
661 else
662 return ext4_buffered_write_iter(iocb, from);
663 }
664
665 #ifdef CONFIG_FS_DAX
ext4_dax_huge_fault(struct vm_fault * vmf,enum page_entry_size pe_size)666 static vm_fault_t ext4_dax_huge_fault(struct vm_fault *vmf,
667 enum page_entry_size pe_size)
668 {
669 int error = 0;
670 vm_fault_t result;
671 int retries = 0;
672 handle_t *handle = NULL;
673 struct inode *inode = file_inode(vmf->vma->vm_file);
674 struct super_block *sb = inode->i_sb;
675
676 /*
677 * We have to distinguish real writes from writes which will result in a
678 * COW page; COW writes should *not* poke the journal (the file will not
679 * be changed). Doing so would cause unintended failures when mounted
680 * read-only.
681 *
682 * We check for VM_SHARED rather than vmf->cow_page since the latter is
683 * unset for pe_size != PE_SIZE_PTE (i.e. only in do_cow_fault); for
684 * other sizes, dax_iomap_fault will handle splitting / fallback so that
685 * we eventually come back with a COW page.
686 */
687 bool write = (vmf->flags & FAULT_FLAG_WRITE) &&
688 (vmf->vma->vm_flags & VM_SHARED);
689 pfn_t pfn;
690
691 if (write) {
692 sb_start_pagefault(sb);
693 file_update_time(vmf->vma->vm_file);
694 down_read(&EXT4_I(inode)->i_mmap_sem);
695 retry:
696 handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE,
697 EXT4_DATA_TRANS_BLOCKS(sb));
698 if (IS_ERR(handle)) {
699 up_read(&EXT4_I(inode)->i_mmap_sem);
700 sb_end_pagefault(sb);
701 return VM_FAULT_SIGBUS;
702 }
703 } else {
704 down_read(&EXT4_I(inode)->i_mmap_sem);
705 }
706 result = dax_iomap_fault(vmf, pe_size, &pfn, &error, &ext4_iomap_ops);
707 if (write) {
708 ext4_journal_stop(handle);
709
710 if ((result & VM_FAULT_ERROR) && error == -ENOSPC &&
711 ext4_should_retry_alloc(sb, &retries))
712 goto retry;
713 /* Handling synchronous page fault? */
714 if (result & VM_FAULT_NEEDDSYNC)
715 result = dax_finish_sync_fault(vmf, pe_size, pfn);
716 up_read(&EXT4_I(inode)->i_mmap_sem);
717 sb_end_pagefault(sb);
718 } else {
719 up_read(&EXT4_I(inode)->i_mmap_sem);
720 }
721
722 return result;
723 }
724
ext4_dax_fault(struct vm_fault * vmf)725 static vm_fault_t ext4_dax_fault(struct vm_fault *vmf)
726 {
727 return ext4_dax_huge_fault(vmf, PE_SIZE_PTE);
728 }
729
730 static const struct vm_operations_struct ext4_dax_vm_ops = {
731 .fault = ext4_dax_fault,
732 .huge_fault = ext4_dax_huge_fault,
733 .page_mkwrite = ext4_dax_fault,
734 .pfn_mkwrite = ext4_dax_fault,
735 };
736 #else
737 #define ext4_dax_vm_ops ext4_file_vm_ops
738 #endif
739
740 static const struct vm_operations_struct ext4_file_vm_ops = {
741 .fault = ext4_filemap_fault,
742 .map_pages = filemap_map_pages,
743 .page_mkwrite = ext4_page_mkwrite,
744 };
745
ext4_file_mmap(struct file * file,struct vm_area_struct * vma)746 static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)
747 {
748 struct inode *inode = file->f_mapping->host;
749 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
750 struct dax_device *dax_dev = sbi->s_daxdev;
751
752 if (unlikely(ext4_forced_shutdown(sbi)))
753 return -EIO;
754
755 /*
756 * We don't support synchronous mappings for non-DAX files and
757 * for DAX files if underneath dax_device is not synchronous.
758 */
759 if (!daxdev_mapping_supported(vma, dax_dev))
760 return -EOPNOTSUPP;
761
762 file_accessed(file);
763 if (IS_DAX(file_inode(file))) {
764 vma->vm_ops = &ext4_dax_vm_ops;
765 vma->vm_flags |= VM_HUGEPAGE;
766 } else {
767 vma->vm_ops = &ext4_file_vm_ops;
768 }
769 return 0;
770 }
771
ext4_sample_last_mounted(struct super_block * sb,struct vfsmount * mnt)772 static int ext4_sample_last_mounted(struct super_block *sb,
773 struct vfsmount *mnt)
774 {
775 struct ext4_sb_info *sbi = EXT4_SB(sb);
776 struct path path;
777 char buf[64], *cp;
778 handle_t *handle;
779 int err;
780
781 if (likely(ext4_test_mount_flag(sb, EXT4_MF_MNTDIR_SAMPLED)))
782 return 0;
783
784 if (sb_rdonly(sb) || !sb_start_intwrite_trylock(sb))
785 return 0;
786
787 ext4_set_mount_flag(sb, EXT4_MF_MNTDIR_SAMPLED);
788 /*
789 * Sample where the filesystem has been mounted and
790 * store it in the superblock for sysadmin convenience
791 * when trying to sort through large numbers of block
792 * devices or filesystem images.
793 */
794 memset(buf, 0, sizeof(buf));
795 path.mnt = mnt;
796 path.dentry = mnt->mnt_root;
797 cp = d_path(&path, buf, sizeof(buf));
798 err = 0;
799 if (IS_ERR(cp))
800 goto out;
801
802 handle = ext4_journal_start_sb(sb, EXT4_HT_MISC, 1);
803 err = PTR_ERR(handle);
804 if (IS_ERR(handle))
805 goto out;
806 BUFFER_TRACE(sbi->s_sbh, "get_write_access");
807 err = ext4_journal_get_write_access(handle, sbi->s_sbh);
808 if (err)
809 goto out_journal;
810 lock_buffer(sbi->s_sbh);
811 strncpy(sbi->s_es->s_last_mounted, cp,
812 sizeof(sbi->s_es->s_last_mounted));
813 ext4_superblock_csum_set(sb);
814 unlock_buffer(sbi->s_sbh);
815 ext4_handle_dirty_metadata(handle, NULL, sbi->s_sbh);
816 out_journal:
817 ext4_journal_stop(handle);
818 out:
819 sb_end_intwrite(sb);
820 return err;
821 }
822
ext4_file_open(struct inode * inode,struct file * filp)823 static int ext4_file_open(struct inode *inode, struct file *filp)
824 {
825 int ret;
826
827 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
828 return -EIO;
829
830 ret = ext4_sample_last_mounted(inode->i_sb, filp->f_path.mnt);
831 if (ret)
832 return ret;
833
834 ret = fscrypt_file_open(inode, filp);
835 if (ret)
836 return ret;
837
838 ret = fsverity_file_open(inode, filp);
839 if (ret)
840 return ret;
841
842 /*
843 * Set up the jbd2_inode if we are opening the inode for
844 * writing and the journal is present
845 */
846 if (filp->f_mode & FMODE_WRITE) {
847 ret = ext4_inode_attach_jinode(inode);
848 if (ret < 0)
849 return ret;
850 }
851
852 filp->f_mode |= FMODE_NOWAIT | FMODE_BUF_RASYNC;
853 return dquot_file_open(inode, filp);
854 }
855
856 /*
857 * ext4_llseek() handles both block-mapped and extent-mapped maxbytes values
858 * by calling generic_file_llseek_size() with the appropriate maxbytes
859 * value for each.
860 */
ext4_llseek(struct file * file,loff_t offset,int whence)861 loff_t ext4_llseek(struct file *file, loff_t offset, int whence)
862 {
863 struct inode *inode = file->f_mapping->host;
864 loff_t maxbytes;
865
866 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
867 maxbytes = EXT4_SB(inode->i_sb)->s_bitmap_maxbytes;
868 else
869 maxbytes = inode->i_sb->s_maxbytes;
870
871 switch (whence) {
872 default:
873 return generic_file_llseek_size(file, offset, whence,
874 maxbytes, i_size_read(inode));
875 case SEEK_HOLE:
876 inode_lock_shared(inode);
877 offset = iomap_seek_hole(inode, offset,
878 &ext4_iomap_report_ops);
879 inode_unlock_shared(inode);
880 break;
881 case SEEK_DATA:
882 inode_lock_shared(inode);
883 offset = iomap_seek_data(inode, offset,
884 &ext4_iomap_report_ops);
885 inode_unlock_shared(inode);
886 break;
887 }
888
889 if (offset < 0)
890 return offset;
891 return vfs_setpos(file, offset, maxbytes);
892 }
893
894 const struct file_operations ext4_file_operations = {
895 .llseek = ext4_llseek,
896 .read_iter = ext4_file_read_iter,
897 .write_iter = ext4_file_write_iter,
898 .iopoll = iomap_dio_iopoll,
899 .unlocked_ioctl = ext4_ioctl,
900 #ifdef CONFIG_COMPAT
901 .compat_ioctl = ext4_compat_ioctl,
902 #endif
903 .mmap = ext4_file_mmap,
904 .mmap_supported_flags = MAP_SYNC,
905 .open = ext4_file_open,
906 .release = ext4_release_file,
907 .fsync = ext4_sync_file,
908 .get_unmapped_area = thp_get_unmapped_area,
909 .splice_read = generic_file_splice_read,
910 .splice_write = iter_file_splice_write,
911 .fallocate = ext4_fallocate,
912 };
913
914 const struct inode_operations ext4_file_inode_operations = {
915 .setattr = ext4_setattr,
916 .getattr = ext4_file_getattr,
917 .listxattr = ext4_listxattr,
918 .get_acl = ext4_get_acl,
919 .set_acl = ext4_set_acl,
920 .fiemap = ext4_fiemap,
921 };
922
923