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