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