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