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