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