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