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