1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <linux/fs.h>
23#include <linux/mount.h>
24#include <linux/time.h>
25#include <linux/highuid.h>
26#include <linux/pagemap.h>
27#include <linux/dax.h>
28#include <linux/quotaops.h>
29#include <linux/string.h>
30#include <linux/buffer_head.h>
31#include <linux/writeback.h>
32#include <linux/pagevec.h>
33#include <linux/mpage.h>
34#include <linux/namei.h>
35#include <linux/uio.h>
36#include <linux/bio.h>
37#include <linux/workqueue.h>
38#include <linux/kernel.h>
39#include <linux/printk.h>
40#include <linux/slab.h>
41#include <linux/bitops.h>
42#include <linux/iomap.h>
43#include <linux/iversion.h>
44
45#include "ext4_jbd2.h"
46#include "xattr.h"
47#include "acl.h"
48#include "truncate.h"
49
50#include <trace/events/ext4.h>
51
52static __u32 ext4_inode_csum(struct inode *inode, struct ext4_inode *raw,
53 struct ext4_inode_info *ei)
54{
55 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
56 __u32 csum;
57 __u16 dummy_csum = 0;
58 int offset = offsetof(struct ext4_inode, i_checksum_lo);
59 unsigned int csum_size = sizeof(dummy_csum);
60
61 csum = ext4_chksum(sbi, ei->i_csum_seed, (__u8 *)raw, offset);
62 csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum, csum_size);
63 offset += csum_size;
64 csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
65 EXT4_GOOD_OLD_INODE_SIZE - offset);
66
67 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
68 offset = offsetof(struct ext4_inode, i_checksum_hi);
69 csum = ext4_chksum(sbi, csum, (__u8 *)raw +
70 EXT4_GOOD_OLD_INODE_SIZE,
71 offset - EXT4_GOOD_OLD_INODE_SIZE);
72 if (EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi)) {
73 csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum,
74 csum_size);
75 offset += csum_size;
76 }
77 csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
78 EXT4_INODE_SIZE(inode->i_sb) - offset);
79 }
80
81 return csum;
82}
83
84static int ext4_inode_csum_verify(struct inode *inode, struct ext4_inode *raw,
85 struct ext4_inode_info *ei)
86{
87 __u32 provided, calculated;
88
89 if (EXT4_SB(inode->i_sb)->s_es->s_creator_os !=
90 cpu_to_le32(EXT4_OS_LINUX) ||
91 !ext4_has_metadata_csum(inode->i_sb))
92 return 1;
93
94 provided = le16_to_cpu(raw->i_checksum_lo);
95 calculated = ext4_inode_csum(inode, raw, ei);
96 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE &&
97 EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi))
98 provided |= ((__u32)le16_to_cpu(raw->i_checksum_hi)) << 16;
99 else
100 calculated &= 0xFFFF;
101
102 return provided == calculated;
103}
104
105void ext4_inode_csum_set(struct inode *inode, struct ext4_inode *raw,
106 struct ext4_inode_info *ei)
107{
108 __u32 csum;
109
110 if (EXT4_SB(inode->i_sb)->s_es->s_creator_os !=
111 cpu_to_le32(EXT4_OS_LINUX) ||
112 !ext4_has_metadata_csum(inode->i_sb))
113 return;
114
115 csum = ext4_inode_csum(inode, raw, ei);
116 raw->i_checksum_lo = cpu_to_le16(csum & 0xFFFF);
117 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE &&
118 EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi))
119 raw->i_checksum_hi = cpu_to_le16(csum >> 16);
120}
121
122static inline int ext4_begin_ordered_truncate(struct inode *inode,
123 loff_t new_size)
124{
125 trace_ext4_begin_ordered_truncate(inode, new_size);
126
127
128
129
130
131
132 if (!EXT4_I(inode)->jinode)
133 return 0;
134 return jbd2_journal_begin_ordered_truncate(EXT4_JOURNAL(inode),
135 EXT4_I(inode)->jinode,
136 new_size);
137}
138
139static void ext4_invalidatepage(struct page *page, unsigned int offset,
140 unsigned int length);
141static int __ext4_journalled_writepage(struct page *page, unsigned int len);
142static int ext4_bh_delay_or_unwritten(handle_t *handle, struct buffer_head *bh);
143static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
144 int pextents);
145
146
147
148
149
150int ext4_inode_is_fast_symlink(struct inode *inode)
151{
152 if (!(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)) {
153 int ea_blocks = EXT4_I(inode)->i_file_acl ?
154 EXT4_CLUSTER_SIZE(inode->i_sb) >> 9 : 0;
155
156 if (ext4_has_inline_data(inode))
157 return 0;
158
159 return (S_ISLNK(inode->i_mode) && inode->i_blocks - ea_blocks == 0);
160 }
161 return S_ISLNK(inode->i_mode) && inode->i_size &&
162 (inode->i_size < EXT4_N_BLOCKS * 4);
163}
164
165
166
167
168void ext4_evict_inode(struct inode *inode)
169{
170 handle_t *handle;
171 int err;
172
173
174
175
176
177 int extra_credits = 6;
178 struct ext4_xattr_inode_array *ea_inode_array = NULL;
179 bool freeze_protected = false;
180
181 trace_ext4_evict_inode(inode);
182
183 if (inode->i_nlink) {
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202 if (inode->i_ino != EXT4_JOURNAL_INO &&
203 ext4_should_journal_data(inode) &&
204 (S_ISLNK(inode->i_mode) || S_ISREG(inode->i_mode)) &&
205 inode->i_data.nrpages) {
206 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
207 tid_t commit_tid = EXT4_I(inode)->i_datasync_tid;
208
209 jbd2_complete_transaction(journal, commit_tid);
210 filemap_write_and_wait(&inode->i_data);
211 }
212 truncate_inode_pages_final(&inode->i_data);
213
214 goto no_delete;
215 }
216
217 if (is_bad_inode(inode))
218 goto no_delete;
219 dquot_initialize(inode);
220
221 if (ext4_should_order_data(inode))
222 ext4_begin_ordered_truncate(inode, 0);
223 truncate_inode_pages_final(&inode->i_data);
224
225
226
227
228
229
230 if (!list_empty_careful(&inode->i_io_list)) {
231 WARN_ON_ONCE(!ext4_should_journal_data(inode));
232 inode_io_list_del(inode);
233 }
234
235
236
237
238
239
240
241 if (!ext4_journal_current_handle()) {
242 sb_start_intwrite(inode->i_sb);
243 freeze_protected = true;
244 }
245
246 if (!IS_NOQUOTA(inode))
247 extra_credits += EXT4_MAXQUOTAS_DEL_BLOCKS(inode->i_sb);
248
249
250
251
252
253 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE,
254 ext4_blocks_for_truncate(inode) + extra_credits - 3);
255 if (IS_ERR(handle)) {
256 ext4_std_error(inode->i_sb, PTR_ERR(handle));
257
258
259
260
261
262 ext4_orphan_del(NULL, inode);
263 if (freeze_protected)
264 sb_end_intwrite(inode->i_sb);
265 goto no_delete;
266 }
267
268 if (IS_SYNC(inode))
269 ext4_handle_sync(handle);
270
271
272
273
274
275
276
277
278 if (ext4_inode_is_fast_symlink(inode))
279 memset(EXT4_I(inode)->i_data, 0, sizeof(EXT4_I(inode)->i_data));
280 inode->i_size = 0;
281 err = ext4_mark_inode_dirty(handle, inode);
282 if (err) {
283 ext4_warning(inode->i_sb,
284 "couldn't mark inode dirty (err %d)", err);
285 goto stop_handle;
286 }
287 if (inode->i_blocks) {
288 err = ext4_truncate(inode);
289 if (err) {
290 ext4_error_err(inode->i_sb, -err,
291 "couldn't truncate inode %lu (err %d)",
292 inode->i_ino, err);
293 goto stop_handle;
294 }
295 }
296
297
298 err = ext4_xattr_delete_inode(handle, inode, &ea_inode_array,
299 extra_credits);
300 if (err) {
301 ext4_warning(inode->i_sb, "xattr delete (err %d)", err);
302stop_handle:
303 ext4_journal_stop(handle);
304 ext4_orphan_del(NULL, inode);
305 if (freeze_protected)
306 sb_end_intwrite(inode->i_sb);
307 ext4_xattr_inode_array_free(ea_inode_array);
308 goto no_delete;
309 }
310
311
312
313
314
315
316
317
318
319 ext4_orphan_del(handle, inode);
320 EXT4_I(inode)->i_dtime = (__u32)ktime_get_real_seconds();
321
322
323
324
325
326
327
328
329 if (ext4_mark_inode_dirty(handle, inode))
330
331 ext4_clear_inode(inode);
332 else
333 ext4_free_inode(handle, inode);
334 ext4_journal_stop(handle);
335 if (freeze_protected)
336 sb_end_intwrite(inode->i_sb);
337 ext4_xattr_inode_array_free(ea_inode_array);
338 return;
339no_delete:
340 if (!list_empty(&EXT4_I(inode)->i_fc_list))
341 ext4_fc_mark_ineligible(inode->i_sb, EXT4_FC_REASON_NOMEM);
342 ext4_clear_inode(inode);
343}
344
345#ifdef CONFIG_QUOTA
346qsize_t *ext4_get_reserved_space(struct inode *inode)
347{
348 return &EXT4_I(inode)->i_reserved_quota;
349}
350#endif
351
352
353
354
355
356void ext4_da_update_reserve_space(struct inode *inode,
357 int used, int quota_claim)
358{
359 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
360 struct ext4_inode_info *ei = EXT4_I(inode);
361
362 spin_lock(&ei->i_block_reservation_lock);
363 trace_ext4_da_update_reserve_space(inode, used, quota_claim);
364 if (unlikely(used > ei->i_reserved_data_blocks)) {
365 ext4_warning(inode->i_sb, "%s: ino %lu, used %d "
366 "with only %d reserved data blocks",
367 __func__, inode->i_ino, used,
368 ei->i_reserved_data_blocks);
369 WARN_ON(1);
370 used = ei->i_reserved_data_blocks;
371 }
372
373
374 ei->i_reserved_data_blocks -= used;
375 percpu_counter_sub(&sbi->s_dirtyclusters_counter, used);
376
377 spin_unlock(&EXT4_I(inode)->i_block_reservation_lock);
378
379
380 if (quota_claim)
381 dquot_claim_block(inode, EXT4_C2B(sbi, used));
382 else {
383
384
385
386
387
388 dquot_release_reservation_block(inode, EXT4_C2B(sbi, used));
389 }
390
391
392
393
394
395
396 if ((ei->i_reserved_data_blocks == 0) &&
397 !inode_is_open_for_write(inode))
398 ext4_discard_preallocations(inode, 0);
399}
400
401static int __check_block_validity(struct inode *inode, const char *func,
402 unsigned int line,
403 struct ext4_map_blocks *map)
404{
405 if (ext4_has_feature_journal(inode->i_sb) &&
406 (inode->i_ino ==
407 le32_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_journal_inum)))
408 return 0;
409 if (!ext4_inode_block_valid(inode, map->m_pblk, map->m_len)) {
410 ext4_error_inode(inode, func, line, map->m_pblk,
411 "lblock %lu mapped to illegal pblock %llu "
412 "(length %d)", (unsigned long) map->m_lblk,
413 map->m_pblk, map->m_len);
414 return -EFSCORRUPTED;
415 }
416 return 0;
417}
418
419int ext4_issue_zeroout(struct inode *inode, ext4_lblk_t lblk, ext4_fsblk_t pblk,
420 ext4_lblk_t len)
421{
422 int ret;
423
424 if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
425 return fscrypt_zeroout_range(inode, lblk, pblk, len);
426
427 ret = sb_issue_zeroout(inode->i_sb, pblk, len, GFP_NOFS);
428 if (ret > 0)
429 ret = 0;
430
431 return ret;
432}
433
434#define check_block_validity(inode, map) \
435 __check_block_validity((inode), __func__, __LINE__, (map))
436
437#ifdef ES_AGGRESSIVE_TEST
438static void ext4_map_blocks_es_recheck(handle_t *handle,
439 struct inode *inode,
440 struct ext4_map_blocks *es_map,
441 struct ext4_map_blocks *map,
442 int flags)
443{
444 int retval;
445
446 map->m_flags = 0;
447
448
449
450
451
452
453
454 down_read(&EXT4_I(inode)->i_data_sem);
455 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
456 retval = ext4_ext_map_blocks(handle, inode, map, 0);
457 } else {
458 retval = ext4_ind_map_blocks(handle, inode, map, 0);
459 }
460 up_read((&EXT4_I(inode)->i_data_sem));
461
462
463
464
465
466 if (es_map->m_lblk != map->m_lblk ||
467 es_map->m_flags != map->m_flags ||
468 es_map->m_pblk != map->m_pblk) {
469 printk("ES cache assertion failed for inode: %lu "
470 "es_cached ex [%d/%d/%llu/%x] != "
471 "found ex [%d/%d/%llu/%x] retval %d flags %x\n",
472 inode->i_ino, es_map->m_lblk, es_map->m_len,
473 es_map->m_pblk, es_map->m_flags, map->m_lblk,
474 map->m_len, map->m_pblk, map->m_flags,
475 retval, flags);
476 }
477}
478#endif
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502int ext4_map_blocks(handle_t *handle, struct inode *inode,
503 struct ext4_map_blocks *map, int flags)
504{
505 struct extent_status es;
506 int retval;
507 int ret = 0;
508#ifdef ES_AGGRESSIVE_TEST
509 struct ext4_map_blocks orig_map;
510
511 memcpy(&orig_map, map, sizeof(*map));
512#endif
513
514 map->m_flags = 0;
515 ext_debug(inode, "flag 0x%x, max_blocks %u, logical block %lu\n",
516 flags, map->m_len, (unsigned long) map->m_lblk);
517
518
519
520
521 if (unlikely(map->m_len > INT_MAX))
522 map->m_len = INT_MAX;
523
524
525 if (unlikely(map->m_lblk >= EXT_MAX_BLOCKS))
526 return -EFSCORRUPTED;
527
528
529 if (!(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) &&
530 ext4_es_lookup_extent(inode, map->m_lblk, NULL, &es)) {
531 if (ext4_es_is_written(&es) || ext4_es_is_unwritten(&es)) {
532 map->m_pblk = ext4_es_pblock(&es) +
533 map->m_lblk - es.es_lblk;
534 map->m_flags |= ext4_es_is_written(&es) ?
535 EXT4_MAP_MAPPED : EXT4_MAP_UNWRITTEN;
536 retval = es.es_len - (map->m_lblk - es.es_lblk);
537 if (retval > map->m_len)
538 retval = map->m_len;
539 map->m_len = retval;
540 } else if (ext4_es_is_delayed(&es) || ext4_es_is_hole(&es)) {
541 map->m_pblk = 0;
542 retval = es.es_len - (map->m_lblk - es.es_lblk);
543 if (retval > map->m_len)
544 retval = map->m_len;
545 map->m_len = retval;
546 retval = 0;
547 } else {
548 BUG();
549 }
550#ifdef ES_AGGRESSIVE_TEST
551 ext4_map_blocks_es_recheck(handle, inode, map,
552 &orig_map, flags);
553#endif
554 goto found;
555 }
556
557
558
559
560
561 down_read(&EXT4_I(inode)->i_data_sem);
562 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
563 retval = ext4_ext_map_blocks(handle, inode, map, 0);
564 } else {
565 retval = ext4_ind_map_blocks(handle, inode, map, 0);
566 }
567 if (retval > 0) {
568 unsigned int status;
569
570 if (unlikely(retval != map->m_len)) {
571 ext4_warning(inode->i_sb,
572 "ES len assertion failed for inode "
573 "%lu: retval %d != map->m_len %d",
574 inode->i_ino, retval, map->m_len);
575 WARN_ON(1);
576 }
577
578 status = map->m_flags & EXT4_MAP_UNWRITTEN ?
579 EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
580 if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
581 !(status & EXTENT_STATUS_WRITTEN) &&
582 ext4_es_scan_range(inode, &ext4_es_is_delayed, map->m_lblk,
583 map->m_lblk + map->m_len - 1))
584 status |= EXTENT_STATUS_DELAYED;
585 ret = ext4_es_insert_extent(inode, map->m_lblk,
586 map->m_len, map->m_pblk, status);
587 if (ret < 0)
588 retval = ret;
589 }
590 up_read((&EXT4_I(inode)->i_data_sem));
591
592found:
593 if (retval > 0 && map->m_flags & EXT4_MAP_MAPPED) {
594 ret = check_block_validity(inode, map);
595 if (ret != 0)
596 return ret;
597 }
598
599
600 if ((flags & EXT4_GET_BLOCKS_CREATE) == 0)
601 return retval;
602
603
604
605
606
607
608
609
610 if (retval > 0 && map->m_flags & EXT4_MAP_MAPPED)
611
612
613
614
615
616 if (!(flags & EXT4_GET_BLOCKS_CONVERT_UNWRITTEN))
617 return retval;
618
619
620
621
622
623 map->m_flags &= ~EXT4_MAP_FLAGS;
624
625
626
627
628
629
630
631 down_write(&EXT4_I(inode)->i_data_sem);
632
633
634
635
636
637 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
638 retval = ext4_ext_map_blocks(handle, inode, map, flags);
639 } else {
640 retval = ext4_ind_map_blocks(handle, inode, map, flags);
641
642 if (retval > 0 && map->m_flags & EXT4_MAP_NEW) {
643
644
645
646
647
648 ext4_clear_inode_state(inode, EXT4_STATE_EXT_MIGRATE);
649 }
650
651
652
653
654
655
656
657 if ((retval > 0) &&
658 (flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE))
659 ext4_da_update_reserve_space(inode, retval, 1);
660 }
661
662 if (retval > 0) {
663 unsigned int status;
664
665 if (unlikely(retval != map->m_len)) {
666 ext4_warning(inode->i_sb,
667 "ES len assertion failed for inode "
668 "%lu: retval %d != map->m_len %d",
669 inode->i_ino, retval, map->m_len);
670 WARN_ON(1);
671 }
672
673
674
675
676
677
678
679
680 if (flags & EXT4_GET_BLOCKS_ZERO &&
681 map->m_flags & EXT4_MAP_MAPPED &&
682 map->m_flags & EXT4_MAP_NEW) {
683 ret = ext4_issue_zeroout(inode, map->m_lblk,
684 map->m_pblk, map->m_len);
685 if (ret) {
686 retval = ret;
687 goto out_sem;
688 }
689 }
690
691
692
693
694
695 if ((flags & EXT4_GET_BLOCKS_PRE_IO) &&
696 ext4_es_lookup_extent(inode, map->m_lblk, NULL, &es)) {
697 if (ext4_es_is_written(&es))
698 goto out_sem;
699 }
700 status = map->m_flags & EXT4_MAP_UNWRITTEN ?
701 EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
702 if (!(flags & EXT4_GET_BLOCKS_DELALLOC_RESERVE) &&
703 !(status & EXTENT_STATUS_WRITTEN) &&
704 ext4_es_scan_range(inode, &ext4_es_is_delayed, map->m_lblk,
705 map->m_lblk + map->m_len - 1))
706 status |= EXTENT_STATUS_DELAYED;
707 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len,
708 map->m_pblk, status);
709 if (ret < 0) {
710 retval = ret;
711 goto out_sem;
712 }
713 }
714
715out_sem:
716 up_write((&EXT4_I(inode)->i_data_sem));
717 if (retval > 0 && map->m_flags & EXT4_MAP_MAPPED) {
718 ret = check_block_validity(inode, map);
719 if (ret != 0)
720 return ret;
721
722
723
724
725
726
727 if (map->m_flags & EXT4_MAP_NEW &&
728 !(map->m_flags & EXT4_MAP_UNWRITTEN) &&
729 !(flags & EXT4_GET_BLOCKS_ZERO) &&
730 !ext4_is_quota_file(inode) &&
731 ext4_should_order_data(inode)) {
732 loff_t start_byte =
733 (loff_t)map->m_lblk << inode->i_blkbits;
734 loff_t length = (loff_t)map->m_len << inode->i_blkbits;
735
736 if (flags & EXT4_GET_BLOCKS_IO_SUBMIT)
737 ret = ext4_jbd2_inode_add_wait(handle, inode,
738 start_byte, length);
739 else
740 ret = ext4_jbd2_inode_add_write(handle, inode,
741 start_byte, length);
742 if (ret)
743 return ret;
744 }
745 ext4_fc_track_range(handle, inode, map->m_lblk,
746 map->m_lblk + map->m_len - 1);
747 }
748
749 if (retval < 0)
750 ext_debug(inode, "failed with err %d\n", retval);
751 return retval;
752}
753
754
755
756
757
758static void ext4_update_bh_state(struct buffer_head *bh, unsigned long flags)
759{
760 unsigned long old_state;
761 unsigned long new_state;
762
763 flags &= EXT4_MAP_FLAGS;
764
765
766 if (!bh->b_page) {
767 bh->b_state = (bh->b_state & ~EXT4_MAP_FLAGS) | flags;
768 return;
769 }
770
771
772
773
774
775 do {
776 old_state = READ_ONCE(bh->b_state);
777 new_state = (old_state & ~EXT4_MAP_FLAGS) | flags;
778 } while (unlikely(
779 cmpxchg(&bh->b_state, old_state, new_state) != old_state));
780}
781
782static int _ext4_get_block(struct inode *inode, sector_t iblock,
783 struct buffer_head *bh, int flags)
784{
785 struct ext4_map_blocks map;
786 int ret = 0;
787
788 if (ext4_has_inline_data(inode))
789 return -ERANGE;
790
791 map.m_lblk = iblock;
792 map.m_len = bh->b_size >> inode->i_blkbits;
793
794 ret = ext4_map_blocks(ext4_journal_current_handle(), inode, &map,
795 flags);
796 if (ret > 0) {
797 map_bh(bh, inode->i_sb, map.m_pblk);
798 ext4_update_bh_state(bh, map.m_flags);
799 bh->b_size = inode->i_sb->s_blocksize * map.m_len;
800 ret = 0;
801 } else if (ret == 0) {
802
803 bh->b_size = inode->i_sb->s_blocksize * map.m_len;
804 }
805 return ret;
806}
807
808int ext4_get_block(struct inode *inode, sector_t iblock,
809 struct buffer_head *bh, int create)
810{
811 return _ext4_get_block(inode, iblock, bh,
812 create ? EXT4_GET_BLOCKS_CREATE : 0);
813}
814
815
816
817
818
819
820int ext4_get_block_unwritten(struct inode *inode, sector_t iblock,
821 struct buffer_head *bh_result, int create)
822{
823 ext4_debug("ext4_get_block_unwritten: inode %lu, create flag %d\n",
824 inode->i_ino, create);
825 return _ext4_get_block(inode, iblock, bh_result,
826 EXT4_GET_BLOCKS_IO_CREATE_EXT);
827}
828
829
830#define DIO_MAX_BLOCKS 4096
831
832
833
834
835struct buffer_head *ext4_getblk(handle_t *handle, struct inode *inode,
836 ext4_lblk_t block, int map_flags)
837{
838 struct ext4_map_blocks map;
839 struct buffer_head *bh;
840 int create = map_flags & EXT4_GET_BLOCKS_CREATE;
841 int err;
842
843 ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
844 || handle != NULL || create == 0);
845
846 map.m_lblk = block;
847 map.m_len = 1;
848 err = ext4_map_blocks(handle, inode, &map, map_flags);
849
850 if (err == 0)
851 return create ? ERR_PTR(-ENOSPC) : NULL;
852 if (err < 0)
853 return ERR_PTR(err);
854
855 bh = sb_getblk(inode->i_sb, map.m_pblk);
856 if (unlikely(!bh))
857 return ERR_PTR(-ENOMEM);
858 if (map.m_flags & EXT4_MAP_NEW) {
859 ASSERT(create != 0);
860 ASSERT((EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY)
861 || (handle != NULL));
862
863
864
865
866
867
868
869
870 lock_buffer(bh);
871 BUFFER_TRACE(bh, "call get_create_access");
872 err = ext4_journal_get_create_access(handle, bh);
873 if (unlikely(err)) {
874 unlock_buffer(bh);
875 goto errout;
876 }
877 if (!buffer_uptodate(bh)) {
878 memset(bh->b_data, 0, inode->i_sb->s_blocksize);
879 set_buffer_uptodate(bh);
880 }
881 unlock_buffer(bh);
882 BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
883 err = ext4_handle_dirty_metadata(handle, inode, bh);
884 if (unlikely(err))
885 goto errout;
886 } else
887 BUFFER_TRACE(bh, "not a new buffer");
888 return bh;
889errout:
890 brelse(bh);
891 return ERR_PTR(err);
892}
893
894struct buffer_head *ext4_bread(handle_t *handle, struct inode *inode,
895 ext4_lblk_t block, int map_flags)
896{
897 struct buffer_head *bh;
898 int ret;
899
900 bh = ext4_getblk(handle, inode, block, map_flags);
901 if (IS_ERR(bh))
902 return bh;
903 if (!bh || ext4_buffer_uptodate(bh))
904 return bh;
905
906 ret = ext4_read_bh_lock(bh, REQ_META | REQ_PRIO, true);
907 if (ret) {
908 put_bh(bh);
909 return ERR_PTR(ret);
910 }
911 return bh;
912}
913
914
915int ext4_bread_batch(struct inode *inode, ext4_lblk_t block, int bh_count,
916 bool wait, struct buffer_head **bhs)
917{
918 int i, err;
919
920 for (i = 0; i < bh_count; i++) {
921 bhs[i] = ext4_getblk(NULL, inode, block + i, 0 );
922 if (IS_ERR(bhs[i])) {
923 err = PTR_ERR(bhs[i]);
924 bh_count = i;
925 goto out_brelse;
926 }
927 }
928
929 for (i = 0; i < bh_count; i++)
930
931 if (bhs[i] && !ext4_buffer_uptodate(bhs[i]))
932 ext4_read_bh_lock(bhs[i], REQ_META | REQ_PRIO, false);
933
934 if (!wait)
935 return 0;
936
937 for (i = 0; i < bh_count; i++)
938 if (bhs[i])
939 wait_on_buffer(bhs[i]);
940
941 for (i = 0; i < bh_count; i++) {
942 if (bhs[i] && !buffer_uptodate(bhs[i])) {
943 err = -EIO;
944 goto out_brelse;
945 }
946 }
947 return 0;
948
949out_brelse:
950 for (i = 0; i < bh_count; i++) {
951 brelse(bhs[i]);
952 bhs[i] = NULL;
953 }
954 return err;
955}
956
957int ext4_walk_page_buffers(handle_t *handle,
958 struct buffer_head *head,
959 unsigned from,
960 unsigned to,
961 int *partial,
962 int (*fn)(handle_t *handle,
963 struct buffer_head *bh))
964{
965 struct buffer_head *bh;
966 unsigned block_start, block_end;
967 unsigned blocksize = head->b_size;
968 int err, ret = 0;
969 struct buffer_head *next;
970
971 for (bh = head, block_start = 0;
972 ret == 0 && (bh != head || !block_start);
973 block_start = block_end, bh = next) {
974 next = bh->b_this_page;
975 block_end = block_start + blocksize;
976 if (block_end <= from || block_start >= to) {
977 if (partial && !buffer_uptodate(bh))
978 *partial = 1;
979 continue;
980 }
981 err = (*fn)(handle, bh);
982 if (!ret)
983 ret = err;
984 }
985 return ret;
986}
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012int do_journal_get_write_access(handle_t *handle,
1013 struct buffer_head *bh)
1014{
1015 int dirty = buffer_dirty(bh);
1016 int ret;
1017
1018 if (!buffer_mapped(bh) || buffer_freed(bh))
1019 return 0;
1020
1021
1022
1023
1024
1025
1026
1027
1028 if (dirty)
1029 clear_buffer_dirty(bh);
1030 BUFFER_TRACE(bh, "get write access");
1031 ret = ext4_journal_get_write_access(handle, bh);
1032 if (!ret && dirty)
1033 ret = ext4_handle_dirty_metadata(handle, NULL, bh);
1034 return ret;
1035}
1036
1037#ifdef CONFIG_FS_ENCRYPTION
1038static int ext4_block_write_begin(struct page *page, loff_t pos, unsigned len,
1039 get_block_t *get_block)
1040{
1041 unsigned from = pos & (PAGE_SIZE - 1);
1042 unsigned to = from + len;
1043 struct inode *inode = page->mapping->host;
1044 unsigned block_start, block_end;
1045 sector_t block;
1046 int err = 0;
1047 unsigned blocksize = inode->i_sb->s_blocksize;
1048 unsigned bbits;
1049 struct buffer_head *bh, *head, *wait[2];
1050 int nr_wait = 0;
1051 int i;
1052
1053 BUG_ON(!PageLocked(page));
1054 BUG_ON(from > PAGE_SIZE);
1055 BUG_ON(to > PAGE_SIZE);
1056 BUG_ON(from > to);
1057
1058 if (!page_has_buffers(page))
1059 create_empty_buffers(page, blocksize, 0);
1060 head = page_buffers(page);
1061 bbits = ilog2(blocksize);
1062 block = (sector_t)page->index << (PAGE_SHIFT - bbits);
1063
1064 for (bh = head, block_start = 0; bh != head || !block_start;
1065 block++, block_start = block_end, bh = bh->b_this_page) {
1066 block_end = block_start + blocksize;
1067 if (block_end <= from || block_start >= to) {
1068 if (PageUptodate(page)) {
1069 if (!buffer_uptodate(bh))
1070 set_buffer_uptodate(bh);
1071 }
1072 continue;
1073 }
1074 if (buffer_new(bh))
1075 clear_buffer_new(bh);
1076 if (!buffer_mapped(bh)) {
1077 WARN_ON(bh->b_size != blocksize);
1078 err = get_block(inode, block, bh, 1);
1079 if (err)
1080 break;
1081 if (buffer_new(bh)) {
1082 if (PageUptodate(page)) {
1083 clear_buffer_new(bh);
1084 set_buffer_uptodate(bh);
1085 mark_buffer_dirty(bh);
1086 continue;
1087 }
1088 if (block_end > to || block_start < from)
1089 zero_user_segments(page, to, block_end,
1090 block_start, from);
1091 continue;
1092 }
1093 }
1094 if (PageUptodate(page)) {
1095 if (!buffer_uptodate(bh))
1096 set_buffer_uptodate(bh);
1097 continue;
1098 }
1099 if (!buffer_uptodate(bh) && !buffer_delay(bh) &&
1100 !buffer_unwritten(bh) &&
1101 (block_start < from || block_end > to)) {
1102 ext4_read_bh_lock(bh, 0, false);
1103 wait[nr_wait++] = bh;
1104 }
1105 }
1106
1107
1108
1109 for (i = 0; i < nr_wait; i++) {
1110 wait_on_buffer(wait[i]);
1111 if (!buffer_uptodate(wait[i]))
1112 err = -EIO;
1113 }
1114 if (unlikely(err)) {
1115 page_zero_new_buffers(page, from, to);
1116 } else if (fscrypt_inode_uses_fs_layer_crypto(inode)) {
1117 for (i = 0; i < nr_wait; i++) {
1118 int err2;
1119
1120 err2 = fscrypt_decrypt_pagecache_blocks(page, blocksize,
1121 bh_offset(wait[i]));
1122 if (err2) {
1123 clear_buffer_uptodate(wait[i]);
1124 err = err2;
1125 }
1126 }
1127 }
1128
1129 return err;
1130}
1131#endif
1132
1133static int ext4_write_begin(struct file *file, struct address_space *mapping,
1134 loff_t pos, unsigned len, unsigned flags,
1135 struct page **pagep, void **fsdata)
1136{
1137 struct inode *inode = mapping->host;
1138 int ret, needed_blocks;
1139 handle_t *handle;
1140 int retries = 0;
1141 struct page *page;
1142 pgoff_t index;
1143 unsigned from, to;
1144
1145 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
1146 return -EIO;
1147
1148 trace_ext4_write_begin(inode, pos, len, flags);
1149
1150
1151
1152
1153 needed_blocks = ext4_writepage_trans_blocks(inode) + 1;
1154 index = pos >> PAGE_SHIFT;
1155 from = pos & (PAGE_SIZE - 1);
1156 to = from + len;
1157
1158 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
1159 ret = ext4_try_to_write_inline_data(mapping, inode, pos, len,
1160 flags, pagep);
1161 if (ret < 0)
1162 return ret;
1163 if (ret == 1)
1164 return 0;
1165 }
1166
1167
1168
1169
1170
1171
1172
1173
1174retry_grab:
1175 page = grab_cache_page_write_begin(mapping, index, flags);
1176 if (!page)
1177 return -ENOMEM;
1178 unlock_page(page);
1179
1180retry_journal:
1181 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE, needed_blocks);
1182 if (IS_ERR(handle)) {
1183 put_page(page);
1184 return PTR_ERR(handle);
1185 }
1186
1187 lock_page(page);
1188 if (page->mapping != mapping) {
1189
1190 unlock_page(page);
1191 put_page(page);
1192 ext4_journal_stop(handle);
1193 goto retry_grab;
1194 }
1195
1196 wait_for_stable_page(page);
1197
1198#ifdef CONFIG_FS_ENCRYPTION
1199 if (ext4_should_dioread_nolock(inode))
1200 ret = ext4_block_write_begin(page, pos, len,
1201 ext4_get_block_unwritten);
1202 else
1203 ret = ext4_block_write_begin(page, pos, len,
1204 ext4_get_block);
1205#else
1206 if (ext4_should_dioread_nolock(inode))
1207 ret = __block_write_begin(page, pos, len,
1208 ext4_get_block_unwritten);
1209 else
1210 ret = __block_write_begin(page, pos, len, ext4_get_block);
1211#endif
1212 if (!ret && ext4_should_journal_data(inode)) {
1213 ret = ext4_walk_page_buffers(handle, page_buffers(page),
1214 from, to, NULL,
1215 do_journal_get_write_access);
1216 }
1217
1218 if (ret) {
1219 bool extended = (pos + len > inode->i_size) &&
1220 !ext4_verity_in_progress(inode);
1221
1222 unlock_page(page);
1223
1224
1225
1226
1227
1228
1229
1230
1231 if (extended && ext4_can_truncate(inode))
1232 ext4_orphan_add(handle, inode);
1233
1234 ext4_journal_stop(handle);
1235 if (extended) {
1236 ext4_truncate_failed_write(inode);
1237
1238
1239
1240
1241
1242
1243 if (inode->i_nlink)
1244 ext4_orphan_del(NULL, inode);
1245 }
1246
1247 if (ret == -ENOSPC &&
1248 ext4_should_retry_alloc(inode->i_sb, &retries))
1249 goto retry_journal;
1250 put_page(page);
1251 return ret;
1252 }
1253 *pagep = page;
1254 return ret;
1255}
1256
1257
1258static int write_end_fn(handle_t *handle, struct buffer_head *bh)
1259{
1260 int ret;
1261 if (!buffer_mapped(bh) || buffer_freed(bh))
1262 return 0;
1263 set_buffer_uptodate(bh);
1264 ret = ext4_handle_dirty_metadata(handle, NULL, bh);
1265 clear_buffer_meta(bh);
1266 clear_buffer_prio(bh);
1267 return ret;
1268}
1269
1270
1271
1272
1273
1274
1275
1276
1277static int ext4_write_end(struct file *file,
1278 struct address_space *mapping,
1279 loff_t pos, unsigned len, unsigned copied,
1280 struct page *page, void *fsdata)
1281{
1282 handle_t *handle = ext4_journal_current_handle();
1283 struct inode *inode = mapping->host;
1284 loff_t old_size = inode->i_size;
1285 int ret = 0, ret2;
1286 int i_size_changed = 0;
1287 int inline_data = ext4_has_inline_data(inode);
1288 bool verity = ext4_verity_in_progress(inode);
1289
1290 trace_ext4_write_end(inode, pos, len, copied);
1291 if (inline_data) {
1292 ret = ext4_write_inline_data_end(inode, pos, len,
1293 copied, page);
1294 if (ret < 0) {
1295 unlock_page(page);
1296 put_page(page);
1297 goto errout;
1298 }
1299 copied = ret;
1300 } else
1301 copied = block_write_end(file, mapping, pos,
1302 len, copied, page, fsdata);
1303
1304
1305
1306
1307
1308
1309
1310 if (!verity)
1311 i_size_changed = ext4_update_inode_size(inode, pos + copied);
1312 unlock_page(page);
1313 put_page(page);
1314
1315 if (old_size < pos && !verity)
1316 pagecache_isize_extended(inode, old_size, pos);
1317
1318
1319
1320
1321
1322
1323 if (i_size_changed || inline_data)
1324 ret = ext4_mark_inode_dirty(handle, inode);
1325
1326 if (pos + len > inode->i_size && !verity && ext4_can_truncate(inode))
1327
1328
1329
1330
1331 ext4_orphan_add(handle, inode);
1332errout:
1333 ret2 = ext4_journal_stop(handle);
1334 if (!ret)
1335 ret = ret2;
1336
1337 if (pos + len > inode->i_size && !verity) {
1338 ext4_truncate_failed_write(inode);
1339
1340
1341
1342
1343
1344 if (inode->i_nlink)
1345 ext4_orphan_del(NULL, inode);
1346 }
1347
1348 return ret ? ret : copied;
1349}
1350
1351
1352
1353
1354
1355
1356static void ext4_journalled_zero_new_buffers(handle_t *handle,
1357 struct page *page,
1358 unsigned from, unsigned to)
1359{
1360 unsigned int block_start = 0, block_end;
1361 struct buffer_head *head, *bh;
1362
1363 bh = head = page_buffers(page);
1364 do {
1365 block_end = block_start + bh->b_size;
1366 if (buffer_new(bh)) {
1367 if (block_end > from && block_start < to) {
1368 if (!PageUptodate(page)) {
1369 unsigned start, size;
1370
1371 start = max(from, block_start);
1372 size = min(to, block_end) - start;
1373
1374 zero_user(page, start, size);
1375 write_end_fn(handle, bh);
1376 }
1377 clear_buffer_new(bh);
1378 }
1379 }
1380 block_start = block_end;
1381 bh = bh->b_this_page;
1382 } while (bh != head);
1383}
1384
1385static int ext4_journalled_write_end(struct file *file,
1386 struct address_space *mapping,
1387 loff_t pos, unsigned len, unsigned copied,
1388 struct page *page, void *fsdata)
1389{
1390 handle_t *handle = ext4_journal_current_handle();
1391 struct inode *inode = mapping->host;
1392 loff_t old_size = inode->i_size;
1393 int ret = 0, ret2;
1394 int partial = 0;
1395 unsigned from, to;
1396 int size_changed = 0;
1397 int inline_data = ext4_has_inline_data(inode);
1398 bool verity = ext4_verity_in_progress(inode);
1399
1400 trace_ext4_journalled_write_end(inode, pos, len, copied);
1401 from = pos & (PAGE_SIZE - 1);
1402 to = from + len;
1403
1404 BUG_ON(!ext4_handle_valid(handle));
1405
1406 if (inline_data) {
1407 ret = ext4_write_inline_data_end(inode, pos, len,
1408 copied, page);
1409 if (ret < 0) {
1410 unlock_page(page);
1411 put_page(page);
1412 goto errout;
1413 }
1414 copied = ret;
1415 } else if (unlikely(copied < len) && !PageUptodate(page)) {
1416 copied = 0;
1417 ext4_journalled_zero_new_buffers(handle, page, from, to);
1418 } else {
1419 if (unlikely(copied < len))
1420 ext4_journalled_zero_new_buffers(handle, page,
1421 from + copied, to);
1422 ret = ext4_walk_page_buffers(handle, page_buffers(page), from,
1423 from + copied, &partial,
1424 write_end_fn);
1425 if (!partial)
1426 SetPageUptodate(page);
1427 }
1428 if (!verity)
1429 size_changed = ext4_update_inode_size(inode, pos + copied);
1430 ext4_set_inode_state(inode, EXT4_STATE_JDATA);
1431 EXT4_I(inode)->i_datasync_tid = handle->h_transaction->t_tid;
1432 unlock_page(page);
1433 put_page(page);
1434
1435 if (old_size < pos && !verity)
1436 pagecache_isize_extended(inode, old_size, pos);
1437
1438 if (size_changed || inline_data) {
1439 ret2 = ext4_mark_inode_dirty(handle, inode);
1440 if (!ret)
1441 ret = ret2;
1442 }
1443
1444 if (pos + len > inode->i_size && !verity && ext4_can_truncate(inode))
1445
1446
1447
1448
1449 ext4_orphan_add(handle, inode);
1450
1451errout:
1452 ret2 = ext4_journal_stop(handle);
1453 if (!ret)
1454 ret = ret2;
1455 if (pos + len > inode->i_size && !verity) {
1456 ext4_truncate_failed_write(inode);
1457
1458
1459
1460
1461
1462 if (inode->i_nlink)
1463 ext4_orphan_del(NULL, inode);
1464 }
1465
1466 return ret ? ret : copied;
1467}
1468
1469
1470
1471
1472static int ext4_da_reserve_space(struct inode *inode)
1473{
1474 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1475 struct ext4_inode_info *ei = EXT4_I(inode);
1476 int ret;
1477
1478
1479
1480
1481
1482
1483 ret = dquot_reserve_block(inode, EXT4_C2B(sbi, 1));
1484 if (ret)
1485 return ret;
1486
1487 spin_lock(&ei->i_block_reservation_lock);
1488 if (ext4_claim_free_clusters(sbi, 1, 0)) {
1489 spin_unlock(&ei->i_block_reservation_lock);
1490 dquot_release_reservation_block(inode, EXT4_C2B(sbi, 1));
1491 return -ENOSPC;
1492 }
1493 ei->i_reserved_data_blocks++;
1494 trace_ext4_da_reserve_space(inode);
1495 spin_unlock(&ei->i_block_reservation_lock);
1496
1497 return 0;
1498}
1499
1500void ext4_da_release_space(struct inode *inode, int to_free)
1501{
1502 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1503 struct ext4_inode_info *ei = EXT4_I(inode);
1504
1505 if (!to_free)
1506 return;
1507
1508 spin_lock(&EXT4_I(inode)->i_block_reservation_lock);
1509
1510 trace_ext4_da_release_space(inode, to_free);
1511 if (unlikely(to_free > ei->i_reserved_data_blocks)) {
1512
1513
1514
1515
1516
1517
1518 ext4_warning(inode->i_sb, "ext4_da_release_space: "
1519 "ino %lu, to_free %d with only %d reserved "
1520 "data blocks", inode->i_ino, to_free,
1521 ei->i_reserved_data_blocks);
1522 WARN_ON(1);
1523 to_free = ei->i_reserved_data_blocks;
1524 }
1525 ei->i_reserved_data_blocks -= to_free;
1526
1527
1528 percpu_counter_sub(&sbi->s_dirtyclusters_counter, to_free);
1529
1530 spin_unlock(&EXT4_I(inode)->i_block_reservation_lock);
1531
1532 dquot_release_reservation_block(inode, EXT4_C2B(sbi, to_free));
1533}
1534
1535
1536
1537
1538
1539struct mpage_da_data {
1540 struct inode *inode;
1541 struct writeback_control *wbc;
1542
1543 pgoff_t first_page;
1544 pgoff_t next_page;
1545 pgoff_t last_page;
1546
1547
1548
1549
1550
1551 struct ext4_map_blocks map;
1552 struct ext4_io_submit io_submit;
1553 unsigned int do_map:1;
1554 unsigned int scanned_until_end:1;
1555};
1556
1557static void mpage_release_unused_pages(struct mpage_da_data *mpd,
1558 bool invalidate)
1559{
1560 int nr_pages, i;
1561 pgoff_t index, end;
1562 struct pagevec pvec;
1563 struct inode *inode = mpd->inode;
1564 struct address_space *mapping = inode->i_mapping;
1565
1566
1567 if (mpd->first_page >= mpd->next_page)
1568 return;
1569
1570 mpd->scanned_until_end = 0;
1571 index = mpd->first_page;
1572 end = mpd->next_page - 1;
1573 if (invalidate) {
1574 ext4_lblk_t start, last;
1575 start = index << (PAGE_SHIFT - inode->i_blkbits);
1576 last = end << (PAGE_SHIFT - inode->i_blkbits);
1577 ext4_es_remove_extent(inode, start, last - start + 1);
1578 }
1579
1580 pagevec_init(&pvec);
1581 while (index <= end) {
1582 nr_pages = pagevec_lookup_range(&pvec, mapping, &index, end);
1583 if (nr_pages == 0)
1584 break;
1585 for (i = 0; i < nr_pages; i++) {
1586 struct page *page = pvec.pages[i];
1587
1588 BUG_ON(!PageLocked(page));
1589 BUG_ON(PageWriteback(page));
1590 if (invalidate) {
1591 if (page_mapped(page))
1592 clear_page_dirty_for_io(page);
1593 block_invalidatepage(page, 0, PAGE_SIZE);
1594 ClearPageUptodate(page);
1595 }
1596 unlock_page(page);
1597 }
1598 pagevec_release(&pvec);
1599 }
1600}
1601
1602static void ext4_print_free_blocks(struct inode *inode)
1603{
1604 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1605 struct super_block *sb = inode->i_sb;
1606 struct ext4_inode_info *ei = EXT4_I(inode);
1607
1608 ext4_msg(sb, KERN_CRIT, "Total free blocks count %lld",
1609 EXT4_C2B(EXT4_SB(inode->i_sb),
1610 ext4_count_free_clusters(sb)));
1611 ext4_msg(sb, KERN_CRIT, "Free/Dirty block details");
1612 ext4_msg(sb, KERN_CRIT, "free_blocks=%lld",
1613 (long long) EXT4_C2B(EXT4_SB(sb),
1614 percpu_counter_sum(&sbi->s_freeclusters_counter)));
1615 ext4_msg(sb, KERN_CRIT, "dirty_blocks=%lld",
1616 (long long) EXT4_C2B(EXT4_SB(sb),
1617 percpu_counter_sum(&sbi->s_dirtyclusters_counter)));
1618 ext4_msg(sb, KERN_CRIT, "Block reservation details");
1619 ext4_msg(sb, KERN_CRIT, "i_reserved_data_blocks=%u",
1620 ei->i_reserved_data_blocks);
1621 return;
1622}
1623
1624static int ext4_bh_delay_or_unwritten(handle_t *handle, struct buffer_head *bh)
1625{
1626 return (buffer_delay(bh) || buffer_unwritten(bh)) && buffer_dirty(bh);
1627}
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640static int ext4_insert_delayed_block(struct inode *inode, ext4_lblk_t lblk)
1641{
1642 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
1643 int ret;
1644 bool allocated = false;
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657 if (sbi->s_cluster_ratio == 1) {
1658 ret = ext4_da_reserve_space(inode);
1659 if (ret != 0)
1660 goto errout;
1661 } else {
1662 if (!ext4_es_scan_clu(inode, &ext4_es_is_delonly, lblk)) {
1663 if (!ext4_es_scan_clu(inode,
1664 &ext4_es_is_mapped, lblk)) {
1665 ret = ext4_clu_mapped(inode,
1666 EXT4_B2C(sbi, lblk));
1667 if (ret < 0)
1668 goto errout;
1669 if (ret == 0) {
1670 ret = ext4_da_reserve_space(inode);
1671 if (ret != 0)
1672 goto errout;
1673 } else {
1674 allocated = true;
1675 }
1676 } else {
1677 allocated = true;
1678 }
1679 }
1680 }
1681
1682 ret = ext4_es_insert_delayed_block(inode, lblk, allocated);
1683
1684errout:
1685 return ret;
1686}
1687
1688
1689
1690
1691
1692
1693
1694static int ext4_da_map_blocks(struct inode *inode, sector_t iblock,
1695 struct ext4_map_blocks *map,
1696 struct buffer_head *bh)
1697{
1698 struct extent_status es;
1699 int retval;
1700 sector_t invalid_block = ~((sector_t) 0xffff);
1701#ifdef ES_AGGRESSIVE_TEST
1702 struct ext4_map_blocks orig_map;
1703
1704 memcpy(&orig_map, map, sizeof(*map));
1705#endif
1706
1707 if (invalid_block < ext4_blocks_count(EXT4_SB(inode->i_sb)->s_es))
1708 invalid_block = ~0;
1709
1710 map->m_flags = 0;
1711 ext_debug(inode, "max_blocks %u, logical block %lu\n", map->m_len,
1712 (unsigned long) map->m_lblk);
1713
1714
1715 if (ext4_es_lookup_extent(inode, iblock, NULL, &es)) {
1716 if (ext4_es_is_hole(&es)) {
1717 retval = 0;
1718 down_read(&EXT4_I(inode)->i_data_sem);
1719 goto add_delayed;
1720 }
1721
1722
1723
1724
1725
1726 if (ext4_es_is_delayed(&es) && !ext4_es_is_unwritten(&es)) {
1727 map_bh(bh, inode->i_sb, invalid_block);
1728 set_buffer_new(bh);
1729 set_buffer_delay(bh);
1730 return 0;
1731 }
1732
1733 map->m_pblk = ext4_es_pblock(&es) + iblock - es.es_lblk;
1734 retval = es.es_len - (iblock - es.es_lblk);
1735 if (retval > map->m_len)
1736 retval = map->m_len;
1737 map->m_len = retval;
1738 if (ext4_es_is_written(&es))
1739 map->m_flags |= EXT4_MAP_MAPPED;
1740 else if (ext4_es_is_unwritten(&es))
1741 map->m_flags |= EXT4_MAP_UNWRITTEN;
1742 else
1743 BUG();
1744
1745#ifdef ES_AGGRESSIVE_TEST
1746 ext4_map_blocks_es_recheck(NULL, inode, map, &orig_map, 0);
1747#endif
1748 return retval;
1749 }
1750
1751
1752
1753
1754
1755 down_read(&EXT4_I(inode)->i_data_sem);
1756 if (ext4_has_inline_data(inode))
1757 retval = 0;
1758 else if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
1759 retval = ext4_ext_map_blocks(NULL, inode, map, 0);
1760 else
1761 retval = ext4_ind_map_blocks(NULL, inode, map, 0);
1762
1763add_delayed:
1764 if (retval == 0) {
1765 int ret;
1766
1767
1768
1769
1770
1771
1772 ret = ext4_insert_delayed_block(inode, map->m_lblk);
1773 if (ret != 0) {
1774 retval = ret;
1775 goto out_unlock;
1776 }
1777
1778 map_bh(bh, inode->i_sb, invalid_block);
1779 set_buffer_new(bh);
1780 set_buffer_delay(bh);
1781 } else if (retval > 0) {
1782 int ret;
1783 unsigned int status;
1784
1785 if (unlikely(retval != map->m_len)) {
1786 ext4_warning(inode->i_sb,
1787 "ES len assertion failed for inode "
1788 "%lu: retval %d != map->m_len %d",
1789 inode->i_ino, retval, map->m_len);
1790 WARN_ON(1);
1791 }
1792
1793 status = map->m_flags & EXT4_MAP_UNWRITTEN ?
1794 EXTENT_STATUS_UNWRITTEN : EXTENT_STATUS_WRITTEN;
1795 ret = ext4_es_insert_extent(inode, map->m_lblk, map->m_len,
1796 map->m_pblk, status);
1797 if (ret != 0)
1798 retval = ret;
1799 }
1800
1801out_unlock:
1802 up_read((&EXT4_I(inode)->i_data_sem));
1803
1804 return retval;
1805}
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819int ext4_da_get_block_prep(struct inode *inode, sector_t iblock,
1820 struct buffer_head *bh, int create)
1821{
1822 struct ext4_map_blocks map;
1823 int ret = 0;
1824
1825 BUG_ON(create == 0);
1826 BUG_ON(bh->b_size != inode->i_sb->s_blocksize);
1827
1828 map.m_lblk = iblock;
1829 map.m_len = 1;
1830
1831
1832
1833
1834
1835
1836 ret = ext4_da_map_blocks(inode, iblock, &map, bh);
1837 if (ret <= 0)
1838 return ret;
1839
1840 map_bh(bh, inode->i_sb, map.m_pblk);
1841 ext4_update_bh_state(bh, map.m_flags);
1842
1843 if (buffer_unwritten(bh)) {
1844
1845
1846
1847
1848
1849
1850 set_buffer_new(bh);
1851 set_buffer_mapped(bh);
1852 }
1853 return 0;
1854}
1855
1856static int bget_one(handle_t *handle, struct buffer_head *bh)
1857{
1858 get_bh(bh);
1859 return 0;
1860}
1861
1862static int bput_one(handle_t *handle, struct buffer_head *bh)
1863{
1864 put_bh(bh);
1865 return 0;
1866}
1867
1868static int __ext4_journalled_writepage(struct page *page,
1869 unsigned int len)
1870{
1871 struct address_space *mapping = page->mapping;
1872 struct inode *inode = mapping->host;
1873 struct buffer_head *page_bufs = NULL;
1874 handle_t *handle = NULL;
1875 int ret = 0, err = 0;
1876 int inline_data = ext4_has_inline_data(inode);
1877 struct buffer_head *inode_bh = NULL;
1878
1879 ClearPageChecked(page);
1880
1881 if (inline_data) {
1882 BUG_ON(page->index != 0);
1883 BUG_ON(len > ext4_get_max_inline_size(inode));
1884 inode_bh = ext4_journalled_write_inline_data(inode, len, page);
1885 if (inode_bh == NULL)
1886 goto out;
1887 } else {
1888 page_bufs = page_buffers(page);
1889 if (!page_bufs) {
1890 BUG();
1891 goto out;
1892 }
1893 ext4_walk_page_buffers(handle, page_bufs, 0, len,
1894 NULL, bget_one);
1895 }
1896
1897
1898
1899
1900
1901 get_page(page);
1902 unlock_page(page);
1903
1904 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
1905 ext4_writepage_trans_blocks(inode));
1906 if (IS_ERR(handle)) {
1907 ret = PTR_ERR(handle);
1908 put_page(page);
1909 goto out_no_pagelock;
1910 }
1911 BUG_ON(!ext4_handle_valid(handle));
1912
1913 lock_page(page);
1914 put_page(page);
1915 if (page->mapping != mapping) {
1916
1917 ext4_journal_stop(handle);
1918 ret = 0;
1919 goto out;
1920 }
1921
1922 if (inline_data) {
1923 ret = ext4_mark_inode_dirty(handle, inode);
1924 } else {
1925 ret = ext4_walk_page_buffers(handle, page_bufs, 0, len, NULL,
1926 do_journal_get_write_access);
1927
1928 err = ext4_walk_page_buffers(handle, page_bufs, 0, len, NULL,
1929 write_end_fn);
1930 }
1931 if (ret == 0)
1932 ret = err;
1933 err = ext4_jbd2_inode_add_write(handle, inode, page_offset(page), len);
1934 if (ret == 0)
1935 ret = err;
1936 EXT4_I(inode)->i_datasync_tid = handle->h_transaction->t_tid;
1937 err = ext4_journal_stop(handle);
1938 if (!ret)
1939 ret = err;
1940
1941 ext4_set_inode_state(inode, EXT4_STATE_JDATA);
1942out:
1943 unlock_page(page);
1944out_no_pagelock:
1945 if (!inline_data && page_bufs)
1946 ext4_walk_page_buffers(NULL, page_bufs, 0, len,
1947 NULL, bput_one);
1948 brelse(inode_bh);
1949 return ret;
1950}
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993static int ext4_writepage(struct page *page,
1994 struct writeback_control *wbc)
1995{
1996 int ret = 0;
1997 loff_t size;
1998 unsigned int len;
1999 struct buffer_head *page_bufs = NULL;
2000 struct inode *inode = page->mapping->host;
2001 struct ext4_io_submit io_submit;
2002 bool keep_towrite = false;
2003
2004 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) {
2005 inode->i_mapping->a_ops->invalidatepage(page, 0, PAGE_SIZE);
2006 unlock_page(page);
2007 return -EIO;
2008 }
2009
2010 trace_ext4_writepage(page);
2011 size = i_size_read(inode);
2012 if (page->index == size >> PAGE_SHIFT &&
2013 !ext4_verity_in_progress(inode))
2014 len = size & ~PAGE_MASK;
2015 else
2016 len = PAGE_SIZE;
2017
2018 page_bufs = page_buffers(page);
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036 if (ext4_walk_page_buffers(NULL, page_bufs, 0, len, NULL,
2037 ext4_bh_delay_or_unwritten)) {
2038 redirty_page_for_writepage(wbc, page);
2039 if ((current->flags & PF_MEMALLOC) ||
2040 (inode->i_sb->s_blocksize == PAGE_SIZE)) {
2041
2042
2043
2044
2045
2046 WARN_ON_ONCE((current->flags & (PF_MEMALLOC|PF_KSWAPD))
2047 == PF_MEMALLOC);
2048 unlock_page(page);
2049 return 0;
2050 }
2051 keep_towrite = true;
2052 }
2053
2054 if (PageChecked(page) && ext4_should_journal_data(inode))
2055
2056
2057
2058
2059 return __ext4_journalled_writepage(page, len);
2060
2061 ext4_io_submit_init(&io_submit, wbc);
2062 io_submit.io_end = ext4_init_io_end(inode, GFP_NOFS);
2063 if (!io_submit.io_end) {
2064 redirty_page_for_writepage(wbc, page);
2065 unlock_page(page);
2066 return -ENOMEM;
2067 }
2068 ret = ext4_bio_write_page(&io_submit, page, len, keep_towrite);
2069 ext4_io_submit(&io_submit);
2070
2071 ext4_put_io_end_defer(io_submit.io_end);
2072 return ret;
2073}
2074
2075static int mpage_submit_page(struct mpage_da_data *mpd, struct page *page)
2076{
2077 int len;
2078 loff_t size;
2079 int err;
2080
2081 BUG_ON(page->index != mpd->first_page);
2082 clear_page_dirty_for_io(page);
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096 size = i_size_read(mpd->inode);
2097 if (page->index == size >> PAGE_SHIFT &&
2098 !ext4_verity_in_progress(mpd->inode))
2099 len = size & ~PAGE_MASK;
2100 else
2101 len = PAGE_SIZE;
2102 err = ext4_bio_write_page(&mpd->io_submit, page, len, false);
2103 if (!err)
2104 mpd->wbc->nr_to_write--;
2105 mpd->first_page++;
2106
2107 return err;
2108}
2109
2110#define BH_FLAGS (BIT(BH_Unwritten) | BIT(BH_Delay))
2111
2112
2113
2114
2115
2116
2117#define MAX_WRITEPAGES_EXTENT_LEN 2048
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133static bool mpage_add_bh_to_extent(struct mpage_da_data *mpd, ext4_lblk_t lblk,
2134 struct buffer_head *bh)
2135{
2136 struct ext4_map_blocks *map = &mpd->map;
2137
2138
2139 if (!buffer_dirty(bh) || !buffer_mapped(bh) ||
2140 (!buffer_delay(bh) && !buffer_unwritten(bh))) {
2141
2142 if (map->m_len == 0)
2143 return true;
2144 return false;
2145 }
2146
2147
2148 if (map->m_len == 0) {
2149
2150 if (!mpd->do_map)
2151 return false;
2152 map->m_lblk = lblk;
2153 map->m_len = 1;
2154 map->m_flags = bh->b_state & BH_FLAGS;
2155 return true;
2156 }
2157
2158
2159 if (map->m_len >= MAX_WRITEPAGES_EXTENT_LEN)
2160 return false;
2161
2162
2163 if (lblk == map->m_lblk + map->m_len &&
2164 (bh->b_state & BH_FLAGS) == map->m_flags) {
2165 map->m_len++;
2166 return true;
2167 }
2168 return false;
2169}
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187static int mpage_process_page_bufs(struct mpage_da_data *mpd,
2188 struct buffer_head *head,
2189 struct buffer_head *bh,
2190 ext4_lblk_t lblk)
2191{
2192 struct inode *inode = mpd->inode;
2193 int err;
2194 ext4_lblk_t blocks = (i_size_read(inode) + i_blocksize(inode) - 1)
2195 >> inode->i_blkbits;
2196
2197 if (ext4_verity_in_progress(inode))
2198 blocks = EXT_MAX_BLOCKS;
2199
2200 do {
2201 BUG_ON(buffer_locked(bh));
2202
2203 if (lblk >= blocks || !mpage_add_bh_to_extent(mpd, lblk, bh)) {
2204
2205 if (mpd->map.m_len)
2206 return 0;
2207
2208 if (!mpd->do_map)
2209 return 0;
2210
2211 break;
2212 }
2213 } while (lblk++, (bh = bh->b_this_page) != head);
2214
2215 if (mpd->map.m_len == 0) {
2216 err = mpage_submit_page(mpd, head->b_page);
2217 if (err < 0)
2218 return err;
2219 }
2220 if (lblk >= blocks) {
2221 mpd->scanned_until_end = 1;
2222 return 0;
2223 }
2224 return 1;
2225}
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242static int mpage_process_page(struct mpage_da_data *mpd, struct page *page,
2243 ext4_lblk_t *m_lblk, ext4_fsblk_t *m_pblk,
2244 bool *map_bh)
2245{
2246 struct buffer_head *head, *bh;
2247 ext4_io_end_t *io_end = mpd->io_submit.io_end;
2248 ext4_lblk_t lblk = *m_lblk;
2249 ext4_fsblk_t pblock = *m_pblk;
2250 int err = 0;
2251 int blkbits = mpd->inode->i_blkbits;
2252 ssize_t io_end_size = 0;
2253 struct ext4_io_end_vec *io_end_vec = ext4_last_io_end_vec(io_end);
2254
2255 bh = head = page_buffers(page);
2256 do {
2257 if (lblk < mpd->map.m_lblk)
2258 continue;
2259 if (lblk >= mpd->map.m_lblk + mpd->map.m_len) {
2260
2261
2262
2263
2264 mpd->map.m_len = 0;
2265 mpd->map.m_flags = 0;
2266 io_end_vec->size += io_end_size;
2267 io_end_size = 0;
2268
2269 err = mpage_process_page_bufs(mpd, head, bh, lblk);
2270 if (err > 0)
2271 err = 0;
2272 if (!err && mpd->map.m_len && mpd->map.m_lblk > lblk) {
2273 io_end_vec = ext4_alloc_io_end_vec(io_end);
2274 if (IS_ERR(io_end_vec)) {
2275 err = PTR_ERR(io_end_vec);
2276 goto out;
2277 }
2278 io_end_vec->offset = (loff_t)mpd->map.m_lblk << blkbits;
2279 }
2280 *map_bh = true;
2281 goto out;
2282 }
2283 if (buffer_delay(bh)) {
2284 clear_buffer_delay(bh);
2285 bh->b_blocknr = pblock++;
2286 }
2287 clear_buffer_unwritten(bh);
2288 io_end_size += (1 << blkbits);
2289 } while (lblk++, (bh = bh->b_this_page) != head);
2290
2291 io_end_vec->size += io_end_size;
2292 io_end_size = 0;
2293 *map_bh = false;
2294out:
2295 *m_lblk = lblk;
2296 *m_pblk = pblock;
2297 return err;
2298}
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314static int mpage_map_and_submit_buffers(struct mpage_da_data *mpd)
2315{
2316 struct pagevec pvec;
2317 int nr_pages, i;
2318 struct inode *inode = mpd->inode;
2319 int bpp_bits = PAGE_SHIFT - inode->i_blkbits;
2320 pgoff_t start, end;
2321 ext4_lblk_t lblk;
2322 ext4_fsblk_t pblock;
2323 int err;
2324 bool map_bh = false;
2325
2326 start = mpd->map.m_lblk >> bpp_bits;
2327 end = (mpd->map.m_lblk + mpd->map.m_len - 1) >> bpp_bits;
2328 lblk = start << bpp_bits;
2329 pblock = mpd->map.m_pblk;
2330
2331 pagevec_init(&pvec);
2332 while (start <= end) {
2333 nr_pages = pagevec_lookup_range(&pvec, inode->i_mapping,
2334 &start, end);
2335 if (nr_pages == 0)
2336 break;
2337 for (i = 0; i < nr_pages; i++) {
2338 struct page *page = pvec.pages[i];
2339
2340 err = mpage_process_page(mpd, page, &lblk, &pblock,
2341 &map_bh);
2342
2343
2344
2345
2346
2347 if (err < 0 || map_bh)
2348 goto out;
2349
2350 err = mpage_submit_page(mpd, page);
2351 if (err < 0)
2352 goto out;
2353 }
2354 pagevec_release(&pvec);
2355 }
2356
2357 mpd->map.m_len = 0;
2358 mpd->map.m_flags = 0;
2359 return 0;
2360out:
2361 pagevec_release(&pvec);
2362 return err;
2363}
2364
2365static int mpage_map_one_extent(handle_t *handle, struct mpage_da_data *mpd)
2366{
2367 struct inode *inode = mpd->inode;
2368 struct ext4_map_blocks *map = &mpd->map;
2369 int get_blocks_flags;
2370 int err, dioread_nolock;
2371
2372 trace_ext4_da_write_pages_extent(inode, map);
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388 get_blocks_flags = EXT4_GET_BLOCKS_CREATE |
2389 EXT4_GET_BLOCKS_METADATA_NOFAIL |
2390 EXT4_GET_BLOCKS_IO_SUBMIT;
2391 dioread_nolock = ext4_should_dioread_nolock(inode);
2392 if (dioread_nolock)
2393 get_blocks_flags |= EXT4_GET_BLOCKS_IO_CREATE_EXT;
2394 if (map->m_flags & BIT(BH_Delay))
2395 get_blocks_flags |= EXT4_GET_BLOCKS_DELALLOC_RESERVE;
2396
2397 err = ext4_map_blocks(handle, inode, map, get_blocks_flags);
2398 if (err < 0)
2399 return err;
2400 if (dioread_nolock && (map->m_flags & EXT4_MAP_UNWRITTEN)) {
2401 if (!mpd->io_submit.io_end->handle &&
2402 ext4_handle_valid(handle)) {
2403 mpd->io_submit.io_end->handle = handle->h_rsv_handle;
2404 handle->h_rsv_handle = NULL;
2405 }
2406 ext4_set_io_unwritten_flag(inode, mpd->io_submit.io_end);
2407 }
2408
2409 BUG_ON(map->m_len == 0);
2410 return 0;
2411}
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433static int mpage_map_and_submit_extent(handle_t *handle,
2434 struct mpage_da_data *mpd,
2435 bool *give_up_on_write)
2436{
2437 struct inode *inode = mpd->inode;
2438 struct ext4_map_blocks *map = &mpd->map;
2439 int err;
2440 loff_t disksize;
2441 int progress = 0;
2442 ext4_io_end_t *io_end = mpd->io_submit.io_end;
2443 struct ext4_io_end_vec *io_end_vec;
2444
2445 io_end_vec = ext4_alloc_io_end_vec(io_end);
2446 if (IS_ERR(io_end_vec))
2447 return PTR_ERR(io_end_vec);
2448 io_end_vec->offset = ((loff_t)map->m_lblk) << inode->i_blkbits;
2449 do {
2450 err = mpage_map_one_extent(handle, mpd);
2451 if (err < 0) {
2452 struct super_block *sb = inode->i_sb;
2453
2454 if (ext4_forced_shutdown(EXT4_SB(sb)) ||
2455 ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED))
2456 goto invalidate_dirty_pages;
2457
2458
2459
2460
2461
2462 if ((err == -ENOMEM) ||
2463 (err == -ENOSPC && ext4_count_free_clusters(sb))) {
2464 if (progress)
2465 goto update_disksize;
2466 return err;
2467 }
2468 ext4_msg(sb, KERN_CRIT,
2469 "Delayed block allocation failed for "
2470 "inode %lu at logical offset %llu with"
2471 " max blocks %u with error %d",
2472 inode->i_ino,
2473 (unsigned long long)map->m_lblk,
2474 (unsigned)map->m_len, -err);
2475 ext4_msg(sb, KERN_CRIT,
2476 "This should not happen!! Data will "
2477 "be lost\n");
2478 if (err == -ENOSPC)
2479 ext4_print_free_blocks(inode);
2480 invalidate_dirty_pages:
2481 *give_up_on_write = true;
2482 return err;
2483 }
2484 progress = 1;
2485
2486
2487
2488
2489 err = mpage_map_and_submit_buffers(mpd);
2490 if (err < 0)
2491 goto update_disksize;
2492 } while (map->m_len);
2493
2494update_disksize:
2495
2496
2497
2498
2499 disksize = ((loff_t)mpd->first_page) << PAGE_SHIFT;
2500 if (disksize > READ_ONCE(EXT4_I(inode)->i_disksize)) {
2501 int err2;
2502 loff_t i_size;
2503
2504 down_write(&EXT4_I(inode)->i_data_sem);
2505 i_size = i_size_read(inode);
2506 if (disksize > i_size)
2507 disksize = i_size;
2508 if (disksize > EXT4_I(inode)->i_disksize)
2509 EXT4_I(inode)->i_disksize = disksize;
2510 up_write(&EXT4_I(inode)->i_data_sem);
2511 err2 = ext4_mark_inode_dirty(handle, inode);
2512 if (err2) {
2513 ext4_error_err(inode->i_sb, -err2,
2514 "Failed to mark inode %lu dirty",
2515 inode->i_ino);
2516 }
2517 if (!err)
2518 err = err2;
2519 }
2520 return err;
2521}
2522
2523
2524
2525
2526
2527
2528
2529
2530static int ext4_da_writepages_trans_blocks(struct inode *inode)
2531{
2532 int bpp = ext4_journal_blocks_per_page(inode);
2533
2534 return ext4_meta_trans_blocks(inode,
2535 MAX_WRITEPAGES_EXTENT_LEN + bpp - 1, bpp);
2536}
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
2557{
2558 struct address_space *mapping = mpd->inode->i_mapping;
2559 struct pagevec pvec;
2560 unsigned int nr_pages;
2561 long left = mpd->wbc->nr_to_write;
2562 pgoff_t index = mpd->first_page;
2563 pgoff_t end = mpd->last_page;
2564 xa_mark_t tag;
2565 int i, err = 0;
2566 int blkbits = mpd->inode->i_blkbits;
2567 ext4_lblk_t lblk;
2568 struct buffer_head *head;
2569
2570 if (mpd->wbc->sync_mode == WB_SYNC_ALL || mpd->wbc->tagged_writepages)
2571 tag = PAGECACHE_TAG_TOWRITE;
2572 else
2573 tag = PAGECACHE_TAG_DIRTY;
2574
2575 pagevec_init(&pvec);
2576 mpd->map.m_len = 0;
2577 mpd->next_page = index;
2578 while (index <= end) {
2579 nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, end,
2580 tag);
2581 if (nr_pages == 0)
2582 break;
2583
2584 for (i = 0; i < nr_pages; i++) {
2585 struct page *page = pvec.pages[i];
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595 if (mpd->wbc->sync_mode == WB_SYNC_NONE && left <= 0)
2596 goto out;
2597
2598
2599 if (mpd->map.m_len > 0 && mpd->next_page != page->index)
2600 goto out;
2601
2602 lock_page(page);
2603
2604
2605
2606
2607
2608
2609
2610 if (!PageDirty(page) ||
2611 (PageWriteback(page) &&
2612 (mpd->wbc->sync_mode == WB_SYNC_NONE)) ||
2613 unlikely(page->mapping != mapping)) {
2614 unlock_page(page);
2615 continue;
2616 }
2617
2618 wait_on_page_writeback(page);
2619 BUG_ON(PageWriteback(page));
2620
2621 if (mpd->map.m_len == 0)
2622 mpd->first_page = page->index;
2623 mpd->next_page = page->index + 1;
2624
2625 lblk = ((ext4_lblk_t)page->index) <<
2626 (PAGE_SHIFT - blkbits);
2627 head = page_buffers(page);
2628 err = mpage_process_page_bufs(mpd, head, head, lblk);
2629 if (err <= 0)
2630 goto out;
2631 err = 0;
2632 left--;
2633 }
2634 pagevec_release(&pvec);
2635 cond_resched();
2636 }
2637 mpd->scanned_until_end = 1;
2638 return 0;
2639out:
2640 pagevec_release(&pvec);
2641 return err;
2642}
2643
2644static int ext4_writepages(struct address_space *mapping,
2645 struct writeback_control *wbc)
2646{
2647 pgoff_t writeback_index = 0;
2648 long nr_to_write = wbc->nr_to_write;
2649 int range_whole = 0;
2650 int cycled = 1;
2651 handle_t *handle = NULL;
2652 struct mpage_da_data mpd;
2653 struct inode *inode = mapping->host;
2654 int needed_blocks, rsv_blocks = 0, ret = 0;
2655 struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb);
2656 struct blk_plug plug;
2657 bool give_up_on_write = false;
2658
2659 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
2660 return -EIO;
2661
2662 percpu_down_read(&sbi->s_writepages_rwsem);
2663 trace_ext4_writepages(inode, wbc);
2664
2665
2666
2667
2668
2669
2670 if (!mapping->nrpages || !mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
2671 goto out_writepages;
2672
2673 if (ext4_should_journal_data(inode)) {
2674 ret = generic_writepages(mapping, wbc);
2675 goto out_writepages;
2676 }
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688 if (unlikely(ext4_forced_shutdown(EXT4_SB(mapping->host->i_sb)) ||
2689 ext4_test_mount_flag(inode->i_sb, EXT4_MF_FS_ABORTED))) {
2690 ret = -EROFS;
2691 goto out_writepages;
2692 }
2693
2694
2695
2696
2697
2698
2699 if (ext4_has_inline_data(inode)) {
2700
2701 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1);
2702 if (IS_ERR(handle)) {
2703 ret = PTR_ERR(handle);
2704 goto out_writepages;
2705 }
2706 BUG_ON(ext4_test_inode_state(inode,
2707 EXT4_STATE_MAY_INLINE_DATA));
2708 ext4_destroy_inline_data(handle, inode);
2709 ext4_journal_stop(handle);
2710 }
2711
2712 if (ext4_should_dioread_nolock(inode)) {
2713
2714
2715
2716
2717 rsv_blocks = 1 + ext4_chunk_trans_blocks(inode,
2718 PAGE_SIZE >> inode->i_blkbits);
2719 }
2720
2721 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
2722 range_whole = 1;
2723
2724 if (wbc->range_cyclic) {
2725 writeback_index = mapping->writeback_index;
2726 if (writeback_index)
2727 cycled = 0;
2728 mpd.first_page = writeback_index;
2729 mpd.last_page = -1;
2730 } else {
2731 mpd.first_page = wbc->range_start >> PAGE_SHIFT;
2732 mpd.last_page = wbc->range_end >> PAGE_SHIFT;
2733 }
2734
2735 mpd.inode = inode;
2736 mpd.wbc = wbc;
2737 ext4_io_submit_init(&mpd.io_submit, wbc);
2738retry:
2739 if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
2740 tag_pages_for_writeback(mapping, mpd.first_page, mpd.last_page);
2741 blk_start_plug(&plug);
2742
2743
2744
2745
2746
2747
2748
2749 mpd.do_map = 0;
2750 mpd.scanned_until_end = 0;
2751 mpd.io_submit.io_end = ext4_init_io_end(inode, GFP_KERNEL);
2752 if (!mpd.io_submit.io_end) {
2753 ret = -ENOMEM;
2754 goto unplug;
2755 }
2756 ret = mpage_prepare_extent_to_map(&mpd);
2757
2758 mpage_release_unused_pages(&mpd, false);
2759
2760 ext4_io_submit(&mpd.io_submit);
2761 ext4_put_io_end_defer(mpd.io_submit.io_end);
2762 mpd.io_submit.io_end = NULL;
2763 if (ret < 0)
2764 goto unplug;
2765
2766 while (!mpd.scanned_until_end && wbc->nr_to_write > 0) {
2767
2768 mpd.io_submit.io_end = ext4_init_io_end(inode, GFP_KERNEL);
2769 if (!mpd.io_submit.io_end) {
2770 ret = -ENOMEM;
2771 break;
2772 }
2773
2774
2775
2776
2777
2778
2779
2780
2781 BUG_ON(ext4_should_journal_data(inode));
2782 needed_blocks = ext4_da_writepages_trans_blocks(inode);
2783
2784
2785 handle = ext4_journal_start_with_reserve(inode,
2786 EXT4_HT_WRITE_PAGE, needed_blocks, rsv_blocks);
2787 if (IS_ERR(handle)) {
2788 ret = PTR_ERR(handle);
2789 ext4_msg(inode->i_sb, KERN_CRIT, "%s: jbd2_start: "
2790 "%ld pages, ino %lu; err %d", __func__,
2791 wbc->nr_to_write, inode->i_ino, ret);
2792
2793 ext4_put_io_end(mpd.io_submit.io_end);
2794 mpd.io_submit.io_end = NULL;
2795 break;
2796 }
2797 mpd.do_map = 1;
2798
2799 trace_ext4_da_write_pages(inode, mpd.first_page, mpd.wbc);
2800 ret = mpage_prepare_extent_to_map(&mpd);
2801 if (!ret && mpd.map.m_len)
2802 ret = mpage_map_and_submit_extent(handle, &mpd,
2803 &give_up_on_write);
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814 if (!ext4_handle_valid(handle) || handle->h_sync == 0) {
2815 ext4_journal_stop(handle);
2816 handle = NULL;
2817 mpd.do_map = 0;
2818 }
2819
2820 mpage_release_unused_pages(&mpd, give_up_on_write);
2821
2822 ext4_io_submit(&mpd.io_submit);
2823
2824
2825
2826
2827
2828
2829
2830
2831 if (handle) {
2832 ext4_put_io_end_defer(mpd.io_submit.io_end);
2833 ext4_journal_stop(handle);
2834 } else
2835 ext4_put_io_end(mpd.io_submit.io_end);
2836 mpd.io_submit.io_end = NULL;
2837
2838 if (ret == -ENOSPC && sbi->s_journal) {
2839
2840
2841
2842
2843
2844 jbd2_journal_force_commit_nested(sbi->s_journal);
2845 ret = 0;
2846 continue;
2847 }
2848
2849 if (ret)
2850 break;
2851 }
2852unplug:
2853 blk_finish_plug(&plug);
2854 if (!ret && !cycled && wbc->nr_to_write > 0) {
2855 cycled = 1;
2856 mpd.last_page = writeback_index - 1;
2857 mpd.first_page = 0;
2858 goto retry;
2859 }
2860
2861
2862 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
2863
2864
2865
2866
2867 mapping->writeback_index = mpd.first_page;
2868
2869out_writepages:
2870 trace_ext4_writepages_result(inode, wbc, ret,
2871 nr_to_write - wbc->nr_to_write);
2872 percpu_up_read(&sbi->s_writepages_rwsem);
2873 return ret;
2874}
2875
2876static int ext4_dax_writepages(struct address_space *mapping,
2877 struct writeback_control *wbc)
2878{
2879 int ret;
2880 long nr_to_write = wbc->nr_to_write;
2881 struct inode *inode = mapping->host;
2882 struct ext4_sb_info *sbi = EXT4_SB(mapping->host->i_sb);
2883
2884 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
2885 return -EIO;
2886
2887 percpu_down_read(&sbi->s_writepages_rwsem);
2888 trace_ext4_writepages(inode, wbc);
2889
2890 ret = dax_writeback_mapping_range(mapping, sbi->s_daxdev, wbc);
2891 trace_ext4_writepages_result(inode, wbc, ret,
2892 nr_to_write - wbc->nr_to_write);
2893 percpu_up_read(&sbi->s_writepages_rwsem);
2894 return ret;
2895}
2896
2897static int ext4_nonda_switch(struct super_block *sb)
2898{
2899 s64 free_clusters, dirty_clusters;
2900 struct ext4_sb_info *sbi = EXT4_SB(sb);
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910 free_clusters =
2911 percpu_counter_read_positive(&sbi->s_freeclusters_counter);
2912 dirty_clusters =
2913 percpu_counter_read_positive(&sbi->s_dirtyclusters_counter);
2914
2915
2916
2917 if (dirty_clusters && (free_clusters < 2 * dirty_clusters))
2918 try_to_writeback_inodes_sb(sb, WB_REASON_FS_FREE_SPACE);
2919
2920 if (2 * free_clusters < 3 * dirty_clusters ||
2921 free_clusters < (dirty_clusters + EXT4_FREECLUSTERS_WATERMARK)) {
2922
2923
2924
2925
2926 return 1;
2927 }
2928 return 0;
2929}
2930
2931
2932static int ext4_da_write_credits(struct inode *inode, loff_t pos, unsigned len)
2933{
2934 if (likely(ext4_has_feature_large_file(inode->i_sb)))
2935 return 1;
2936
2937 if (pos + len <= 0x7fffffffULL)
2938 return 1;
2939
2940
2941 return 2;
2942}
2943
2944static int ext4_da_write_begin(struct file *file, struct address_space *mapping,
2945 loff_t pos, unsigned len, unsigned flags,
2946 struct page **pagep, void **fsdata)
2947{
2948 int ret, retries = 0;
2949 struct page *page;
2950 pgoff_t index;
2951 struct inode *inode = mapping->host;
2952 handle_t *handle;
2953
2954 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
2955 return -EIO;
2956
2957 index = pos >> PAGE_SHIFT;
2958
2959 if (ext4_nonda_switch(inode->i_sb) || S_ISLNK(inode->i_mode) ||
2960 ext4_verity_in_progress(inode)) {
2961 *fsdata = (void *)FALL_BACK_TO_NONDELALLOC;
2962 return ext4_write_begin(file, mapping, pos,
2963 len, flags, pagep, fsdata);
2964 }
2965 *fsdata = (void *)0;
2966 trace_ext4_da_write_begin(inode, pos, len, flags);
2967
2968 if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
2969 ret = ext4_da_write_inline_data_begin(mapping, inode,
2970 pos, len, flags,
2971 pagep, fsdata);
2972 if (ret < 0)
2973 return ret;
2974 if (ret == 1)
2975 return 0;
2976 }
2977
2978
2979
2980
2981
2982
2983
2984
2985retry_grab:
2986 page = grab_cache_page_write_begin(mapping, index, flags);
2987 if (!page)
2988 return -ENOMEM;
2989 unlock_page(page);
2990
2991
2992
2993
2994
2995
2996
2997retry_journal:
2998 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
2999 ext4_da_write_credits(inode, pos, len));
3000 if (IS_ERR(handle)) {
3001 put_page(page);
3002 return PTR_ERR(handle);
3003 }
3004
3005 lock_page(page);
3006 if (page->mapping != mapping) {
3007
3008 unlock_page(page);
3009 put_page(page);
3010 ext4_journal_stop(handle);
3011 goto retry_grab;
3012 }
3013
3014 wait_for_stable_page(page);
3015
3016#ifdef CONFIG_FS_ENCRYPTION
3017 ret = ext4_block_write_begin(page, pos, len,
3018 ext4_da_get_block_prep);
3019#else
3020 ret = __block_write_begin(page, pos, len, ext4_da_get_block_prep);
3021#endif
3022 if (ret < 0) {
3023 unlock_page(page);
3024 ext4_journal_stop(handle);
3025
3026
3027
3028
3029
3030 if (pos + len > inode->i_size)
3031 ext4_truncate_failed_write(inode);
3032
3033 if (ret == -ENOSPC &&
3034 ext4_should_retry_alloc(inode->i_sb, &retries))
3035 goto retry_journal;
3036
3037 put_page(page);
3038 return ret;
3039 }
3040
3041 *pagep = page;
3042 return ret;
3043}
3044
3045
3046
3047
3048
3049static int ext4_da_should_update_i_disksize(struct page *page,
3050 unsigned long offset)
3051{
3052 struct buffer_head *bh;
3053 struct inode *inode = page->mapping->host;
3054 unsigned int idx;
3055 int i;
3056
3057 bh = page_buffers(page);
3058 idx = offset >> inode->i_blkbits;
3059
3060 for (i = 0; i < idx; i++)
3061 bh = bh->b_this_page;
3062
3063 if (!buffer_mapped(bh) || (buffer_delay(bh)) || buffer_unwritten(bh))
3064 return 0;
3065 return 1;
3066}
3067
3068static int ext4_da_write_end(struct file *file,
3069 struct address_space *mapping,
3070 loff_t pos, unsigned len, unsigned copied,
3071 struct page *page, void *fsdata)
3072{
3073 struct inode *inode = mapping->host;
3074 int ret = 0, ret2;
3075 handle_t *handle = ext4_journal_current_handle();
3076 loff_t new_i_size;
3077 unsigned long start, end;
3078 int write_mode = (int)(unsigned long)fsdata;
3079
3080 if (write_mode == FALL_BACK_TO_NONDELALLOC)
3081 return ext4_write_end(file, mapping, pos,
3082 len, copied, page, fsdata);
3083
3084 trace_ext4_da_write_end(inode, pos, len, copied);
3085 start = pos & (PAGE_SIZE - 1);
3086 end = start + copied - 1;
3087
3088
3089
3090
3091
3092
3093 new_i_size = pos + copied;
3094 if (copied && new_i_size > EXT4_I(inode)->i_disksize) {
3095 if (ext4_has_inline_data(inode) ||
3096 ext4_da_should_update_i_disksize(page, end)) {
3097 ext4_update_i_disksize(inode, new_i_size);
3098
3099
3100
3101
3102 ret = ext4_mark_inode_dirty(handle, inode);
3103 }
3104 }
3105
3106 if (write_mode != CONVERT_INLINE_DATA &&
3107 ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA) &&
3108 ext4_has_inline_data(inode))
3109 ret2 = ext4_da_write_inline_data_end(inode, pos, len, copied,
3110 page);
3111 else
3112 ret2 = generic_write_end(file, mapping, pos, len, copied,
3113 page, fsdata);
3114
3115 copied = ret2;
3116 if (ret2 < 0)
3117 ret = ret2;
3118 ret2 = ext4_journal_stop(handle);
3119 if (unlikely(ret2 && !ret))
3120 ret = ret2;
3121
3122 return ret ? ret : copied;
3123}
3124
3125
3126
3127
3128int ext4_alloc_da_blocks(struct inode *inode)
3129{
3130 trace_ext4_alloc_da_blocks(inode);
3131
3132 if (!EXT4_I(inode)->i_reserved_data_blocks)
3133 return 0;
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166 return filemap_flush(inode->i_mapping);
3167}
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183static sector_t ext4_bmap(struct address_space *mapping, sector_t block)
3184{
3185 struct inode *inode = mapping->host;
3186 journal_t *journal;
3187 int err;
3188
3189
3190
3191
3192 if (ext4_has_inline_data(inode))
3193 return 0;
3194
3195 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY) &&
3196 test_opt(inode->i_sb, DELALLOC)) {
3197
3198
3199
3200
3201
3202 filemap_write_and_wait(mapping);
3203 }
3204
3205 if (EXT4_JOURNAL(inode) &&
3206 ext4_test_inode_state(inode, EXT4_STATE_JDATA)) {
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225 ext4_clear_inode_state(inode, EXT4_STATE_JDATA);
3226 journal = EXT4_JOURNAL(inode);
3227 jbd2_journal_lock_updates(journal);
3228 err = jbd2_journal_flush(journal);
3229 jbd2_journal_unlock_updates(journal);
3230
3231 if (err)
3232 return 0;
3233 }
3234
3235 return iomap_bmap(mapping, block, &ext4_iomap_ops);
3236}
3237
3238static int ext4_readpage(struct file *file, struct page *page)
3239{
3240 int ret = -EAGAIN;
3241 struct inode *inode = page->mapping->host;
3242
3243 trace_ext4_readpage(page);
3244
3245 if (ext4_has_inline_data(inode))
3246 ret = ext4_readpage_inline(inode, page);
3247
3248 if (ret == -EAGAIN)
3249 return ext4_mpage_readpages(inode, NULL, page);
3250
3251 return ret;
3252}
3253
3254static void ext4_readahead(struct readahead_control *rac)
3255{
3256 struct inode *inode = rac->mapping->host;
3257
3258
3259 if (ext4_has_inline_data(inode))
3260 return;
3261
3262 ext4_mpage_readpages(inode, rac, NULL);
3263}
3264
3265static void ext4_invalidatepage(struct page *page, unsigned int offset,
3266 unsigned int length)
3267{
3268 trace_ext4_invalidatepage(page, offset, length);
3269
3270
3271 WARN_ON(page_has_buffers(page) && buffer_jbd(page_buffers(page)));
3272
3273 block_invalidatepage(page, offset, length);
3274}
3275
3276static int __ext4_journalled_invalidatepage(struct page *page,
3277 unsigned int offset,
3278 unsigned int length)
3279{
3280 journal_t *journal = EXT4_JOURNAL(page->mapping->host);
3281
3282 trace_ext4_journalled_invalidatepage(page, offset, length);
3283
3284
3285
3286
3287 if (offset == 0 && length == PAGE_SIZE)
3288 ClearPageChecked(page);
3289
3290 return jbd2_journal_invalidatepage(journal, page, offset, length);
3291}
3292
3293
3294static void ext4_journalled_invalidatepage(struct page *page,
3295 unsigned int offset,
3296 unsigned int length)
3297{
3298 WARN_ON(__ext4_journalled_invalidatepage(page, offset, length) < 0);
3299}
3300
3301static int ext4_releasepage(struct page *page, gfp_t wait)
3302{
3303 journal_t *journal = EXT4_JOURNAL(page->mapping->host);
3304
3305 trace_ext4_releasepage(page);
3306
3307
3308 if (PageChecked(page))
3309 return 0;
3310 if (journal)
3311 return jbd2_journal_try_to_free_buffers(journal, page);
3312 else
3313 return try_to_free_buffers(page);
3314}
3315
3316static bool ext4_inode_datasync_dirty(struct inode *inode)
3317{
3318 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
3319
3320 if (journal) {
3321 if (jbd2_transaction_committed(journal,
3322 EXT4_I(inode)->i_datasync_tid))
3323 return false;
3324 if (test_opt2(inode->i_sb, JOURNAL_FAST_COMMIT))
3325 return !list_empty(&EXT4_I(inode)->i_fc_list);
3326 return true;
3327 }
3328
3329
3330 if (!list_empty(&inode->i_mapping->private_list))
3331 return true;
3332 return inode->i_state & I_DIRTY_DATASYNC;
3333}
3334
3335static void ext4_set_iomap(struct inode *inode, struct iomap *iomap,
3336 struct ext4_map_blocks *map, loff_t offset,
3337 loff_t length)
3338{
3339 u8 blkbits = inode->i_blkbits;
3340
3341
3342
3343
3344
3345
3346 iomap->flags = 0;
3347 if (ext4_inode_datasync_dirty(inode) ||
3348 offset + length > i_size_read(inode))
3349 iomap->flags |= IOMAP_F_DIRTY;
3350
3351 if (map->m_flags & EXT4_MAP_NEW)
3352 iomap->flags |= IOMAP_F_NEW;
3353
3354 iomap->bdev = inode->i_sb->s_bdev;
3355 iomap->dax_dev = EXT4_SB(inode->i_sb)->s_daxdev;
3356 iomap->offset = (u64) map->m_lblk << blkbits;
3357 iomap->length = (u64) map->m_len << blkbits;
3358
3359 if ((map->m_flags & EXT4_MAP_MAPPED) &&
3360 !ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
3361 iomap->flags |= IOMAP_F_MERGED;
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372 if (map->m_flags & EXT4_MAP_UNWRITTEN) {
3373 iomap->type = IOMAP_UNWRITTEN;
3374 iomap->addr = (u64) map->m_pblk << blkbits;
3375 } else if (map->m_flags & EXT4_MAP_MAPPED) {
3376 iomap->type = IOMAP_MAPPED;
3377 iomap->addr = (u64) map->m_pblk << blkbits;
3378 } else {
3379 iomap->type = IOMAP_HOLE;
3380 iomap->addr = IOMAP_NULL_ADDR;
3381 }
3382}
3383
3384static int ext4_iomap_alloc(struct inode *inode, struct ext4_map_blocks *map,
3385 unsigned int flags)
3386{
3387 handle_t *handle;
3388 u8 blkbits = inode->i_blkbits;
3389 int ret, dio_credits, m_flags = 0, retries = 0;
3390
3391
3392
3393
3394
3395 if (map->m_len > DIO_MAX_BLOCKS)
3396 map->m_len = DIO_MAX_BLOCKS;
3397 dio_credits = ext4_chunk_trans_blocks(inode, map->m_len);
3398
3399retry:
3400
3401
3402
3403
3404
3405
3406 handle = ext4_journal_start(inode, EXT4_HT_MAP_BLOCKS, dio_credits);
3407 if (IS_ERR(handle))
3408 return PTR_ERR(handle);
3409
3410
3411
3412
3413
3414 WARN_ON(!IS_DAX(inode) && !(flags & IOMAP_DIRECT));
3415 if (IS_DAX(inode))
3416 m_flags = EXT4_GET_BLOCKS_CREATE_ZERO;
3417
3418
3419
3420
3421
3422
3423 else if ((map->m_lblk * (1 << blkbits)) >= i_size_read(inode))
3424 m_flags = EXT4_GET_BLOCKS_CREATE;
3425 else if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
3426 m_flags = EXT4_GET_BLOCKS_IO_CREATE_EXT;
3427
3428 ret = ext4_map_blocks(handle, inode, map, m_flags);
3429
3430
3431
3432
3433
3434
3435 if (!m_flags && !ret)
3436 ret = -ENOTBLK;
3437
3438 ext4_journal_stop(handle);
3439 if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
3440 goto retry;
3441
3442 return ret;
3443}
3444
3445
3446static int ext4_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
3447 unsigned flags, struct iomap *iomap, struct iomap *srcmap)
3448{
3449 int ret;
3450 struct ext4_map_blocks map;
3451 u8 blkbits = inode->i_blkbits;
3452
3453 if ((offset >> blkbits) > EXT4_MAX_LOGICAL_BLOCK)
3454 return -EINVAL;
3455
3456 if (WARN_ON_ONCE(ext4_has_inline_data(inode)))
3457 return -ERANGE;
3458
3459
3460
3461
3462 map.m_lblk = offset >> blkbits;
3463 map.m_len = min_t(loff_t, (offset + length - 1) >> blkbits,
3464 EXT4_MAX_LOGICAL_BLOCK) - map.m_lblk + 1;
3465
3466 if (flags & IOMAP_WRITE) {
3467
3468
3469
3470
3471
3472
3473 if (offset + length <= i_size_read(inode)) {
3474 ret = ext4_map_blocks(NULL, inode, &map, 0);
3475 if (ret > 0 && (map.m_flags & EXT4_MAP_MAPPED))
3476 goto out;
3477 }
3478 ret = ext4_iomap_alloc(inode, &map, flags);
3479 } else {
3480 ret = ext4_map_blocks(NULL, inode, &map, 0);
3481 }
3482
3483 if (ret < 0)
3484 return ret;
3485out:
3486 ext4_set_iomap(inode, iomap, &map, offset, length);
3487
3488 return 0;
3489}
3490
3491static int ext4_iomap_overwrite_begin(struct inode *inode, loff_t offset,
3492 loff_t length, unsigned flags, struct iomap *iomap,
3493 struct iomap *srcmap)
3494{
3495 int ret;
3496
3497
3498
3499
3500
3501 flags &= ~IOMAP_WRITE;
3502 ret = ext4_iomap_begin(inode, offset, length, flags, iomap, srcmap);
3503 WARN_ON_ONCE(iomap->type != IOMAP_MAPPED);
3504 return ret;
3505}
3506
3507static int ext4_iomap_end(struct inode *inode, loff_t offset, loff_t length,
3508 ssize_t written, unsigned flags, struct iomap *iomap)
3509{
3510
3511
3512
3513
3514
3515
3516
3517 if (flags & (IOMAP_WRITE | IOMAP_DIRECT) && written == 0)
3518 return -ENOTBLK;
3519
3520 return 0;
3521}
3522
3523const struct iomap_ops ext4_iomap_ops = {
3524 .iomap_begin = ext4_iomap_begin,
3525 .iomap_end = ext4_iomap_end,
3526};
3527
3528const struct iomap_ops ext4_iomap_overwrite_ops = {
3529 .iomap_begin = ext4_iomap_overwrite_begin,
3530 .iomap_end = ext4_iomap_end,
3531};
3532
3533static bool ext4_iomap_is_delalloc(struct inode *inode,
3534 struct ext4_map_blocks *map)
3535{
3536 struct extent_status es;
3537 ext4_lblk_t offset = 0, end = map->m_lblk + map->m_len - 1;
3538
3539 ext4_es_find_extent_range(inode, &ext4_es_is_delayed,
3540 map->m_lblk, end, &es);
3541
3542 if (!es.es_len || es.es_lblk > end)
3543 return false;
3544
3545 if (es.es_lblk > map->m_lblk) {
3546 map->m_len = es.es_lblk - map->m_lblk;
3547 return false;
3548 }
3549
3550 offset = map->m_lblk - es.es_lblk;
3551 map->m_len = es.es_len - offset;
3552
3553 return true;
3554}
3555
3556static int ext4_iomap_begin_report(struct inode *inode, loff_t offset,
3557 loff_t length, unsigned int flags,
3558 struct iomap *iomap, struct iomap *srcmap)
3559{
3560 int ret;
3561 bool delalloc = false;
3562 struct ext4_map_blocks map;
3563 u8 blkbits = inode->i_blkbits;
3564
3565 if ((offset >> blkbits) > EXT4_MAX_LOGICAL_BLOCK)
3566 return -EINVAL;
3567
3568 if (ext4_has_inline_data(inode)) {
3569 ret = ext4_inline_data_iomap(inode, iomap);
3570 if (ret != -EAGAIN) {
3571 if (ret == 0 && offset >= iomap->length)
3572 ret = -ENOENT;
3573 return ret;
3574 }
3575 }
3576
3577
3578
3579
3580 map.m_lblk = offset >> blkbits;
3581 map.m_len = min_t(loff_t, (offset + length - 1) >> blkbits,
3582 EXT4_MAX_LOGICAL_BLOCK) - map.m_lblk + 1;
3583
3584
3585
3586
3587
3588
3589
3590 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) {
3591 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
3592
3593 if (offset >= sbi->s_bitmap_maxbytes) {
3594 map.m_flags = 0;
3595 goto set_iomap;
3596 }
3597 }
3598
3599 ret = ext4_map_blocks(NULL, inode, &map, 0);
3600 if (ret < 0)
3601 return ret;
3602 if (ret == 0)
3603 delalloc = ext4_iomap_is_delalloc(inode, &map);
3604
3605set_iomap:
3606 ext4_set_iomap(inode, iomap, &map, offset, length);
3607 if (delalloc && iomap->type == IOMAP_HOLE)
3608 iomap->type = IOMAP_DELALLOC;
3609
3610 return 0;
3611}
3612
3613const struct iomap_ops ext4_iomap_report_ops = {
3614 .iomap_begin = ext4_iomap_begin_report,
3615};
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630static int ext4_journalled_set_page_dirty(struct page *page)
3631{
3632 SetPageChecked(page);
3633 return __set_page_dirty_nobuffers(page);
3634}
3635
3636static int ext4_set_page_dirty(struct page *page)
3637{
3638 WARN_ON_ONCE(!PageLocked(page) && !PageDirty(page));
3639 WARN_ON_ONCE(!page_has_buffers(page));
3640 return __set_page_dirty_buffers(page);
3641}
3642
3643static int ext4_iomap_swap_activate(struct swap_info_struct *sis,
3644 struct file *file, sector_t *span)
3645{
3646 return iomap_swapfile_activate(sis, file, span,
3647 &ext4_iomap_report_ops);
3648}
3649
3650static const struct address_space_operations ext4_aops = {
3651 .readpage = ext4_readpage,
3652 .readahead = ext4_readahead,
3653 .writepage = ext4_writepage,
3654 .writepages = ext4_writepages,
3655 .write_begin = ext4_write_begin,
3656 .write_end = ext4_write_end,
3657 .set_page_dirty = ext4_set_page_dirty,
3658 .bmap = ext4_bmap,
3659 .invalidatepage = ext4_invalidatepage,
3660 .releasepage = ext4_releasepage,
3661 .direct_IO = noop_direct_IO,
3662 .migratepage = buffer_migrate_page,
3663 .is_partially_uptodate = block_is_partially_uptodate,
3664 .error_remove_page = generic_error_remove_page,
3665 .swap_activate = ext4_iomap_swap_activate,
3666};
3667
3668static const struct address_space_operations ext4_journalled_aops = {
3669 .readpage = ext4_readpage,
3670 .readahead = ext4_readahead,
3671 .writepage = ext4_writepage,
3672 .writepages = ext4_writepages,
3673 .write_begin = ext4_write_begin,
3674 .write_end = ext4_journalled_write_end,
3675 .set_page_dirty = ext4_journalled_set_page_dirty,
3676 .bmap = ext4_bmap,
3677 .invalidatepage = ext4_journalled_invalidatepage,
3678 .releasepage = ext4_releasepage,
3679 .direct_IO = noop_direct_IO,
3680 .is_partially_uptodate = block_is_partially_uptodate,
3681 .error_remove_page = generic_error_remove_page,
3682 .swap_activate = ext4_iomap_swap_activate,
3683};
3684
3685static const struct address_space_operations ext4_da_aops = {
3686 .readpage = ext4_readpage,
3687 .readahead = ext4_readahead,
3688 .writepage = ext4_writepage,
3689 .writepages = ext4_writepages,
3690 .write_begin = ext4_da_write_begin,
3691 .write_end = ext4_da_write_end,
3692 .set_page_dirty = ext4_set_page_dirty,
3693 .bmap = ext4_bmap,
3694 .invalidatepage = ext4_invalidatepage,
3695 .releasepage = ext4_releasepage,
3696 .direct_IO = noop_direct_IO,
3697 .migratepage = buffer_migrate_page,
3698 .is_partially_uptodate = block_is_partially_uptodate,
3699 .error_remove_page = generic_error_remove_page,
3700 .swap_activate = ext4_iomap_swap_activate,
3701};
3702
3703static const struct address_space_operations ext4_dax_aops = {
3704 .writepages = ext4_dax_writepages,
3705 .direct_IO = noop_direct_IO,
3706 .set_page_dirty = noop_set_page_dirty,
3707 .bmap = ext4_bmap,
3708 .invalidatepage = noop_invalidatepage,
3709 .swap_activate = ext4_iomap_swap_activate,
3710};
3711
3712void ext4_set_aops(struct inode *inode)
3713{
3714 switch (ext4_inode_journal_mode(inode)) {
3715 case EXT4_INODE_ORDERED_DATA_MODE:
3716 case EXT4_INODE_WRITEBACK_DATA_MODE:
3717 break;
3718 case EXT4_INODE_JOURNAL_DATA_MODE:
3719 inode->i_mapping->a_ops = &ext4_journalled_aops;
3720 return;
3721 default:
3722 BUG();
3723 }
3724 if (IS_DAX(inode))
3725 inode->i_mapping->a_ops = &ext4_dax_aops;
3726 else if (test_opt(inode->i_sb, DELALLOC))
3727 inode->i_mapping->a_ops = &ext4_da_aops;
3728 else
3729 inode->i_mapping->a_ops = &ext4_aops;
3730}
3731
3732static int __ext4_block_zero_page_range(handle_t *handle,
3733 struct address_space *mapping, loff_t from, loff_t length)
3734{
3735 ext4_fsblk_t index = from >> PAGE_SHIFT;
3736 unsigned offset = from & (PAGE_SIZE-1);
3737 unsigned blocksize, pos;
3738 ext4_lblk_t iblock;
3739 struct inode *inode = mapping->host;
3740 struct buffer_head *bh;
3741 struct page *page;
3742 int err = 0;
3743
3744 page = find_or_create_page(mapping, from >> PAGE_SHIFT,
3745 mapping_gfp_constraint(mapping, ~__GFP_FS));
3746 if (!page)
3747 return -ENOMEM;
3748
3749 blocksize = inode->i_sb->s_blocksize;
3750
3751 iblock = index << (PAGE_SHIFT - inode->i_sb->s_blocksize_bits);
3752
3753 if (!page_has_buffers(page))
3754 create_empty_buffers(page, blocksize, 0);
3755
3756
3757 bh = page_buffers(page);
3758 pos = blocksize;
3759 while (offset >= pos) {
3760 bh = bh->b_this_page;
3761 iblock++;
3762 pos += blocksize;
3763 }
3764 if (buffer_freed(bh)) {
3765 BUFFER_TRACE(bh, "freed: skip");
3766 goto unlock;
3767 }
3768 if (!buffer_mapped(bh)) {
3769 BUFFER_TRACE(bh, "unmapped");
3770 ext4_get_block(inode, iblock, bh, 0);
3771
3772 if (!buffer_mapped(bh)) {
3773 BUFFER_TRACE(bh, "still unmapped");
3774 goto unlock;
3775 }
3776 }
3777
3778
3779 if (PageUptodate(page))
3780 set_buffer_uptodate(bh);
3781
3782 if (!buffer_uptodate(bh)) {
3783 err = ext4_read_bh_lock(bh, 0, true);
3784 if (err)
3785 goto unlock;
3786 if (fscrypt_inode_uses_fs_layer_crypto(inode)) {
3787
3788 BUG_ON(!fscrypt_has_encryption_key(inode));
3789 err = fscrypt_decrypt_pagecache_blocks(page, blocksize,
3790 bh_offset(bh));
3791 if (err) {
3792 clear_buffer_uptodate(bh);
3793 goto unlock;
3794 }
3795 }
3796 }
3797 if (ext4_should_journal_data(inode)) {
3798 BUFFER_TRACE(bh, "get write access");
3799 err = ext4_journal_get_write_access(handle, bh);
3800 if (err)
3801 goto unlock;
3802 }
3803 zero_user(page, offset, length);
3804 BUFFER_TRACE(bh, "zeroed end of block");
3805
3806 if (ext4_should_journal_data(inode)) {
3807 err = ext4_handle_dirty_metadata(handle, inode, bh);
3808 } else {
3809 err = 0;
3810 mark_buffer_dirty(bh);
3811 if (ext4_should_order_data(inode))
3812 err = ext4_jbd2_inode_add_write(handle, inode, from,
3813 length);
3814 }
3815
3816unlock:
3817 unlock_page(page);
3818 put_page(page);
3819 return err;
3820}
3821
3822
3823
3824
3825
3826
3827
3828
3829static int ext4_block_zero_page_range(handle_t *handle,
3830 struct address_space *mapping, loff_t from, loff_t length)
3831{
3832 struct inode *inode = mapping->host;
3833 unsigned offset = from & (PAGE_SIZE-1);
3834 unsigned blocksize = inode->i_sb->s_blocksize;
3835 unsigned max = blocksize - (offset & (blocksize - 1));
3836
3837
3838
3839
3840
3841 if (length > max || length < 0)
3842 length = max;
3843
3844 if (IS_DAX(inode)) {
3845 return iomap_zero_range(inode, from, length, NULL,
3846 &ext4_iomap_ops);
3847 }
3848 return __ext4_block_zero_page_range(handle, mapping, from, length);
3849}
3850
3851
3852
3853
3854
3855
3856
3857static int ext4_block_truncate_page(handle_t *handle,
3858 struct address_space *mapping, loff_t from)
3859{
3860 unsigned offset = from & (PAGE_SIZE-1);
3861 unsigned length;
3862 unsigned blocksize;
3863 struct inode *inode = mapping->host;
3864
3865
3866 if (IS_ENCRYPTED(inode) && !fscrypt_has_encryption_key(inode))
3867 return 0;
3868
3869 blocksize = inode->i_sb->s_blocksize;
3870 length = blocksize - (offset & (blocksize - 1));
3871
3872 return ext4_block_zero_page_range(handle, mapping, from, length);
3873}
3874
3875int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode,
3876 loff_t lstart, loff_t length)
3877{
3878 struct super_block *sb = inode->i_sb;
3879 struct address_space *mapping = inode->i_mapping;
3880 unsigned partial_start, partial_end;
3881 ext4_fsblk_t start, end;
3882 loff_t byte_end = (lstart + length - 1);
3883 int err = 0;
3884
3885 partial_start = lstart & (sb->s_blocksize - 1);
3886 partial_end = byte_end & (sb->s_blocksize - 1);
3887
3888 start = lstart >> sb->s_blocksize_bits;
3889 end = byte_end >> sb->s_blocksize_bits;
3890
3891
3892 if (start == end &&
3893 (partial_start || (partial_end != sb->s_blocksize - 1))) {
3894 err = ext4_block_zero_page_range(handle, mapping,
3895 lstart, length);
3896 return err;
3897 }
3898
3899 if (partial_start) {
3900 err = ext4_block_zero_page_range(handle, mapping,
3901 lstart, sb->s_blocksize);
3902 if (err)
3903 return err;
3904 }
3905
3906 if (partial_end != sb->s_blocksize - 1)
3907 err = ext4_block_zero_page_range(handle, mapping,
3908 byte_end - partial_end,
3909 partial_end + 1);
3910 return err;
3911}
3912
3913int ext4_can_truncate(struct inode *inode)
3914{
3915 if (S_ISREG(inode->i_mode))
3916 return 1;
3917 if (S_ISDIR(inode->i_mode))
3918 return 1;
3919 if (S_ISLNK(inode->i_mode))
3920 return !ext4_inode_is_fast_symlink(inode);
3921 return 0;
3922}
3923
3924
3925
3926
3927
3928
3929
3930int ext4_update_disksize_before_punch(struct inode *inode, loff_t offset,
3931 loff_t len)
3932{
3933 handle_t *handle;
3934 int ret;
3935
3936 loff_t size = i_size_read(inode);
3937
3938 WARN_ON(!inode_is_locked(inode));
3939 if (offset > size || offset + len < size)
3940 return 0;
3941
3942 if (EXT4_I(inode)->i_disksize >= size)
3943 return 0;
3944
3945 handle = ext4_journal_start(inode, EXT4_HT_MISC, 1);
3946 if (IS_ERR(handle))
3947 return PTR_ERR(handle);
3948 ext4_update_i_disksize(inode, size);
3949 ret = ext4_mark_inode_dirty(handle, inode);
3950 ext4_journal_stop(handle);
3951
3952 return ret;
3953}
3954
3955static void ext4_wait_dax_page(struct ext4_inode_info *ei)
3956{
3957 up_write(&ei->i_mmap_sem);
3958 schedule();
3959 down_write(&ei->i_mmap_sem);
3960}
3961
3962int ext4_break_layouts(struct inode *inode)
3963{
3964 struct ext4_inode_info *ei = EXT4_I(inode);
3965 struct page *page;
3966 int error;
3967
3968 if (WARN_ON_ONCE(!rwsem_is_locked(&ei->i_mmap_sem)))
3969 return -EINVAL;
3970
3971 do {
3972 page = dax_layout_busy_page(inode->i_mapping);
3973 if (!page)
3974 return 0;
3975
3976 error = ___wait_var_event(&page->_refcount,
3977 atomic_read(&page->_refcount) == 1,
3978 TASK_INTERRUPTIBLE, 0, 0,
3979 ext4_wait_dax_page(ei));
3980 } while (error == 0);
3981
3982 return error;
3983}
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length)
3997{
3998 struct super_block *sb = inode->i_sb;
3999 ext4_lblk_t first_block, stop_block;
4000 struct address_space *mapping = inode->i_mapping;
4001 loff_t first_block_offset, last_block_offset;
4002 handle_t *handle;
4003 unsigned int credits;
4004 int ret = 0, ret2 = 0;
4005
4006 trace_ext4_punch_hole(inode, offset, length, 0);
4007
4008 ext4_clear_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA);
4009 if (ext4_has_inline_data(inode)) {
4010 down_write(&EXT4_I(inode)->i_mmap_sem);
4011 ret = ext4_convert_inline_data(inode);
4012 up_write(&EXT4_I(inode)->i_mmap_sem);
4013 if (ret)
4014 return ret;
4015 }
4016
4017
4018
4019
4020
4021 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
4022 ret = filemap_write_and_wait_range(mapping, offset,
4023 offset + length - 1);
4024 if (ret)
4025 return ret;
4026 }
4027
4028 inode_lock(inode);
4029
4030
4031 if (offset >= inode->i_size)
4032 goto out_mutex;
4033
4034
4035
4036
4037
4038 if (offset + length > inode->i_size) {
4039 length = inode->i_size +
4040 PAGE_SIZE - (inode->i_size & (PAGE_SIZE - 1)) -
4041 offset;
4042 }
4043
4044 if (offset & (sb->s_blocksize - 1) ||
4045 (offset + length) & (sb->s_blocksize - 1)) {
4046
4047
4048
4049
4050 ret = ext4_inode_attach_jinode(inode);
4051 if (ret < 0)
4052 goto out_mutex;
4053
4054 }
4055
4056
4057 inode_dio_wait(inode);
4058
4059
4060
4061
4062
4063 down_write(&EXT4_I(inode)->i_mmap_sem);
4064
4065 ret = ext4_break_layouts(inode);
4066 if (ret)
4067 goto out_dio;
4068
4069 first_block_offset = round_up(offset, sb->s_blocksize);
4070 last_block_offset = round_down((offset + length), sb->s_blocksize) - 1;
4071
4072
4073 if (last_block_offset > first_block_offset) {
4074 ret = ext4_update_disksize_before_punch(inode, offset, length);
4075 if (ret)
4076 goto out_dio;
4077 truncate_pagecache_range(inode, first_block_offset,
4078 last_block_offset);
4079 }
4080
4081 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4082 credits = ext4_writepage_trans_blocks(inode);
4083 else
4084 credits = ext4_blocks_for_truncate(inode);
4085 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits);
4086 if (IS_ERR(handle)) {
4087 ret = PTR_ERR(handle);
4088 ext4_std_error(sb, ret);
4089 goto out_dio;
4090 }
4091
4092 ret = ext4_zero_partial_blocks(handle, inode, offset,
4093 length);
4094 if (ret)
4095 goto out_stop;
4096
4097 first_block = (offset + sb->s_blocksize - 1) >>
4098 EXT4_BLOCK_SIZE_BITS(sb);
4099 stop_block = (offset + length) >> EXT4_BLOCK_SIZE_BITS(sb);
4100
4101
4102 if (stop_block > first_block) {
4103
4104 down_write(&EXT4_I(inode)->i_data_sem);
4105 ext4_discard_preallocations(inode, 0);
4106
4107 ret = ext4_es_remove_extent(inode, first_block,
4108 stop_block - first_block);
4109 if (ret) {
4110 up_write(&EXT4_I(inode)->i_data_sem);
4111 goto out_stop;
4112 }
4113
4114 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4115 ret = ext4_ext_remove_space(inode, first_block,
4116 stop_block - 1);
4117 else
4118 ret = ext4_ind_remove_space(handle, inode, first_block,
4119 stop_block);
4120
4121 up_write(&EXT4_I(inode)->i_data_sem);
4122 }
4123 ext4_fc_track_range(handle, inode, first_block, stop_block);
4124 if (IS_SYNC(inode))
4125 ext4_handle_sync(handle);
4126
4127 inode->i_mtime = inode->i_ctime = current_time(inode);
4128 ret2 = ext4_mark_inode_dirty(handle, inode);
4129 if (unlikely(ret2))
4130 ret = ret2;
4131 if (ret >= 0)
4132 ext4_update_inode_fsync_trans(handle, inode, 1);
4133out_stop:
4134 ext4_journal_stop(handle);
4135out_dio:
4136 up_write(&EXT4_I(inode)->i_mmap_sem);
4137out_mutex:
4138 inode_unlock(inode);
4139 return ret;
4140}
4141
4142int ext4_inode_attach_jinode(struct inode *inode)
4143{
4144 struct ext4_inode_info *ei = EXT4_I(inode);
4145 struct jbd2_inode *jinode;
4146
4147 if (ei->jinode || !EXT4_SB(inode->i_sb)->s_journal)
4148 return 0;
4149
4150 jinode = jbd2_alloc_inode(GFP_KERNEL);
4151 spin_lock(&inode->i_lock);
4152 if (!ei->jinode) {
4153 if (!jinode) {
4154 spin_unlock(&inode->i_lock);
4155 return -ENOMEM;
4156 }
4157 ei->jinode = jinode;
4158 jbd2_journal_init_jbd_inode(ei->jinode, inode);
4159 jinode = NULL;
4160 }
4161 spin_unlock(&inode->i_lock);
4162 if (unlikely(jinode != NULL))
4163 jbd2_free_inode(jinode);
4164 return 0;
4165}
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195int ext4_truncate(struct inode *inode)
4196{
4197 struct ext4_inode_info *ei = EXT4_I(inode);
4198 unsigned int credits;
4199 int err = 0, err2;
4200 handle_t *handle;
4201 struct address_space *mapping = inode->i_mapping;
4202
4203
4204
4205
4206
4207
4208 if (!(inode->i_state & (I_NEW|I_FREEING)))
4209 WARN_ON(!inode_is_locked(inode));
4210 trace_ext4_truncate_enter(inode);
4211
4212 if (!ext4_can_truncate(inode))
4213 goto out_trace;
4214
4215 if (inode->i_size == 0 && !test_opt(inode->i_sb, NO_AUTO_DA_ALLOC))
4216 ext4_set_inode_state(inode, EXT4_STATE_DA_ALLOC_CLOSE);
4217
4218 if (ext4_has_inline_data(inode)) {
4219 int has_inline = 1;
4220
4221 err = ext4_inline_data_truncate(inode, &has_inline);
4222 if (err || has_inline)
4223 goto out_trace;
4224 }
4225
4226
4227 if (inode->i_size & (inode->i_sb->s_blocksize - 1)) {
4228 if (ext4_inode_attach_jinode(inode) < 0)
4229 goto out_trace;
4230 }
4231
4232 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4233 credits = ext4_writepage_trans_blocks(inode);
4234 else
4235 credits = ext4_blocks_for_truncate(inode);
4236
4237 handle = ext4_journal_start(inode, EXT4_HT_TRUNCATE, credits);
4238 if (IS_ERR(handle)) {
4239 err = PTR_ERR(handle);
4240 goto out_trace;
4241 }
4242
4243 if (inode->i_size & (inode->i_sb->s_blocksize - 1))
4244 ext4_block_truncate_page(handle, mapping, inode->i_size);
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255 err = ext4_orphan_add(handle, inode);
4256 if (err)
4257 goto out_stop;
4258
4259 down_write(&EXT4_I(inode)->i_data_sem);
4260
4261 ext4_discard_preallocations(inode, 0);
4262
4263 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4264 err = ext4_ext_truncate(handle, inode);
4265 else
4266 ext4_ind_truncate(handle, inode);
4267
4268 up_write(&ei->i_data_sem);
4269 if (err)
4270 goto out_stop;
4271
4272 if (IS_SYNC(inode))
4273 ext4_handle_sync(handle);
4274
4275out_stop:
4276
4277
4278
4279
4280
4281
4282
4283 if (inode->i_nlink)
4284 ext4_orphan_del(handle, inode);
4285
4286 inode->i_mtime = inode->i_ctime = current_time(inode);
4287 err2 = ext4_mark_inode_dirty(handle, inode);
4288 if (unlikely(err2 && !err))
4289 err = err2;
4290 ext4_journal_stop(handle);
4291
4292out_trace:
4293 trace_ext4_truncate_exit(inode);
4294 return err;
4295}
4296
4297
4298
4299
4300
4301
4302
4303static int __ext4_get_inode_loc(struct super_block *sb, unsigned long ino,
4304 struct ext4_iloc *iloc, int in_mem,
4305 ext4_fsblk_t *ret_block)
4306{
4307 struct ext4_group_desc *gdp;
4308 struct buffer_head *bh;
4309 ext4_fsblk_t block;
4310 struct blk_plug plug;
4311 int inodes_per_block, inode_offset;
4312
4313 iloc->bh = NULL;
4314 if (ino < EXT4_ROOT_INO ||
4315 ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))
4316 return -EFSCORRUPTED;
4317
4318 iloc->block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb);
4319 gdp = ext4_get_group_desc(sb, iloc->block_group, NULL);
4320 if (!gdp)
4321 return -EIO;
4322
4323
4324
4325
4326 inodes_per_block = EXT4_SB(sb)->s_inodes_per_block;
4327 inode_offset = ((ino - 1) %
4328 EXT4_INODES_PER_GROUP(sb));
4329 block = ext4_inode_table(sb, gdp) + (inode_offset / inodes_per_block);
4330 iloc->offset = (inode_offset % inodes_per_block) * EXT4_INODE_SIZE(sb);
4331
4332 bh = sb_getblk(sb, block);
4333 if (unlikely(!bh))
4334 return -ENOMEM;
4335 if (ext4_simulate_fail(sb, EXT4_SIM_INODE_EIO))
4336 goto simulate_eio;
4337 if (!buffer_uptodate(bh)) {
4338 lock_buffer(bh);
4339
4340 if (ext4_buffer_uptodate(bh)) {
4341
4342 unlock_buffer(bh);
4343 goto has_buffer;
4344 }
4345
4346
4347
4348
4349
4350
4351 if (in_mem) {
4352 struct buffer_head *bitmap_bh;
4353 int i, start;
4354
4355 start = inode_offset & ~(inodes_per_block - 1);
4356
4357
4358 bitmap_bh = sb_getblk(sb, ext4_inode_bitmap(sb, gdp));
4359 if (unlikely(!bitmap_bh))
4360 goto make_io;
4361
4362
4363
4364
4365
4366
4367 if (!buffer_uptodate(bitmap_bh)) {
4368 brelse(bitmap_bh);
4369 goto make_io;
4370 }
4371 for (i = start; i < start + inodes_per_block; i++) {
4372 if (i == inode_offset)
4373 continue;
4374 if (ext4_test_bit(i, bitmap_bh->b_data))
4375 break;
4376 }
4377 brelse(bitmap_bh);
4378 if (i == start + inodes_per_block) {
4379
4380 memset(bh->b_data, 0, bh->b_size);
4381 set_buffer_uptodate(bh);
4382 unlock_buffer(bh);
4383 goto has_buffer;
4384 }
4385 }
4386
4387make_io:
4388
4389
4390
4391
4392 blk_start_plug(&plug);
4393 if (EXT4_SB(sb)->s_inode_readahead_blks) {
4394 ext4_fsblk_t b, end, table;
4395 unsigned num;
4396 __u32 ra_blks = EXT4_SB(sb)->s_inode_readahead_blks;
4397
4398 table = ext4_inode_table(sb, gdp);
4399
4400 b = block & ~((ext4_fsblk_t) ra_blks - 1);
4401 if (table > b)
4402 b = table;
4403 end = b + ra_blks;
4404 num = EXT4_INODES_PER_GROUP(sb);
4405 if (ext4_has_group_desc_csum(sb))
4406 num -= ext4_itable_unused_count(sb, gdp);
4407 table += num / inodes_per_block;
4408 if (end > table)
4409 end = table;
4410 while (b <= end)
4411 ext4_sb_breadahead_unmovable(sb, b++);
4412 }
4413
4414
4415
4416
4417
4418
4419 trace_ext4_load_inode(sb, ino);
4420 ext4_read_bh_nowait(bh, REQ_META | REQ_PRIO, NULL);
4421 blk_finish_plug(&plug);
4422 wait_on_buffer(bh);
4423 if (!buffer_uptodate(bh)) {
4424 simulate_eio:
4425 if (ret_block)
4426 *ret_block = block;
4427 brelse(bh);
4428 return -EIO;
4429 }
4430 }
4431has_buffer:
4432 iloc->bh = bh;
4433 return 0;
4434}
4435
4436static int __ext4_get_inode_loc_noinmem(struct inode *inode,
4437 struct ext4_iloc *iloc)
4438{
4439 ext4_fsblk_t err_blk;
4440 int ret;
4441
4442 ret = __ext4_get_inode_loc(inode->i_sb, inode->i_ino, iloc, 0,
4443 &err_blk);
4444
4445 if (ret == -EIO)
4446 ext4_error_inode_block(inode, err_blk, EIO,
4447 "unable to read itable block");
4448
4449 return ret;
4450}
4451
4452int ext4_get_inode_loc(struct inode *inode, struct ext4_iloc *iloc)
4453{
4454 ext4_fsblk_t err_blk;
4455 int ret;
4456
4457
4458 ret = __ext4_get_inode_loc(inode->i_sb, inode->i_ino, iloc,
4459 !ext4_test_inode_state(inode, EXT4_STATE_XATTR), &err_blk);
4460
4461 if (ret == -EIO)
4462 ext4_error_inode_block(inode, err_blk, EIO,
4463 "unable to read itable block");
4464
4465 return ret;
4466}
4467
4468
4469int ext4_get_fc_inode_loc(struct super_block *sb, unsigned long ino,
4470 struct ext4_iloc *iloc)
4471{
4472 return __ext4_get_inode_loc(sb, ino, iloc, 0, NULL);
4473}
4474
4475static bool ext4_should_enable_dax(struct inode *inode)
4476{
4477 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
4478
4479 if (test_opt2(inode->i_sb, DAX_NEVER))
4480 return false;
4481 if (!S_ISREG(inode->i_mode))
4482 return false;
4483 if (ext4_should_journal_data(inode))
4484 return false;
4485 if (ext4_has_inline_data(inode))
4486 return false;
4487 if (ext4_test_inode_flag(inode, EXT4_INODE_ENCRYPT))
4488 return false;
4489 if (ext4_test_inode_flag(inode, EXT4_INODE_VERITY))
4490 return false;
4491 if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags))
4492 return false;
4493 if (test_opt(inode->i_sb, DAX_ALWAYS))
4494 return true;
4495
4496 return ext4_test_inode_flag(inode, EXT4_INODE_DAX);
4497}
4498
4499void ext4_set_inode_flags(struct inode *inode, bool init)
4500{
4501 unsigned int flags = EXT4_I(inode)->i_flags;
4502 unsigned int new_fl = 0;
4503
4504 WARN_ON_ONCE(IS_DAX(inode) && init);
4505
4506 if (flags & EXT4_SYNC_FL)
4507 new_fl |= S_SYNC;
4508 if (flags & EXT4_APPEND_FL)
4509 new_fl |= S_APPEND;
4510 if (flags & EXT4_IMMUTABLE_FL)
4511 new_fl |= S_IMMUTABLE;
4512 if (flags & EXT4_NOATIME_FL)
4513 new_fl |= S_NOATIME;
4514 if (flags & EXT4_DIRSYNC_FL)
4515 new_fl |= S_DIRSYNC;
4516
4517
4518
4519 new_fl |= (inode->i_flags & S_DAX);
4520 if (init && ext4_should_enable_dax(inode))
4521 new_fl |= S_DAX;
4522
4523 if (flags & EXT4_ENCRYPT_FL)
4524 new_fl |= S_ENCRYPTED;
4525 if (flags & EXT4_CASEFOLD_FL)
4526 new_fl |= S_CASEFOLD;
4527 if (flags & EXT4_VERITY_FL)
4528 new_fl |= S_VERITY;
4529 inode_set_flags(inode, new_fl,
4530 S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC|S_DAX|
4531 S_ENCRYPTED|S_CASEFOLD|S_VERITY);
4532}
4533
4534static blkcnt_t ext4_inode_blocks(struct ext4_inode *raw_inode,
4535 struct ext4_inode_info *ei)
4536{
4537 blkcnt_t i_blocks ;
4538 struct inode *inode = &(ei->vfs_inode);
4539 struct super_block *sb = inode->i_sb;
4540
4541 if (ext4_has_feature_huge_file(sb)) {
4542
4543 i_blocks = ((u64)le16_to_cpu(raw_inode->i_blocks_high)) << 32 |
4544 le32_to_cpu(raw_inode->i_blocks_lo);
4545 if (ext4_test_inode_flag(inode, EXT4_INODE_HUGE_FILE)) {
4546
4547 return i_blocks << (inode->i_blkbits - 9);
4548 } else {
4549 return i_blocks;
4550 }
4551 } else {
4552 return le32_to_cpu(raw_inode->i_blocks_lo);
4553 }
4554}
4555
4556static inline int ext4_iget_extra_inode(struct inode *inode,
4557 struct ext4_inode *raw_inode,
4558 struct ext4_inode_info *ei)
4559{
4560 __le32 *magic = (void *)raw_inode +
4561 EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize;
4562
4563 if (EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize + sizeof(__le32) <=
4564 EXT4_INODE_SIZE(inode->i_sb) &&
4565 *magic == cpu_to_le32(EXT4_XATTR_MAGIC)) {
4566 ext4_set_inode_state(inode, EXT4_STATE_XATTR);
4567 return ext4_find_inline_data_nolock(inode);
4568 } else
4569 EXT4_I(inode)->i_inline_off = 0;
4570 return 0;
4571}
4572
4573int ext4_get_projid(struct inode *inode, kprojid_t *projid)
4574{
4575 if (!ext4_has_feature_project(inode->i_sb))
4576 return -EOPNOTSUPP;
4577 *projid = EXT4_I(inode)->i_projid;
4578 return 0;
4579}
4580
4581
4582
4583
4584
4585
4586static inline void ext4_inode_set_iversion_queried(struct inode *inode, u64 val)
4587{
4588 if (unlikely(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL))
4589 inode_set_iversion_raw(inode, val);
4590 else
4591 inode_set_iversion_queried(inode, val);
4592}
4593static inline u64 ext4_inode_peek_iversion(const struct inode *inode)
4594{
4595 if (unlikely(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL))
4596 return inode_peek_iversion_raw(inode);
4597 else
4598 return inode_peek_iversion(inode);
4599}
4600
4601struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
4602 ext4_iget_flags flags, const char *function,
4603 unsigned int line)
4604{
4605 struct ext4_iloc iloc;
4606 struct ext4_inode *raw_inode;
4607 struct ext4_inode_info *ei;
4608 struct inode *inode;
4609 journal_t *journal = EXT4_SB(sb)->s_journal;
4610 long ret;
4611 loff_t size;
4612 int block;
4613 uid_t i_uid;
4614 gid_t i_gid;
4615 projid_t i_projid;
4616
4617 if ((!(flags & EXT4_IGET_SPECIAL) &&
4618 (ino < EXT4_FIRST_INO(sb) && ino != EXT4_ROOT_INO)) ||
4619 (ino < EXT4_ROOT_INO) ||
4620 (ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))) {
4621 if (flags & EXT4_IGET_HANDLE)
4622 return ERR_PTR(-ESTALE);
4623 __ext4_error(sb, function, line, false, EFSCORRUPTED, 0,
4624 "inode #%lu: comm %s: iget: illegal inode #",
4625 ino, current->comm);
4626 return ERR_PTR(-EFSCORRUPTED);
4627 }
4628
4629 inode = iget_locked(sb, ino);
4630 if (!inode)
4631 return ERR_PTR(-ENOMEM);
4632 if (!(inode->i_state & I_NEW))
4633 return inode;
4634
4635 ei = EXT4_I(inode);
4636 iloc.bh = NULL;
4637
4638 ret = __ext4_get_inode_loc_noinmem(inode, &iloc);
4639 if (ret < 0)
4640 goto bad_inode;
4641 raw_inode = ext4_raw_inode(&iloc);
4642
4643 if ((ino == EXT4_ROOT_INO) && (raw_inode->i_links_count == 0)) {
4644 ext4_error_inode(inode, function, line, 0,
4645 "iget: root inode unallocated");
4646 ret = -EFSCORRUPTED;
4647 goto bad_inode;
4648 }
4649
4650 if ((flags & EXT4_IGET_HANDLE) &&
4651 (raw_inode->i_links_count == 0) && (raw_inode->i_mode == 0)) {
4652 ret = -ESTALE;
4653 goto bad_inode;
4654 }
4655
4656 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
4657 ei->i_extra_isize = le16_to_cpu(raw_inode->i_extra_isize);
4658 if (EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize >
4659 EXT4_INODE_SIZE(inode->i_sb) ||
4660 (ei->i_extra_isize & 3)) {
4661 ext4_error_inode(inode, function, line, 0,
4662 "iget: bad extra_isize %u "
4663 "(inode size %u)",
4664 ei->i_extra_isize,
4665 EXT4_INODE_SIZE(inode->i_sb));
4666 ret = -EFSCORRUPTED;
4667 goto bad_inode;
4668 }
4669 } else
4670 ei->i_extra_isize = 0;
4671
4672
4673 if (ext4_has_metadata_csum(sb)) {
4674 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
4675 __u32 csum;
4676 __le32 inum = cpu_to_le32(inode->i_ino);
4677 __le32 gen = raw_inode->i_generation;
4678 csum = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&inum,
4679 sizeof(inum));
4680 ei->i_csum_seed = ext4_chksum(sbi, csum, (__u8 *)&gen,
4681 sizeof(gen));
4682 }
4683
4684 if ((!ext4_inode_csum_verify(inode, raw_inode, ei) ||
4685 ext4_simulate_fail(sb, EXT4_SIM_INODE_CRC)) &&
4686 (!(EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY))) {
4687 ext4_error_inode_err(inode, function, line, 0,
4688 EFSBADCRC, "iget: checksum invalid");
4689 ret = -EFSBADCRC;
4690 goto bad_inode;
4691 }
4692
4693 inode->i_mode = le16_to_cpu(raw_inode->i_mode);
4694 i_uid = (uid_t)le16_to_cpu(raw_inode->i_uid_low);
4695 i_gid = (gid_t)le16_to_cpu(raw_inode->i_gid_low);
4696 if (ext4_has_feature_project(sb) &&
4697 EXT4_INODE_SIZE(sb) > EXT4_GOOD_OLD_INODE_SIZE &&
4698 EXT4_FITS_IN_INODE(raw_inode, ei, i_projid))
4699 i_projid = (projid_t)le32_to_cpu(raw_inode->i_projid);
4700 else
4701 i_projid = EXT4_DEF_PROJID;
4702
4703 if (!(test_opt(inode->i_sb, NO_UID32))) {
4704 i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16;
4705 i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16;
4706 }
4707 i_uid_write(inode, i_uid);
4708 i_gid_write(inode, i_gid);
4709 ei->i_projid = make_kprojid(&init_user_ns, i_projid);
4710 set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));
4711
4712 ext4_clear_state_flags(ei);
4713 ei->i_inline_off = 0;
4714 ei->i_dir_start_lookup = 0;
4715 ei->i_dtime = le32_to_cpu(raw_inode->i_dtime);
4716
4717
4718
4719
4720
4721 if (inode->i_nlink == 0) {
4722 if ((inode->i_mode == 0 ||
4723 !(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_ORPHAN_FS)) &&
4724 ino != EXT4_BOOT_LOADER_INO) {
4725
4726 ret = -ESTALE;
4727 goto bad_inode;
4728 }
4729
4730
4731
4732
4733
4734
4735 }
4736 ei->i_flags = le32_to_cpu(raw_inode->i_flags);
4737 ext4_set_inode_flags(inode, true);
4738 inode->i_blocks = ext4_inode_blocks(raw_inode, ei);
4739 ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl_lo);
4740 if (ext4_has_feature_64bit(sb))
4741 ei->i_file_acl |=
4742 ((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32;
4743 inode->i_size = ext4_isize(sb, raw_inode);
4744 if ((size = i_size_read(inode)) < 0) {
4745 ext4_error_inode(inode, function, line, 0,
4746 "iget: bad i_size value: %lld", size);
4747 ret = -EFSCORRUPTED;
4748 goto bad_inode;
4749 }
4750
4751
4752
4753
4754
4755 if (!ext4_has_feature_dir_index(sb) && ext4_has_metadata_csum(sb) &&
4756 ext4_test_inode_flag(inode, EXT4_INODE_INDEX)) {
4757 ext4_error_inode(inode, function, line, 0,
4758 "iget: Dir with htree data on filesystem without dir_index feature.");
4759 ret = -EFSCORRUPTED;
4760 goto bad_inode;
4761 }
4762 ei->i_disksize = inode->i_size;
4763#ifdef CONFIG_QUOTA
4764 ei->i_reserved_quota = 0;
4765#endif
4766 inode->i_generation = le32_to_cpu(raw_inode->i_generation);
4767 ei->i_block_group = iloc.block_group;
4768 ei->i_last_alloc_group = ~0;
4769
4770
4771
4772
4773 for (block = 0; block < EXT4_N_BLOCKS; block++)
4774 ei->i_data[block] = raw_inode->i_block[block];
4775 INIT_LIST_HEAD(&ei->i_orphan);
4776 ext4_fc_init_inode(&ei->vfs_inode);
4777
4778
4779
4780
4781
4782
4783
4784
4785 if (journal) {
4786 transaction_t *transaction;
4787 tid_t tid;
4788
4789 read_lock(&journal->j_state_lock);
4790 if (journal->j_running_transaction)
4791 transaction = journal->j_running_transaction;
4792 else
4793 transaction = journal->j_committing_transaction;
4794 if (transaction)
4795 tid = transaction->t_tid;
4796 else
4797 tid = journal->j_commit_sequence;
4798 read_unlock(&journal->j_state_lock);
4799 ei->i_sync_tid = tid;
4800 ei->i_datasync_tid = tid;
4801 }
4802
4803 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
4804 if (ei->i_extra_isize == 0) {
4805
4806 BUILD_BUG_ON(sizeof(struct ext4_inode) & 3);
4807 ei->i_extra_isize = sizeof(struct ext4_inode) -
4808 EXT4_GOOD_OLD_INODE_SIZE;
4809 } else {
4810 ret = ext4_iget_extra_inode(inode, raw_inode, ei);
4811 if (ret)
4812 goto bad_inode;
4813 }
4814 }
4815
4816 EXT4_INODE_GET_XTIME(i_ctime, inode, raw_inode);
4817 EXT4_INODE_GET_XTIME(i_mtime, inode, raw_inode);
4818 EXT4_INODE_GET_XTIME(i_atime, inode, raw_inode);
4819 EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode);
4820
4821 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
4822 u64 ivers = le32_to_cpu(raw_inode->i_disk_version);
4823
4824 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
4825 if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
4826 ivers |=
4827 (__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32;
4828 }
4829 ext4_inode_set_iversion_queried(inode, ivers);
4830 }
4831
4832 ret = 0;
4833 if (ei->i_file_acl &&
4834 !ext4_inode_block_valid(inode, ei->i_file_acl, 1)) {
4835 ext4_error_inode(inode, function, line, 0,
4836 "iget: bad extended attribute block %llu",
4837 ei->i_file_acl);
4838 ret = -EFSCORRUPTED;
4839 goto bad_inode;
4840 } else if (!ext4_has_inline_data(inode)) {
4841
4842 if (!(EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY) &&
4843 (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
4844 (S_ISLNK(inode->i_mode) &&
4845 !ext4_inode_is_fast_symlink(inode)))) {
4846 if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
4847 ret = ext4_ext_check_inode(inode);
4848 else
4849 ret = ext4_ind_check_inode(inode);
4850 }
4851 }
4852 if (ret)
4853 goto bad_inode;
4854
4855 if (S_ISREG(inode->i_mode)) {
4856 inode->i_op = &ext4_file_inode_operations;
4857 inode->i_fop = &ext4_file_operations;
4858 ext4_set_aops(inode);
4859 } else if (S_ISDIR(inode->i_mode)) {
4860 inode->i_op = &ext4_dir_inode_operations;
4861 inode->i_fop = &ext4_dir_operations;
4862 } else if (S_ISLNK(inode->i_mode)) {
4863
4864 if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) {
4865 ext4_error_inode(inode, function, line, 0,
4866 "iget: immutable or append flags "
4867 "not allowed on symlinks");
4868 ret = -EFSCORRUPTED;
4869 goto bad_inode;
4870 }
4871 if (IS_ENCRYPTED(inode)) {
4872 inode->i_op = &ext4_encrypted_symlink_inode_operations;
4873 ext4_set_aops(inode);
4874 } else if (ext4_inode_is_fast_symlink(inode)) {
4875 inode->i_link = (char *)ei->i_data;
4876 inode->i_op = &ext4_fast_symlink_inode_operations;
4877 nd_terminate_link(ei->i_data, inode->i_size,
4878 sizeof(ei->i_data) - 1);
4879 } else {
4880 inode->i_op = &ext4_symlink_inode_operations;
4881 ext4_set_aops(inode);
4882 }
4883 inode_nohighmem(inode);
4884 } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
4885 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
4886 inode->i_op = &ext4_special_inode_operations;
4887 if (raw_inode->i_block[0])
4888 init_special_inode(inode, inode->i_mode,
4889 old_decode_dev(le32_to_cpu(raw_inode->i_block[0])));
4890 else
4891 init_special_inode(inode, inode->i_mode,
4892 new_decode_dev(le32_to_cpu(raw_inode->i_block[1])));
4893 } else if (ino == EXT4_BOOT_LOADER_INO) {
4894 make_bad_inode(inode);
4895 } else {
4896 ret = -EFSCORRUPTED;
4897 ext4_error_inode(inode, function, line, 0,
4898 "iget: bogus i_mode (%o)", inode->i_mode);
4899 goto bad_inode;
4900 }
4901 if (IS_CASEFOLDED(inode) && !ext4_has_feature_casefold(inode->i_sb))
4902 ext4_error_inode(inode, function, line, 0,
4903 "casefold flag without casefold feature");
4904 brelse(iloc.bh);
4905
4906 unlock_new_inode(inode);
4907 return inode;
4908
4909bad_inode:
4910 brelse(iloc.bh);
4911 iget_failed(inode);
4912 return ERR_PTR(ret);
4913}
4914
4915static int ext4_inode_blocks_set(handle_t *handle,
4916 struct ext4_inode *raw_inode,
4917 struct ext4_inode_info *ei)
4918{
4919 struct inode *inode = &(ei->vfs_inode);
4920 u64 i_blocks = READ_ONCE(inode->i_blocks);
4921 struct super_block *sb = inode->i_sb;
4922
4923 if (i_blocks <= ~0U) {
4924
4925
4926
4927
4928 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks);
4929 raw_inode->i_blocks_high = 0;
4930 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE);
4931 return 0;
4932 }
4933 if (!ext4_has_feature_huge_file(sb))
4934 return -EFBIG;
4935
4936 if (i_blocks <= 0xffffffffffffULL) {
4937
4938
4939
4940
4941 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks);
4942 raw_inode->i_blocks_high = cpu_to_le16(i_blocks >> 32);
4943 ext4_clear_inode_flag(inode, EXT4_INODE_HUGE_FILE);
4944 } else {
4945 ext4_set_inode_flag(inode, EXT4_INODE_HUGE_FILE);
4946
4947 i_blocks = i_blocks >> (inode->i_blkbits - 9);
4948 raw_inode->i_blocks_lo = cpu_to_le32(i_blocks);
4949 raw_inode->i_blocks_high = cpu_to_le16(i_blocks >> 32);
4950 }
4951 return 0;
4952}
4953
4954static void __ext4_update_other_inode_time(struct super_block *sb,
4955 unsigned long orig_ino,
4956 unsigned long ino,
4957 struct ext4_inode *raw_inode)
4958{
4959 struct inode *inode;
4960
4961 inode = find_inode_by_ino_rcu(sb, ino);
4962 if (!inode)
4963 return;
4964
4965 if (!inode_is_dirtytime_only(inode))
4966 return;
4967
4968 spin_lock(&inode->i_lock);
4969 if (inode_is_dirtytime_only(inode)) {
4970 struct ext4_inode_info *ei = EXT4_I(inode);
4971
4972 inode->i_state &= ~I_DIRTY_TIME;
4973 spin_unlock(&inode->i_lock);
4974
4975 spin_lock(&ei->i_raw_lock);
4976 EXT4_INODE_SET_XTIME(i_ctime, inode, raw_inode);
4977 EXT4_INODE_SET_XTIME(i_mtime, inode, raw_inode);
4978 EXT4_INODE_SET_XTIME(i_atime, inode, raw_inode);
4979 ext4_inode_csum_set(inode, raw_inode, ei);
4980 spin_unlock(&ei->i_raw_lock);
4981 trace_ext4_other_inode_update_time(inode, orig_ino);
4982 return;
4983 }
4984 spin_unlock(&inode->i_lock);
4985}
4986
4987
4988
4989
4990
4991static void ext4_update_other_inodes_time(struct super_block *sb,
4992 unsigned long orig_ino, char *buf)
4993{
4994 unsigned long ino;
4995 int i, inodes_per_block = EXT4_SB(sb)->s_inodes_per_block;
4996 int inode_size = EXT4_INODE_SIZE(sb);
4997
4998
4999
5000
5001
5002
5003 ino = ((orig_ino - 1) & ~(inodes_per_block - 1)) + 1;
5004 rcu_read_lock();
5005 for (i = 0; i < inodes_per_block; i++, ino++, buf += inode_size) {
5006 if (ino == orig_ino)
5007 continue;
5008 __ext4_update_other_inode_time(sb, orig_ino, ino,
5009 (struct ext4_inode *)buf);
5010 }
5011 rcu_read_unlock();
5012}
5013
5014
5015
5016
5017
5018
5019
5020
5021static int ext4_do_update_inode(handle_t *handle,
5022 struct inode *inode,
5023 struct ext4_iloc *iloc)
5024{
5025 struct ext4_inode *raw_inode = ext4_raw_inode(iloc);
5026 struct ext4_inode_info *ei = EXT4_I(inode);
5027 struct buffer_head *bh = iloc->bh;
5028 struct super_block *sb = inode->i_sb;
5029 int err = 0, block;
5030 int need_datasync = 0, set_large_file = 0;
5031 uid_t i_uid;
5032 gid_t i_gid;
5033 projid_t i_projid;
5034
5035 spin_lock(&ei->i_raw_lock);
5036
5037
5038
5039 if (ext4_test_inode_state(inode, EXT4_STATE_NEW))
5040 memset(raw_inode, 0, EXT4_SB(inode->i_sb)->s_inode_size);
5041
5042 err = ext4_inode_blocks_set(handle, raw_inode, ei);
5043 if (err) {
5044 spin_unlock(&ei->i_raw_lock);
5045 goto out_brelse;
5046 }
5047
5048 raw_inode->i_mode = cpu_to_le16(inode->i_mode);
5049 i_uid = i_uid_read(inode);
5050 i_gid = i_gid_read(inode);
5051 i_projid = from_kprojid(&init_user_ns, ei->i_projid);
5052 if (!(test_opt(inode->i_sb, NO_UID32))) {
5053 raw_inode->i_uid_low = cpu_to_le16(low_16_bits(i_uid));
5054 raw_inode->i_gid_low = cpu_to_le16(low_16_bits(i_gid));
5055
5056
5057
5058
5059 if (ei->i_dtime && list_empty(&ei->i_orphan)) {
5060 raw_inode->i_uid_high = 0;
5061 raw_inode->i_gid_high = 0;
5062 } else {
5063 raw_inode->i_uid_high =
5064 cpu_to_le16(high_16_bits(i_uid));
5065 raw_inode->i_gid_high =
5066 cpu_to_le16(high_16_bits(i_gid));
5067 }
5068 } else {
5069 raw_inode->i_uid_low = cpu_to_le16(fs_high2lowuid(i_uid));
5070 raw_inode->i_gid_low = cpu_to_le16(fs_high2lowgid(i_gid));
5071 raw_inode->i_uid_high = 0;
5072 raw_inode->i_gid_high = 0;
5073 }
5074 raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
5075
5076 EXT4_INODE_SET_XTIME(i_ctime, inode, raw_inode);
5077 EXT4_INODE_SET_XTIME(i_mtime, inode, raw_inode);
5078 EXT4_INODE_SET_XTIME(i_atime, inode, raw_inode);
5079 EXT4_EINODE_SET_XTIME(i_crtime, ei, raw_inode);
5080
5081 raw_inode->i_dtime = cpu_to_le32(ei->i_dtime);
5082 raw_inode->i_flags = cpu_to_le32(ei->i_flags & 0xFFFFFFFF);
5083 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT)))
5084 raw_inode->i_file_acl_high =
5085 cpu_to_le16(ei->i_file_acl >> 32);
5086 raw_inode->i_file_acl_lo = cpu_to_le32(ei->i_file_acl);
5087 if (READ_ONCE(ei->i_disksize) != ext4_isize(inode->i_sb, raw_inode)) {
5088 ext4_isize_set(raw_inode, ei->i_disksize);
5089 need_datasync = 1;
5090 }
5091 if (ei->i_disksize > 0x7fffffffULL) {
5092 if (!ext4_has_feature_large_file(sb) ||
5093 EXT4_SB(sb)->s_es->s_rev_level ==
5094 cpu_to_le32(EXT4_GOOD_OLD_REV))
5095 set_large_file = 1;
5096 }
5097 raw_inode->i_generation = cpu_to_le32(inode->i_generation);
5098 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
5099 if (old_valid_dev(inode->i_rdev)) {
5100 raw_inode->i_block[0] =
5101 cpu_to_le32(old_encode_dev(inode->i_rdev));
5102 raw_inode->i_block[1] = 0;
5103 } else {
5104 raw_inode->i_block[0] = 0;
5105 raw_inode->i_block[1] =
5106 cpu_to_le32(new_encode_dev(inode->i_rdev));
5107 raw_inode->i_block[2] = 0;
5108 }
5109 } else if (!ext4_has_inline_data(inode)) {
5110 for (block = 0; block < EXT4_N_BLOCKS; block++)
5111 raw_inode->i_block[block] = ei->i_data[block];
5112 }
5113
5114 if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
5115 u64 ivers = ext4_inode_peek_iversion(inode);
5116
5117 raw_inode->i_disk_version = cpu_to_le32(ivers);
5118 if (ei->i_extra_isize) {
5119 if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
5120 raw_inode->i_version_hi =
5121 cpu_to_le32(ivers >> 32);
5122 raw_inode->i_extra_isize =
5123 cpu_to_le16(ei->i_extra_isize);
5124 }
5125 }
5126
5127 BUG_ON(!ext4_has_feature_project(inode->i_sb) &&
5128 i_projid != EXT4_DEF_PROJID);
5129
5130 if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE &&
5131 EXT4_FITS_IN_INODE(raw_inode, ei, i_projid))
5132 raw_inode->i_projid = cpu_to_le32(i_projid);
5133
5134 ext4_inode_csum_set(inode, raw_inode, ei);
5135 spin_unlock(&ei->i_raw_lock);
5136 if (inode->i_sb->s_flags & SB_LAZYTIME)
5137 ext4_update_other_inodes_time(inode->i_sb, inode->i_ino,
5138 bh->b_data);
5139
5140 BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
5141 err = ext4_handle_dirty_metadata(handle, NULL, bh);
5142 if (err)
5143 goto out_brelse;
5144 ext4_clear_inode_state(inode, EXT4_STATE_NEW);
5145 if (set_large_file) {
5146 BUFFER_TRACE(EXT4_SB(sb)->s_sbh, "get write access");
5147 err = ext4_journal_get_write_access(handle, EXT4_SB(sb)->s_sbh);
5148 if (err)
5149 goto out_brelse;
5150 lock_buffer(EXT4_SB(sb)->s_sbh);
5151 ext4_set_feature_large_file(sb);
5152 ext4_superblock_csum_set(sb);
5153 unlock_buffer(EXT4_SB(sb)->s_sbh);
5154 ext4_handle_sync(handle);
5155 err = ext4_handle_dirty_metadata(handle, NULL,
5156 EXT4_SB(sb)->s_sbh);
5157 }
5158 ext4_update_inode_fsync_trans(handle, inode, need_datasync);
5159out_brelse:
5160 brelse(bh);
5161 ext4_std_error(inode->i_sb, err);
5162 return err;
5163}
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199int ext4_write_inode(struct inode *inode, struct writeback_control *wbc)
5200{
5201 int err;
5202
5203 if (WARN_ON_ONCE(current->flags & PF_MEMALLOC) ||
5204 sb_rdonly(inode->i_sb))
5205 return 0;
5206
5207 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
5208 return -EIO;
5209
5210 if (EXT4_SB(inode->i_sb)->s_journal) {
5211 if (ext4_journal_current_handle()) {
5212 jbd_debug(1, "called recursively, non-PF_MEMALLOC!\n");
5213 dump_stack();
5214 return -EIO;
5215 }
5216
5217
5218
5219
5220
5221
5222 if (wbc->sync_mode != WB_SYNC_ALL || wbc->for_sync)
5223 return 0;
5224
5225 err = ext4_fc_commit(EXT4_SB(inode->i_sb)->s_journal,
5226 EXT4_I(inode)->i_sync_tid);
5227 } else {
5228 struct ext4_iloc iloc;
5229
5230 err = __ext4_get_inode_loc_noinmem(inode, &iloc);
5231 if (err)
5232 return err;
5233
5234
5235
5236
5237 if (wbc->sync_mode == WB_SYNC_ALL && !wbc->for_sync)
5238 sync_dirty_buffer(iloc.bh);
5239 if (buffer_req(iloc.bh) && !buffer_uptodate(iloc.bh)) {
5240 ext4_error_inode_block(inode, iloc.bh->b_blocknr, EIO,
5241 "IO error syncing inode");
5242 err = -EIO;
5243 }
5244 brelse(iloc.bh);
5245 }
5246 return err;
5247}
5248
5249
5250
5251
5252
5253
5254static void ext4_wait_for_tail_page_commit(struct inode *inode)
5255{
5256 struct page *page;
5257 unsigned offset;
5258 journal_t *journal = EXT4_SB(inode->i_sb)->s_journal;
5259 tid_t commit_tid = 0;
5260 int ret;
5261
5262 offset = inode->i_size & (PAGE_SIZE - 1);
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272 if (!offset || offset > (PAGE_SIZE - i_blocksize(inode)))
5273 return;
5274 while (1) {
5275 page = find_lock_page(inode->i_mapping,
5276 inode->i_size >> PAGE_SHIFT);
5277 if (!page)
5278 return;
5279 ret = __ext4_journalled_invalidatepage(page, offset,
5280 PAGE_SIZE - offset);
5281 unlock_page(page);
5282 put_page(page);
5283 if (ret != -EBUSY)
5284 return;
5285 commit_tid = 0;
5286 read_lock(&journal->j_state_lock);
5287 if (journal->j_committing_transaction)
5288 commit_tid = journal->j_committing_transaction->t_tid;
5289 read_unlock(&journal->j_state_lock);
5290 if (commit_tid)
5291 jbd2_log_wait_commit(journal, commit_tid);
5292 }
5293}
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319int ext4_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
5320 struct iattr *attr)
5321{
5322 struct inode *inode = d_inode(dentry);
5323 int error, rc = 0;
5324 int orphan = 0;
5325 const unsigned int ia_valid = attr->ia_valid;
5326
5327 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
5328 return -EIO;
5329
5330 if (unlikely(IS_IMMUTABLE(inode)))
5331 return -EPERM;
5332
5333 if (unlikely(IS_APPEND(inode) &&
5334 (ia_valid & (ATTR_MODE | ATTR_UID |
5335 ATTR_GID | ATTR_TIMES_SET))))
5336 return -EPERM;
5337
5338 error = setattr_prepare(mnt_userns, dentry, attr);
5339 if (error)
5340 return error;
5341
5342 error = fscrypt_prepare_setattr(dentry, attr);
5343 if (error)
5344 return error;
5345
5346 error = fsverity_prepare_setattr(dentry, attr);
5347 if (error)
5348 return error;
5349
5350 if (is_quota_modification(inode, attr)) {
5351 error = dquot_initialize(inode);
5352 if (error)
5353 return error;
5354 }
5355 ext4_fc_start_update(inode);
5356 if ((ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) ||
5357 (ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) {
5358 handle_t *handle;
5359
5360
5361
5362 handle = ext4_journal_start(inode, EXT4_HT_QUOTA,
5363 (EXT4_MAXQUOTAS_INIT_BLOCKS(inode->i_sb) +
5364 EXT4_MAXQUOTAS_DEL_BLOCKS(inode->i_sb)) + 3);
5365 if (IS_ERR(handle)) {
5366 error = PTR_ERR(handle);
5367 goto err_out;
5368 }
5369
5370
5371
5372
5373 down_read(&EXT4_I(inode)->xattr_sem);
5374 error = dquot_transfer(inode, attr);
5375 up_read(&EXT4_I(inode)->xattr_sem);
5376
5377 if (error) {
5378 ext4_journal_stop(handle);
5379 ext4_fc_stop_update(inode);
5380 return error;
5381 }
5382
5383
5384 if (attr->ia_valid & ATTR_UID)
5385 inode->i_uid = attr->ia_uid;
5386 if (attr->ia_valid & ATTR_GID)
5387 inode->i_gid = attr->ia_gid;
5388 error = ext4_mark_inode_dirty(handle, inode);
5389 ext4_journal_stop(handle);
5390 if (unlikely(error)) {
5391 ext4_fc_stop_update(inode);
5392 return error;
5393 }
5394 }
5395
5396 if (attr->ia_valid & ATTR_SIZE) {
5397 handle_t *handle;
5398 loff_t oldsize = inode->i_size;
5399 int shrink = (attr->ia_size < inode->i_size);
5400
5401 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) {
5402 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
5403
5404 if (attr->ia_size > sbi->s_bitmap_maxbytes) {
5405 ext4_fc_stop_update(inode);
5406 return -EFBIG;
5407 }
5408 }
5409 if (!S_ISREG(inode->i_mode)) {
5410 ext4_fc_stop_update(inode);
5411 return -EINVAL;
5412 }
5413
5414 if (IS_I_VERSION(inode) && attr->ia_size != inode->i_size)
5415 inode_inc_iversion(inode);
5416
5417 if (shrink) {
5418 if (ext4_should_order_data(inode)) {
5419 error = ext4_begin_ordered_truncate(inode,
5420 attr->ia_size);
5421 if (error)
5422 goto err_out;
5423 }
5424
5425
5426
5427
5428 inode_dio_wait(inode);
5429 }
5430
5431 down_write(&EXT4_I(inode)->i_mmap_sem);
5432
5433 rc = ext4_break_layouts(inode);
5434 if (rc) {
5435 up_write(&EXT4_I(inode)->i_mmap_sem);
5436 goto err_out;
5437 }
5438
5439 if (attr->ia_size != inode->i_size) {
5440 handle = ext4_journal_start(inode, EXT4_HT_INODE, 3);
5441 if (IS_ERR(handle)) {
5442 error = PTR_ERR(handle);
5443 goto out_mmap_sem;
5444 }
5445 if (ext4_handle_valid(handle) && shrink) {
5446 error = ext4_orphan_add(handle, inode);
5447 orphan = 1;
5448 }
5449
5450
5451
5452
5453 if (!shrink) {
5454 inode->i_mtime = current_time(inode);
5455 inode->i_ctime = inode->i_mtime;
5456 }
5457
5458 if (shrink)
5459 ext4_fc_track_range(handle, inode,
5460 (attr->ia_size > 0 ? attr->ia_size - 1 : 0) >>
5461 inode->i_sb->s_blocksize_bits,
5462 (oldsize > 0 ? oldsize - 1 : 0) >>
5463 inode->i_sb->s_blocksize_bits);
5464 else
5465 ext4_fc_track_range(
5466 handle, inode,
5467 (oldsize > 0 ? oldsize - 1 : oldsize) >>
5468 inode->i_sb->s_blocksize_bits,
5469 (attr->ia_size > 0 ? attr->ia_size - 1 : 0) >>
5470 inode->i_sb->s_blocksize_bits);
5471
5472 down_write(&EXT4_I(inode)->i_data_sem);
5473 EXT4_I(inode)->i_disksize = attr->ia_size;
5474 rc = ext4_mark_inode_dirty(handle, inode);
5475 if (!error)
5476 error = rc;
5477
5478
5479
5480
5481
5482 if (!error)
5483 i_size_write(inode, attr->ia_size);
5484 up_write(&EXT4_I(inode)->i_data_sem);
5485 ext4_journal_stop(handle);
5486 if (error)
5487 goto out_mmap_sem;
5488 if (!shrink) {
5489 pagecache_isize_extended(inode, oldsize,
5490 inode->i_size);
5491 } else if (ext4_should_journal_data(inode)) {
5492 ext4_wait_for_tail_page_commit(inode);
5493 }
5494 }
5495
5496
5497
5498
5499
5500 truncate_pagecache(inode, inode->i_size);
5501
5502
5503
5504
5505 if (attr->ia_size <= oldsize) {
5506 rc = ext4_truncate(inode);
5507 if (rc)
5508 error = rc;
5509 }
5510out_mmap_sem:
5511 up_write(&EXT4_I(inode)->i_mmap_sem);
5512 }
5513
5514 if (!error) {
5515 setattr_copy(mnt_userns, inode, attr);
5516 mark_inode_dirty(inode);
5517 }
5518
5519
5520
5521
5522
5523 if (orphan && inode->i_nlink)
5524 ext4_orphan_del(NULL, inode);
5525
5526 if (!error && (ia_valid & ATTR_MODE))
5527 rc = posix_acl_chmod(mnt_userns, inode, inode->i_mode);
5528
5529err_out:
5530 if (error)
5531 ext4_std_error(inode->i_sb, error);
5532 if (!error)
5533 error = rc;
5534 ext4_fc_stop_update(inode);
5535 return error;
5536}
5537
5538int ext4_getattr(struct user_namespace *mnt_userns, const struct path *path,
5539 struct kstat *stat, u32 request_mask, unsigned int query_flags)
5540{
5541 struct inode *inode = d_inode(path->dentry);
5542 struct ext4_inode *raw_inode;
5543 struct ext4_inode_info *ei = EXT4_I(inode);
5544 unsigned int flags;
5545
5546 if ((request_mask & STATX_BTIME) &&
5547 EXT4_FITS_IN_INODE(raw_inode, ei, i_crtime)) {
5548 stat->result_mask |= STATX_BTIME;
5549 stat->btime.tv_sec = ei->i_crtime.tv_sec;
5550 stat->btime.tv_nsec = ei->i_crtime.tv_nsec;
5551 }
5552
5553 flags = ei->i_flags & EXT4_FL_USER_VISIBLE;
5554 if (flags & EXT4_APPEND_FL)
5555 stat->attributes |= STATX_ATTR_APPEND;
5556 if (flags & EXT4_COMPR_FL)
5557 stat->attributes |= STATX_ATTR_COMPRESSED;
5558 if (flags & EXT4_ENCRYPT_FL)
5559 stat->attributes |= STATX_ATTR_ENCRYPTED;
5560 if (flags & EXT4_IMMUTABLE_FL)
5561 stat->attributes |= STATX_ATTR_IMMUTABLE;
5562 if (flags & EXT4_NODUMP_FL)
5563 stat->attributes |= STATX_ATTR_NODUMP;
5564 if (flags & EXT4_VERITY_FL)
5565 stat->attributes |= STATX_ATTR_VERITY;
5566
5567 stat->attributes_mask |= (STATX_ATTR_APPEND |
5568 STATX_ATTR_COMPRESSED |
5569 STATX_ATTR_ENCRYPTED |
5570 STATX_ATTR_IMMUTABLE |
5571 STATX_ATTR_NODUMP |
5572 STATX_ATTR_VERITY);
5573
5574 generic_fillattr(mnt_userns, inode, stat);
5575 return 0;
5576}
5577
5578int ext4_file_getattr(struct user_namespace *mnt_userns,
5579 const struct path *path, struct kstat *stat,
5580 u32 request_mask, unsigned int query_flags)
5581{
5582 struct inode *inode = d_inode(path->dentry);
5583 u64 delalloc_blocks;
5584
5585 ext4_getattr(mnt_userns, path, stat, request_mask, query_flags);
5586
5587
5588
5589
5590
5591
5592
5593 if (unlikely(ext4_has_inline_data(inode)))
5594 stat->blocks += (stat->size + 511) >> 9;
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606 delalloc_blocks = EXT4_C2B(EXT4_SB(inode->i_sb),
5607 EXT4_I(inode)->i_reserved_data_blocks);
5608 stat->blocks += delalloc_blocks << (inode->i_sb->s_blocksize_bits - 9);
5609 return 0;
5610}
5611
5612static int ext4_index_trans_blocks(struct inode *inode, int lblocks,
5613 int pextents)
5614{
5615 if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)))
5616 return ext4_ind_trans_blocks(inode, lblocks);
5617 return ext4_ext_index_trans_blocks(inode, pextents);
5618}
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
5632 int pextents)
5633{
5634 ext4_group_t groups, ngroups = ext4_get_groups_count(inode->i_sb);
5635 int gdpblocks;
5636 int idxblocks;
5637 int ret = 0;
5638
5639
5640
5641
5642
5643 idxblocks = ext4_index_trans_blocks(inode, lblocks, pextents);
5644
5645 ret = idxblocks;
5646
5647
5648
5649
5650
5651 groups = idxblocks + pextents;
5652 gdpblocks = groups;
5653 if (groups > ngroups)
5654 groups = ngroups;
5655 if (groups > EXT4_SB(inode->i_sb)->s_gdb_count)
5656 gdpblocks = EXT4_SB(inode->i_sb)->s_gdb_count;
5657
5658
5659 ret += groups + gdpblocks;
5660
5661
5662 ret += EXT4_META_TRANS_BLOCKS(inode->i_sb);
5663
5664 return ret;
5665}
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677int ext4_writepage_trans_blocks(struct inode *inode)
5678{
5679 int bpp = ext4_journal_blocks_per_page(inode);
5680 int ret;
5681
5682 ret = ext4_meta_trans_blocks(inode, bpp, bpp);
5683
5684
5685 if (ext4_should_journal_data(inode))
5686 ret += bpp;
5687 return ret;
5688}
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699int ext4_chunk_trans_blocks(struct inode *inode, int nrblocks)
5700{
5701 return ext4_meta_trans_blocks(inode, nrblocks, 1);
5702}
5703
5704
5705
5706
5707
5708int ext4_mark_iloc_dirty(handle_t *handle,
5709 struct inode *inode, struct ext4_iloc *iloc)
5710{
5711 int err = 0;
5712
5713 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) {
5714 put_bh(iloc->bh);
5715 return -EIO;
5716 }
5717 ext4_fc_track_inode(handle, inode);
5718
5719 if (IS_I_VERSION(inode))
5720 inode_inc_iversion(inode);
5721
5722
5723 get_bh(iloc->bh);
5724
5725
5726 err = ext4_do_update_inode(handle, inode, iloc);
5727 put_bh(iloc->bh);
5728 return err;
5729}
5730
5731
5732
5733
5734
5735
5736int
5737ext4_reserve_inode_write(handle_t *handle, struct inode *inode,
5738 struct ext4_iloc *iloc)
5739{
5740 int err;
5741
5742 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
5743 return -EIO;
5744
5745 err = ext4_get_inode_loc(inode, iloc);
5746 if (!err) {
5747 BUFFER_TRACE(iloc->bh, "get_write_access");
5748 err = ext4_journal_get_write_access(handle, iloc->bh);
5749 if (err) {
5750 brelse(iloc->bh);
5751 iloc->bh = NULL;
5752 }
5753 }
5754 ext4_std_error(inode->i_sb, err);
5755 return err;
5756}
5757
5758static int __ext4_expand_extra_isize(struct inode *inode,
5759 unsigned int new_extra_isize,
5760 struct ext4_iloc *iloc,
5761 handle_t *handle, int *no_expand)
5762{
5763 struct ext4_inode *raw_inode;
5764 struct ext4_xattr_ibody_header *header;
5765 unsigned int inode_size = EXT4_INODE_SIZE(inode->i_sb);
5766 struct ext4_inode_info *ei = EXT4_I(inode);
5767 int error;
5768
5769
5770 if ((EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize > inode_size) ||
5771 (ei->i_extra_isize & 3)) {
5772 EXT4_ERROR_INODE(inode, "bad extra_isize %u (inode size %u)",
5773 ei->i_extra_isize,
5774 EXT4_INODE_SIZE(inode->i_sb));
5775 return -EFSCORRUPTED;
5776 }
5777 if ((new_extra_isize < ei->i_extra_isize) ||
5778 (new_extra_isize < 4) ||
5779 (new_extra_isize > inode_size - EXT4_GOOD_OLD_INODE_SIZE))
5780 return -EINVAL;
5781
5782 raw_inode = ext4_raw_inode(iloc);
5783
5784 header = IHDR(inode, raw_inode);
5785
5786
5787 if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR) ||
5788 header->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC)) {
5789 memset((void *)raw_inode + EXT4_GOOD_OLD_INODE_SIZE +
5790 EXT4_I(inode)->i_extra_isize, 0,
5791 new_extra_isize - EXT4_I(inode)->i_extra_isize);
5792 EXT4_I(inode)->i_extra_isize = new_extra_isize;
5793 return 0;
5794 }
5795
5796
5797 error = ext4_expand_extra_isize_ea(inode, new_extra_isize,
5798 raw_inode, handle);
5799 if (error) {
5800
5801
5802
5803 *no_expand = 1;
5804 }
5805
5806 return error;
5807}
5808
5809
5810
5811
5812
5813static int ext4_try_to_expand_extra_isize(struct inode *inode,
5814 unsigned int new_extra_isize,
5815 struct ext4_iloc iloc,
5816 handle_t *handle)
5817{
5818 int no_expand;
5819 int error;
5820
5821 if (ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND))
5822 return -EOVERFLOW;
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833 if (ext4_journal_extend(handle,
5834 EXT4_DATA_TRANS_BLOCKS(inode->i_sb), 0) != 0)
5835 return -ENOSPC;
5836
5837 if (ext4_write_trylock_xattr(inode, &no_expand) == 0)
5838 return -EBUSY;
5839
5840 error = __ext4_expand_extra_isize(inode, new_extra_isize, &iloc,
5841 handle, &no_expand);
5842 ext4_write_unlock_xattr(inode, &no_expand);
5843
5844 return error;
5845}
5846
5847int ext4_expand_extra_isize(struct inode *inode,
5848 unsigned int new_extra_isize,
5849 struct ext4_iloc *iloc)
5850{
5851 handle_t *handle;
5852 int no_expand;
5853 int error, rc;
5854
5855 if (ext4_test_inode_state(inode, EXT4_STATE_NO_EXPAND)) {
5856 brelse(iloc->bh);
5857 return -EOVERFLOW;
5858 }
5859
5860 handle = ext4_journal_start(inode, EXT4_HT_INODE,
5861 EXT4_DATA_TRANS_BLOCKS(inode->i_sb));
5862 if (IS_ERR(handle)) {
5863 error = PTR_ERR(handle);
5864 brelse(iloc->bh);
5865 return error;
5866 }
5867
5868 ext4_write_lock_xattr(inode, &no_expand);
5869
5870 BUFFER_TRACE(iloc->bh, "get_write_access");
5871 error = ext4_journal_get_write_access(handle, iloc->bh);
5872 if (error) {
5873 brelse(iloc->bh);
5874 goto out_unlock;
5875 }
5876
5877 error = __ext4_expand_extra_isize(inode, new_extra_isize, iloc,
5878 handle, &no_expand);
5879
5880 rc = ext4_mark_iloc_dirty(handle, inode, iloc);
5881 if (!error)
5882 error = rc;
5883
5884out_unlock:
5885 ext4_write_unlock_xattr(inode, &no_expand);
5886 ext4_journal_stop(handle);
5887 return error;
5888}
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903int __ext4_mark_inode_dirty(handle_t *handle, struct inode *inode,
5904 const char *func, unsigned int line)
5905{
5906 struct ext4_iloc iloc;
5907 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
5908 int err;
5909
5910 might_sleep();
5911 trace_ext4_mark_inode_dirty(inode, _RET_IP_);
5912 err = ext4_reserve_inode_write(handle, inode, &iloc);
5913 if (err)
5914 goto out;
5915
5916 if (EXT4_I(inode)->i_extra_isize < sbi->s_want_extra_isize)
5917 ext4_try_to_expand_extra_isize(inode, sbi->s_want_extra_isize,
5918 iloc, handle);
5919
5920 err = ext4_mark_iloc_dirty(handle, inode, &iloc);
5921out:
5922 if (unlikely(err))
5923 ext4_error_inode_err(inode, func, line, 0, err,
5924 "mark_inode_dirty error");
5925 return err;
5926}
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942void ext4_dirty_inode(struct inode *inode, int flags)
5943{
5944 handle_t *handle;
5945
5946 handle = ext4_journal_start(inode, EXT4_HT_INODE, 2);
5947 if (IS_ERR(handle))
5948 return;
5949 ext4_mark_inode_dirty(handle, inode);
5950 ext4_journal_stop(handle);
5951}
5952
5953int ext4_change_inode_journal_flag(struct inode *inode, int val)
5954{
5955 journal_t *journal;
5956 handle_t *handle;
5957 int err;
5958 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970 journal = EXT4_JOURNAL(inode);
5971 if (!journal)
5972 return 0;
5973 if (is_journal_aborted(journal))
5974 return -EROFS;
5975
5976
5977 inode_dio_wait(inode);
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987 if (val) {
5988 down_write(&EXT4_I(inode)->i_mmap_sem);
5989 err = filemap_write_and_wait(inode->i_mapping);
5990 if (err < 0) {
5991 up_write(&EXT4_I(inode)->i_mmap_sem);
5992 return err;
5993 }
5994 }
5995
5996 percpu_down_write(&sbi->s_writepages_rwsem);
5997 jbd2_journal_lock_updates(journal);
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007 if (val)
6008 ext4_set_inode_flag(inode, EXT4_INODE_JOURNAL_DATA);
6009 else {
6010 err = jbd2_journal_flush(journal);
6011 if (err < 0) {
6012 jbd2_journal_unlock_updates(journal);
6013 percpu_up_write(&sbi->s_writepages_rwsem);
6014 return err;
6015 }
6016 ext4_clear_inode_flag(inode, EXT4_INODE_JOURNAL_DATA);
6017 }
6018 ext4_set_aops(inode);
6019
6020 jbd2_journal_unlock_updates(journal);
6021 percpu_up_write(&sbi->s_writepages_rwsem);
6022
6023 if (val)
6024 up_write(&EXT4_I(inode)->i_mmap_sem);
6025
6026
6027
6028 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1);
6029 if (IS_ERR(handle))
6030 return PTR_ERR(handle);
6031
6032 ext4_fc_mark_ineligible(inode->i_sb,
6033 EXT4_FC_REASON_JOURNAL_FLAG_CHANGE);
6034 err = ext4_mark_inode_dirty(handle, inode);
6035 ext4_handle_sync(handle);
6036 ext4_journal_stop(handle);
6037 ext4_std_error(inode->i_sb, err);
6038
6039 return err;
6040}
6041
6042static int ext4_bh_unmapped(handle_t *handle, struct buffer_head *bh)
6043{
6044 return !buffer_mapped(bh);
6045}
6046
6047vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf)
6048{
6049 struct vm_area_struct *vma = vmf->vma;
6050 struct page *page = vmf->page;
6051 loff_t size;
6052 unsigned long len;
6053 int err;
6054 vm_fault_t ret;
6055 struct file *file = vma->vm_file;
6056 struct inode *inode = file_inode(file);
6057 struct address_space *mapping = inode->i_mapping;
6058 handle_t *handle;
6059 get_block_t *get_block;
6060 int retries = 0;
6061
6062 if (unlikely(IS_IMMUTABLE(inode)))
6063 return VM_FAULT_SIGBUS;
6064
6065 sb_start_pagefault(inode->i_sb);
6066 file_update_time(vma->vm_file);
6067
6068 down_read(&EXT4_I(inode)->i_mmap_sem);
6069
6070 err = ext4_convert_inline_data(inode);
6071 if (err)
6072 goto out_ret;
6073
6074
6075
6076
6077
6078
6079
6080 if (ext4_should_journal_data(inode))
6081 goto retry_alloc;
6082
6083
6084 if (test_opt(inode->i_sb, DELALLOC) &&
6085 !ext4_nonda_switch(inode->i_sb)) {
6086 do {
6087 err = block_page_mkwrite(vma, vmf,
6088 ext4_da_get_block_prep);
6089 } while (err == -ENOSPC &&
6090 ext4_should_retry_alloc(inode->i_sb, &retries));
6091 goto out_ret;
6092 }
6093
6094 lock_page(page);
6095 size = i_size_read(inode);
6096
6097 if (page->mapping != mapping || page_offset(page) > size) {
6098 unlock_page(page);
6099 ret = VM_FAULT_NOPAGE;
6100 goto out;
6101 }
6102
6103 if (page->index == size >> PAGE_SHIFT)
6104 len = size & ~PAGE_MASK;
6105 else
6106 len = PAGE_SIZE;
6107
6108
6109
6110
6111
6112
6113
6114 if (page_has_buffers(page)) {
6115 if (!ext4_walk_page_buffers(NULL, page_buffers(page),
6116 0, len, NULL,
6117 ext4_bh_unmapped)) {
6118
6119 wait_for_stable_page(page);
6120 ret = VM_FAULT_LOCKED;
6121 goto out;
6122 }
6123 }
6124 unlock_page(page);
6125
6126 if (ext4_should_dioread_nolock(inode))
6127 get_block = ext4_get_block_unwritten;
6128 else
6129 get_block = ext4_get_block;
6130retry_alloc:
6131 handle = ext4_journal_start(inode, EXT4_HT_WRITE_PAGE,
6132 ext4_writepage_trans_blocks(inode));
6133 if (IS_ERR(handle)) {
6134 ret = VM_FAULT_SIGBUS;
6135 goto out;
6136 }
6137
6138
6139
6140
6141
6142 if (!ext4_should_journal_data(inode)) {
6143 err = block_page_mkwrite(vma, vmf, get_block);
6144 } else {
6145 lock_page(page);
6146 size = i_size_read(inode);
6147
6148 if (page->mapping != mapping || page_offset(page) > size) {
6149 ret = VM_FAULT_NOPAGE;
6150 goto out_error;
6151 }
6152
6153 if (page->index == size >> PAGE_SHIFT)
6154 len = size & ~PAGE_MASK;
6155 else
6156 len = PAGE_SIZE;
6157
6158 err = __block_write_begin(page, 0, len, ext4_get_block);
6159 if (!err) {
6160 ret = VM_FAULT_SIGBUS;
6161 if (ext4_walk_page_buffers(handle, page_buffers(page),
6162 0, len, NULL, do_journal_get_write_access))
6163 goto out_error;
6164 if (ext4_walk_page_buffers(handle, page_buffers(page),
6165 0, len, NULL, write_end_fn))
6166 goto out_error;
6167 if (ext4_jbd2_inode_add_write(handle, inode,
6168 page_offset(page), len))
6169 goto out_error;
6170 ext4_set_inode_state(inode, EXT4_STATE_JDATA);
6171 } else {
6172 unlock_page(page);
6173 }
6174 }
6175 ext4_journal_stop(handle);
6176 if (err == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
6177 goto retry_alloc;
6178out_ret:
6179 ret = block_page_mkwrite_return(err);
6180out:
6181 up_read(&EXT4_I(inode)->i_mmap_sem);
6182 sb_end_pagefault(inode->i_sb);
6183 return ret;
6184out_error:
6185 unlock_page(page);
6186 ext4_journal_stop(handle);
6187 goto out;
6188}
6189
6190vm_fault_t ext4_filemap_fault(struct vm_fault *vmf)
6191{
6192 struct inode *inode = file_inode(vmf->vma->vm_file);
6193 vm_fault_t ret;
6194
6195 down_read(&EXT4_I(inode)->i_mmap_sem);
6196 ret = filemap_fault(vmf);
6197 up_read(&EXT4_I(inode)->i_mmap_sem);
6198
6199 return ret;
6200}
6201