1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <linux/time.h>
26#include <linux/highuid.h>
27#include <linux/pagemap.h>
28#include <linux/dax.h>
29#include <linux/blkdev.h>
30#include <linux/quotaops.h>
31#include <linux/writeback.h>
32#include <linux/buffer_head.h>
33#include <linux/mpage.h>
34#include <linux/fiemap.h>
35#include <linux/iomap.h>
36#include <linux/namei.h>
37#include <linux/uio.h>
38#include "ext2.h"
39#include "acl.h"
40#include "xattr.h"
41
42static int __ext2_write_inode(struct inode *inode, int do_sync);
43
44
45
46
47static inline int ext2_inode_is_fast_symlink(struct inode *inode)
48{
49 int ea_blocks = EXT2_I(inode)->i_file_acl ?
50 (inode->i_sb->s_blocksize >> 9) : 0;
51
52 return (S_ISLNK(inode->i_mode) &&
53 inode->i_blocks - ea_blocks == 0);
54}
55
56static void ext2_truncate_blocks(struct inode *inode, loff_t offset);
57
58static void ext2_write_failed(struct address_space *mapping, loff_t to)
59{
60 struct inode *inode = mapping->host;
61
62 if (to > inode->i_size) {
63 truncate_pagecache(inode, inode->i_size);
64 ext2_truncate_blocks(inode, inode->i_size);
65 }
66}
67
68
69
70
71void ext2_evict_inode(struct inode * inode)
72{
73 struct ext2_block_alloc_info *rsv;
74 int want_delete = 0;
75
76 if (!inode->i_nlink && !is_bad_inode(inode)) {
77 want_delete = 1;
78 dquot_initialize(inode);
79 } else {
80 dquot_drop(inode);
81 }
82
83 truncate_inode_pages_final(&inode->i_data);
84
85 if (want_delete) {
86 sb_start_intwrite(inode->i_sb);
87
88 EXT2_I(inode)->i_dtime = get_seconds();
89 mark_inode_dirty(inode);
90 __ext2_write_inode(inode, inode_needs_sync(inode));
91
92 inode->i_size = 0;
93 if (inode->i_blocks)
94 ext2_truncate_blocks(inode, 0);
95 ext2_xattr_delete_inode(inode);
96 }
97
98 invalidate_inode_buffers(inode);
99 clear_inode(inode);
100
101 ext2_discard_reservation(inode);
102 rsv = EXT2_I(inode)->i_block_alloc_info;
103 EXT2_I(inode)->i_block_alloc_info = NULL;
104 if (unlikely(rsv))
105 kfree(rsv);
106
107 if (want_delete) {
108 ext2_free_inode(inode);
109 sb_end_intwrite(inode->i_sb);
110 }
111}
112
113typedef struct {
114 __le32 *p;
115 __le32 key;
116 struct buffer_head *bh;
117} Indirect;
118
119static inline void add_chain(Indirect *p, struct buffer_head *bh, __le32 *v)
120{
121 p->key = *(p->p = v);
122 p->bh = bh;
123}
124
125static inline int verify_chain(Indirect *from, Indirect *to)
126{
127 while (from <= to && from->key == *from->p)
128 from++;
129 return (from > to);
130}
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162static int ext2_block_to_path(struct inode *inode,
163 long i_block, int offsets[4], int *boundary)
164{
165 int ptrs = EXT2_ADDR_PER_BLOCK(inode->i_sb);
166 int ptrs_bits = EXT2_ADDR_PER_BLOCK_BITS(inode->i_sb);
167 const long direct_blocks = EXT2_NDIR_BLOCKS,
168 indirect_blocks = ptrs,
169 double_blocks = (1 << (ptrs_bits * 2));
170 int n = 0;
171 int final = 0;
172
173 if (i_block < 0) {
174 ext2_msg(inode->i_sb, KERN_WARNING,
175 "warning: %s: block < 0", __func__);
176 } else if (i_block < direct_blocks) {
177 offsets[n++] = i_block;
178 final = direct_blocks;
179 } else if ( (i_block -= direct_blocks) < indirect_blocks) {
180 offsets[n++] = EXT2_IND_BLOCK;
181 offsets[n++] = i_block;
182 final = ptrs;
183 } else if ((i_block -= indirect_blocks) < double_blocks) {
184 offsets[n++] = EXT2_DIND_BLOCK;
185 offsets[n++] = i_block >> ptrs_bits;
186 offsets[n++] = i_block & (ptrs - 1);
187 final = ptrs;
188 } else if (((i_block -= double_blocks) >> (ptrs_bits * 2)) < ptrs) {
189 offsets[n++] = EXT2_TIND_BLOCK;
190 offsets[n++] = i_block >> (ptrs_bits * 2);
191 offsets[n++] = (i_block >> ptrs_bits) & (ptrs - 1);
192 offsets[n++] = i_block & (ptrs - 1);
193 final = ptrs;
194 } else {
195 ext2_msg(inode->i_sb, KERN_WARNING,
196 "warning: %s: block is too big", __func__);
197 }
198 if (boundary)
199 *boundary = final - 1 - (i_block & (ptrs - 1));
200
201 return n;
202}
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233static Indirect *ext2_get_branch(struct inode *inode,
234 int depth,
235 int *offsets,
236 Indirect chain[4],
237 int *err)
238{
239 struct super_block *sb = inode->i_sb;
240 Indirect *p = chain;
241 struct buffer_head *bh;
242
243 *err = 0;
244
245 add_chain (chain, NULL, EXT2_I(inode)->i_data + *offsets);
246 if (!p->key)
247 goto no_block;
248 while (--depth) {
249 bh = sb_bread(sb, le32_to_cpu(p->key));
250 if (!bh)
251 goto failure;
252 read_lock(&EXT2_I(inode)->i_meta_lock);
253 if (!verify_chain(chain, p))
254 goto changed;
255 add_chain(++p, bh, (__le32*)bh->b_data + *++offsets);
256 read_unlock(&EXT2_I(inode)->i_meta_lock);
257 if (!p->key)
258 goto no_block;
259 }
260 return NULL;
261
262changed:
263 read_unlock(&EXT2_I(inode)->i_meta_lock);
264 brelse(bh);
265 *err = -EAGAIN;
266 goto no_block;
267failure:
268 *err = -EIO;
269no_block:
270 return p;
271}
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293static ext2_fsblk_t ext2_find_near(struct inode *inode, Indirect *ind)
294{
295 struct ext2_inode_info *ei = EXT2_I(inode);
296 __le32 *start = ind->bh ? (__le32 *) ind->bh->b_data : ei->i_data;
297 __le32 *p;
298 ext2_fsblk_t bg_start;
299 ext2_fsblk_t colour;
300
301
302 for (p = ind->p - 1; p >= start; p--)
303 if (*p)
304 return le32_to_cpu(*p);
305
306
307 if (ind->bh)
308 return ind->bh->b_blocknr;
309
310
311
312
313
314 bg_start = ext2_group_first_block_no(inode->i_sb, ei->i_block_group);
315 colour = (current->pid % 16) *
316 (EXT2_BLOCKS_PER_GROUP(inode->i_sb) / 16);
317 return bg_start + colour;
318}
319
320
321
322
323
324
325
326
327
328
329static inline ext2_fsblk_t ext2_find_goal(struct inode *inode, long block,
330 Indirect *partial)
331{
332 struct ext2_block_alloc_info *block_i;
333
334 block_i = EXT2_I(inode)->i_block_alloc_info;
335
336
337
338
339
340 if (block_i && (block == block_i->last_alloc_logical_block + 1)
341 && (block_i->last_alloc_physical_block != 0)) {
342 return block_i->last_alloc_physical_block + 1;
343 }
344
345 return ext2_find_near(inode, partial);
346}
347
348
349
350
351
352
353
354
355
356
357
358
359
360static int
361ext2_blks_to_allocate(Indirect * branch, int k, unsigned long blks,
362 int blocks_to_boundary)
363{
364 unsigned long count = 0;
365
366
367
368
369
370 if (k > 0) {
371
372 if (blks < blocks_to_boundary + 1)
373 count += blks;
374 else
375 count += blocks_to_boundary + 1;
376 return count;
377 }
378
379 count++;
380 while (count < blks && count <= blocks_to_boundary
381 && le32_to_cpu(*(branch[0].p + count)) == 0) {
382 count++;
383 }
384 return count;
385}
386
387
388
389
390
391
392
393
394
395
396
397static int ext2_alloc_blocks(struct inode *inode,
398 ext2_fsblk_t goal, int indirect_blks, int blks,
399 ext2_fsblk_t new_blocks[4], int *err)
400{
401 int target, i;
402 unsigned long count = 0;
403 int index = 0;
404 ext2_fsblk_t current_block = 0;
405 int ret = 0;
406
407
408
409
410
411
412
413
414
415 target = blks + indirect_blks;
416
417 while (1) {
418 count = target;
419
420 current_block = ext2_new_blocks(inode,goal,&count,err);
421 if (*err)
422 goto failed_out;
423
424 target -= count;
425
426 while (index < indirect_blks && count) {
427 new_blocks[index++] = current_block++;
428 count--;
429 }
430
431 if (count > 0)
432 break;
433 }
434
435
436 new_blocks[index] = current_block;
437
438
439 ret = count;
440 *err = 0;
441 return ret;
442failed_out:
443 for (i = 0; i <index; i++)
444 ext2_free_blocks(inode, new_blocks[i], 1);
445 if (index)
446 mark_inode_dirty(inode);
447 return ret;
448}
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475static int ext2_alloc_branch(struct inode *inode,
476 int indirect_blks, int *blks, ext2_fsblk_t goal,
477 int *offsets, Indirect *branch)
478{
479 int blocksize = inode->i_sb->s_blocksize;
480 int i, n = 0;
481 int err = 0;
482 struct buffer_head *bh;
483 int num;
484 ext2_fsblk_t new_blocks[4];
485 ext2_fsblk_t current_block;
486
487 num = ext2_alloc_blocks(inode, goal, indirect_blks,
488 *blks, new_blocks, &err);
489 if (err)
490 return err;
491
492 branch[0].key = cpu_to_le32(new_blocks[0]);
493
494
495
496 for (n = 1; n <= indirect_blks; n++) {
497
498
499
500
501
502 bh = sb_getblk(inode->i_sb, new_blocks[n-1]);
503 if (unlikely(!bh)) {
504 err = -ENOMEM;
505 goto failed;
506 }
507 branch[n].bh = bh;
508 lock_buffer(bh);
509 memset(bh->b_data, 0, blocksize);
510 branch[n].p = (__le32 *) bh->b_data + offsets[n];
511 branch[n].key = cpu_to_le32(new_blocks[n]);
512 *branch[n].p = branch[n].key;
513 if ( n == indirect_blks) {
514 current_block = new_blocks[n];
515
516
517
518
519
520 for (i=1; i < num; i++)
521 *(branch[n].p + i) = cpu_to_le32(++current_block);
522 }
523 set_buffer_uptodate(bh);
524 unlock_buffer(bh);
525 mark_buffer_dirty_inode(bh, inode);
526
527
528
529
530 if (S_ISDIR(inode->i_mode) && IS_DIRSYNC(inode))
531 sync_dirty_buffer(bh);
532 }
533 *blks = num;
534 return err;
535
536failed:
537 for (i = 1; i < n; i++)
538 bforget(branch[i].bh);
539 for (i = 0; i < indirect_blks; i++)
540 ext2_free_blocks(inode, new_blocks[i], 1);
541 ext2_free_blocks(inode, new_blocks[i], num);
542 return err;
543}
544
545
546
547
548
549
550
551
552
553
554
555
556
557static void ext2_splice_branch(struct inode *inode,
558 long block, Indirect *where, int num, int blks)
559{
560 int i;
561 struct ext2_block_alloc_info *block_i;
562 ext2_fsblk_t current_block;
563
564 block_i = EXT2_I(inode)->i_block_alloc_info;
565
566
567
568
569 *where->p = where->key;
570
571
572
573
574
575 if (num == 0 && blks > 1) {
576 current_block = le32_to_cpu(where->key) + 1;
577 for (i = 1; i < blks; i++)
578 *(where->p + i ) = cpu_to_le32(current_block++);
579 }
580
581
582
583
584
585
586 if (block_i) {
587 block_i->last_alloc_logical_block = block + blks - 1;
588 block_i->last_alloc_physical_block =
589 le32_to_cpu(where[num].key) + blks - 1;
590 }
591
592
593
594
595 if (where->bh)
596 mark_buffer_dirty_inode(where->bh, inode);
597
598 inode->i_ctime = current_time(inode);
599 mark_inode_dirty(inode);
600}
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620static int ext2_get_blocks(struct inode *inode,
621 sector_t iblock, unsigned long maxblocks,
622 u32 *bno, bool *new, bool *boundary,
623 int create)
624{
625 int err;
626 int offsets[4];
627 Indirect chain[4];
628 Indirect *partial;
629 ext2_fsblk_t goal;
630 int indirect_blks;
631 int blocks_to_boundary = 0;
632 int depth;
633 struct ext2_inode_info *ei = EXT2_I(inode);
634 int count = 0;
635 ext2_fsblk_t first_block = 0;
636
637 BUG_ON(maxblocks == 0);
638
639 depth = ext2_block_to_path(inode,iblock,offsets,&blocks_to_boundary);
640
641 if (depth == 0)
642 return -EIO;
643
644 partial = ext2_get_branch(inode, depth, offsets, chain, &err);
645
646 if (!partial) {
647 first_block = le32_to_cpu(chain[depth - 1].key);
648 count++;
649
650 while (count < maxblocks && count <= blocks_to_boundary) {
651 ext2_fsblk_t blk;
652
653 if (!verify_chain(chain, chain + depth - 1)) {
654
655
656
657
658
659
660 err = -EAGAIN;
661 count = 0;
662 partial = chain + depth - 1;
663 break;
664 }
665 blk = le32_to_cpu(*(chain[depth-1].p + count));
666 if (blk == first_block + count)
667 count++;
668 else
669 break;
670 }
671 if (err != -EAGAIN)
672 goto got_it;
673 }
674
675
676 if (!create || err == -EIO)
677 goto cleanup;
678
679 mutex_lock(&ei->truncate_mutex);
680
681
682
683
684
685
686
687
688
689
690
691
692 if (err == -EAGAIN || !verify_chain(chain, partial)) {
693 while (partial > chain) {
694 brelse(partial->bh);
695 partial--;
696 }
697 partial = ext2_get_branch(inode, depth, offsets, chain, &err);
698 if (!partial) {
699 count++;
700 mutex_unlock(&ei->truncate_mutex);
701 if (err)
702 goto cleanup;
703 goto got_it;
704 }
705 }
706
707
708
709
710
711 if (S_ISREG(inode->i_mode) && (!ei->i_block_alloc_info))
712 ext2_init_block_alloc_info(inode);
713
714 goal = ext2_find_goal(inode, iblock, partial);
715
716
717 indirect_blks = (chain + depth) - partial - 1;
718
719
720
721
722 count = ext2_blks_to_allocate(partial, indirect_blks,
723 maxblocks, blocks_to_boundary);
724
725
726
727 err = ext2_alloc_branch(inode, indirect_blks, &count, goal,
728 offsets + (partial - chain), partial);
729
730 if (err) {
731 mutex_unlock(&ei->truncate_mutex);
732 goto cleanup;
733 }
734
735 if (IS_DAX(inode)) {
736
737
738
739
740 clean_bdev_aliases(inode->i_sb->s_bdev,
741 le32_to_cpu(chain[depth-1].key),
742 count);
743
744
745
746
747
748 err = sb_issue_zeroout(inode->i_sb,
749 le32_to_cpu(chain[depth-1].key), count,
750 GFP_NOFS);
751 if (err) {
752 mutex_unlock(&ei->truncate_mutex);
753 goto cleanup;
754 }
755 }
756 *new = true;
757
758 ext2_splice_branch(inode, iblock, partial, indirect_blks, count);
759 mutex_unlock(&ei->truncate_mutex);
760got_it:
761 if (count > blocks_to_boundary)
762 *boundary = true;
763 err = count;
764
765 partial = chain + depth - 1;
766cleanup:
767 while (partial > chain) {
768 brelse(partial->bh);
769 partial--;
770 }
771 if (err > 0)
772 *bno = le32_to_cpu(chain[depth-1].key);
773 return err;
774}
775
776int ext2_get_block(struct inode *inode, sector_t iblock,
777 struct buffer_head *bh_result, int create)
778{
779 unsigned max_blocks = bh_result->b_size >> inode->i_blkbits;
780 bool new = false, boundary = false;
781 u32 bno;
782 int ret;
783
784 ret = ext2_get_blocks(inode, iblock, max_blocks, &bno, &new, &boundary,
785 create);
786 if (ret <= 0)
787 return ret;
788
789 map_bh(bh_result, inode->i_sb, bno);
790 bh_result->b_size = (ret << inode->i_blkbits);
791 if (new)
792 set_buffer_new(bh_result);
793 if (boundary)
794 set_buffer_boundary(bh_result);
795 return 0;
796
797}
798
799#ifdef CONFIG_FS_DAX
800static int ext2_iomap_begin(struct inode *inode, loff_t offset, loff_t length,
801 unsigned flags, struct iomap *iomap)
802{
803 struct block_device *bdev;
804 unsigned int blkbits = inode->i_blkbits;
805 unsigned long first_block = offset >> blkbits;
806 unsigned long max_blocks = (length + (1 << blkbits) - 1) >> blkbits;
807 bool new = false, boundary = false;
808 u32 bno;
809 int ret;
810
811 ret = ext2_get_blocks(inode, first_block, max_blocks,
812 &bno, &new, &boundary, flags & IOMAP_WRITE);
813 if (ret < 0)
814 return ret;
815
816 iomap->flags = 0;
817 bdev = inode->i_sb->s_bdev;
818 iomap->bdev = bdev;
819 iomap->offset = (u64)first_block << blkbits;
820 if (blk_queue_dax(bdev->bd_queue))
821 iomap->dax_dev = fs_dax_get_by_host(bdev->bd_disk->disk_name);
822 else
823 iomap->dax_dev = NULL;
824
825 if (ret == 0) {
826 iomap->type = IOMAP_HOLE;
827 iomap->blkno = IOMAP_NULL_BLOCK;
828 iomap->length = 1 << blkbits;
829 } else {
830 iomap->type = IOMAP_MAPPED;
831 iomap->blkno = (sector_t)bno << (blkbits - 9);
832 iomap->length = (u64)ret << blkbits;
833 iomap->flags |= IOMAP_F_MERGED;
834 }
835
836 if (new)
837 iomap->flags |= IOMAP_F_NEW;
838 return 0;
839}
840
841static int
842ext2_iomap_end(struct inode *inode, loff_t offset, loff_t length,
843 ssize_t written, unsigned flags, struct iomap *iomap)
844{
845 fs_put_dax(iomap->dax_dev);
846 if (iomap->type == IOMAP_MAPPED &&
847 written < length &&
848 (flags & IOMAP_WRITE))
849 ext2_write_failed(inode->i_mapping, offset + length);
850 return 0;
851}
852
853const struct iomap_ops ext2_iomap_ops = {
854 .iomap_begin = ext2_iomap_begin,
855 .iomap_end = ext2_iomap_end,
856};
857#else
858
859const struct iomap_ops ext2_iomap_ops;
860#endif
861
862int ext2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
863 u64 start, u64 len)
864{
865 return generic_block_fiemap(inode, fieinfo, start, len,
866 ext2_get_block);
867}
868
869static int ext2_writepage(struct page *page, struct writeback_control *wbc)
870{
871 return block_write_full_page(page, ext2_get_block, wbc);
872}
873
874static int ext2_readpage(struct file *file, struct page *page)
875{
876 return mpage_readpage(page, ext2_get_block);
877}
878
879static int
880ext2_readpages(struct file *file, struct address_space *mapping,
881 struct list_head *pages, unsigned nr_pages)
882{
883 return mpage_readpages(mapping, pages, nr_pages, ext2_get_block);
884}
885
886static int
887ext2_write_begin(struct file *file, struct address_space *mapping,
888 loff_t pos, unsigned len, unsigned flags,
889 struct page **pagep, void **fsdata)
890{
891 int ret;
892
893 ret = block_write_begin(mapping, pos, len, flags, pagep,
894 ext2_get_block);
895 if (ret < 0)
896 ext2_write_failed(mapping, pos + len);
897 return ret;
898}
899
900static int ext2_write_end(struct file *file, struct address_space *mapping,
901 loff_t pos, unsigned len, unsigned copied,
902 struct page *page, void *fsdata)
903{
904 int ret;
905
906 ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata);
907 if (ret < len)
908 ext2_write_failed(mapping, pos + len);
909 return ret;
910}
911
912static int
913ext2_nobh_write_begin(struct file *file, struct address_space *mapping,
914 loff_t pos, unsigned len, unsigned flags,
915 struct page **pagep, void **fsdata)
916{
917 int ret;
918
919 ret = nobh_write_begin(mapping, pos, len, flags, pagep, fsdata,
920 ext2_get_block);
921 if (ret < 0)
922 ext2_write_failed(mapping, pos + len);
923 return ret;
924}
925
926static int ext2_nobh_writepage(struct page *page,
927 struct writeback_control *wbc)
928{
929 return nobh_writepage(page, ext2_get_block, wbc);
930}
931
932static sector_t ext2_bmap(struct address_space *mapping, sector_t block)
933{
934 return generic_block_bmap(mapping,block,ext2_get_block);
935}
936
937static ssize_t
938ext2_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
939{
940 struct file *file = iocb->ki_filp;
941 struct address_space *mapping = file->f_mapping;
942 struct inode *inode = mapping->host;
943 size_t count = iov_iter_count(iter);
944 loff_t offset = iocb->ki_pos;
945 ssize_t ret;
946
947 if (WARN_ON_ONCE(IS_DAX(inode)))
948 return -EIO;
949
950 ret = blockdev_direct_IO(iocb, inode, iter, ext2_get_block);
951 if (ret < 0 && iov_iter_rw(iter) == WRITE)
952 ext2_write_failed(mapping, offset + count);
953 return ret;
954}
955
956static int
957ext2_writepages(struct address_space *mapping, struct writeback_control *wbc)
958{
959#ifdef CONFIG_FS_DAX
960 if (dax_mapping(mapping)) {
961 return dax_writeback_mapping_range(mapping,
962 mapping->host->i_sb->s_bdev,
963 wbc);
964 }
965#endif
966
967 return mpage_writepages(mapping, wbc, ext2_get_block);
968}
969
970const struct address_space_operations ext2_aops = {
971 .readpage = ext2_readpage,
972 .readpages = ext2_readpages,
973 .writepage = ext2_writepage,
974 .write_begin = ext2_write_begin,
975 .write_end = ext2_write_end,
976 .bmap = ext2_bmap,
977 .direct_IO = ext2_direct_IO,
978 .writepages = ext2_writepages,
979 .migratepage = buffer_migrate_page,
980 .is_partially_uptodate = block_is_partially_uptodate,
981 .error_remove_page = generic_error_remove_page,
982};
983
984const struct address_space_operations ext2_nobh_aops = {
985 .readpage = ext2_readpage,
986 .readpages = ext2_readpages,
987 .writepage = ext2_nobh_writepage,
988 .write_begin = ext2_nobh_write_begin,
989 .write_end = nobh_write_end,
990 .bmap = ext2_bmap,
991 .direct_IO = ext2_direct_IO,
992 .writepages = ext2_writepages,
993 .migratepage = buffer_migrate_page,
994 .error_remove_page = generic_error_remove_page,
995};
996
997
998
999
1000
1001
1002static inline int all_zeroes(__le32 *p, __le32 *q)
1003{
1004 while (p < q)
1005 if (*p++)
1006 return 0;
1007 return 1;
1008}
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044static Indirect *ext2_find_shared(struct inode *inode,
1045 int depth,
1046 int offsets[4],
1047 Indirect chain[4],
1048 __le32 *top)
1049{
1050 Indirect *partial, *p;
1051 int k, err;
1052
1053 *top = 0;
1054 for (k = depth; k > 1 && !offsets[k-1]; k--)
1055 ;
1056 partial = ext2_get_branch(inode, k, offsets, chain, &err);
1057 if (!partial)
1058 partial = chain + k-1;
1059
1060
1061
1062
1063 write_lock(&EXT2_I(inode)->i_meta_lock);
1064 if (!partial->key && *partial->p) {
1065 write_unlock(&EXT2_I(inode)->i_meta_lock);
1066 goto no_top;
1067 }
1068 for (p=partial; p>chain && all_zeroes((__le32*)p->bh->b_data,p->p); p--)
1069 ;
1070
1071
1072
1073
1074
1075
1076 if (p == chain + k - 1 && p > chain) {
1077 p->p--;
1078 } else {
1079 *top = *p->p;
1080 *p->p = 0;
1081 }
1082 write_unlock(&EXT2_I(inode)->i_meta_lock);
1083
1084 while(partial > p)
1085 {
1086 brelse(partial->bh);
1087 partial--;
1088 }
1089no_top:
1090 return partial;
1091}
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103static inline void ext2_free_data(struct inode *inode, __le32 *p, __le32 *q)
1104{
1105 unsigned long block_to_free = 0, count = 0;
1106 unsigned long nr;
1107
1108 for ( ; p < q ; p++) {
1109 nr = le32_to_cpu(*p);
1110 if (nr) {
1111 *p = 0;
1112
1113 if (count == 0)
1114 goto free_this;
1115 else if (block_to_free == nr - count)
1116 count++;
1117 else {
1118 ext2_free_blocks (inode, block_to_free, count);
1119 mark_inode_dirty(inode);
1120 free_this:
1121 block_to_free = nr;
1122 count = 1;
1123 }
1124 }
1125 }
1126 if (count > 0) {
1127 ext2_free_blocks (inode, block_to_free, count);
1128 mark_inode_dirty(inode);
1129 }
1130}
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143static void ext2_free_branches(struct inode *inode, __le32 *p, __le32 *q, int depth)
1144{
1145 struct buffer_head * bh;
1146 unsigned long nr;
1147
1148 if (depth--) {
1149 int addr_per_block = EXT2_ADDR_PER_BLOCK(inode->i_sb);
1150 for ( ; p < q ; p++) {
1151 nr = le32_to_cpu(*p);
1152 if (!nr)
1153 continue;
1154 *p = 0;
1155 bh = sb_bread(inode->i_sb, nr);
1156
1157
1158
1159
1160 if (!bh) {
1161 ext2_error(inode->i_sb, "ext2_free_branches",
1162 "Read failure, inode=%ld, block=%ld",
1163 inode->i_ino, nr);
1164 continue;
1165 }
1166 ext2_free_branches(inode,
1167 (__le32*)bh->b_data,
1168 (__le32*)bh->b_data + addr_per_block,
1169 depth);
1170 bforget(bh);
1171 ext2_free_blocks(inode, nr, 1);
1172 mark_inode_dirty(inode);
1173 }
1174 } else
1175 ext2_free_data(inode, p, q);
1176}
1177
1178
1179static void __ext2_truncate_blocks(struct inode *inode, loff_t offset)
1180{
1181 __le32 *i_data = EXT2_I(inode)->i_data;
1182 struct ext2_inode_info *ei = EXT2_I(inode);
1183 int addr_per_block = EXT2_ADDR_PER_BLOCK(inode->i_sb);
1184 int offsets[4];
1185 Indirect chain[4];
1186 Indirect *partial;
1187 __le32 nr = 0;
1188 int n;
1189 long iblock;
1190 unsigned blocksize;
1191 blocksize = inode->i_sb->s_blocksize;
1192 iblock = (offset + blocksize-1) >> EXT2_BLOCK_SIZE_BITS(inode->i_sb);
1193
1194#ifdef CONFIG_FS_DAX
1195 WARN_ON(!rwsem_is_locked(&ei->dax_sem));
1196#endif
1197
1198 n = ext2_block_to_path(inode, iblock, offsets, NULL);
1199 if (n == 0)
1200 return;
1201
1202
1203
1204
1205
1206 mutex_lock(&ei->truncate_mutex);
1207
1208 if (n == 1) {
1209 ext2_free_data(inode, i_data+offsets[0],
1210 i_data + EXT2_NDIR_BLOCKS);
1211 goto do_indirects;
1212 }
1213
1214 partial = ext2_find_shared(inode, n, offsets, chain, &nr);
1215
1216 if (nr) {
1217 if (partial == chain)
1218 mark_inode_dirty(inode);
1219 else
1220 mark_buffer_dirty_inode(partial->bh, inode);
1221 ext2_free_branches(inode, &nr, &nr+1, (chain+n-1) - partial);
1222 }
1223
1224 while (partial > chain) {
1225 ext2_free_branches(inode,
1226 partial->p + 1,
1227 (__le32*)partial->bh->b_data+addr_per_block,
1228 (chain+n-1) - partial);
1229 mark_buffer_dirty_inode(partial->bh, inode);
1230 brelse (partial->bh);
1231 partial--;
1232 }
1233do_indirects:
1234
1235 switch (offsets[0]) {
1236 default:
1237 nr = i_data[EXT2_IND_BLOCK];
1238 if (nr) {
1239 i_data[EXT2_IND_BLOCK] = 0;
1240 mark_inode_dirty(inode);
1241 ext2_free_branches(inode, &nr, &nr+1, 1);
1242 }
1243 case EXT2_IND_BLOCK:
1244 nr = i_data[EXT2_DIND_BLOCK];
1245 if (nr) {
1246 i_data[EXT2_DIND_BLOCK] = 0;
1247 mark_inode_dirty(inode);
1248 ext2_free_branches(inode, &nr, &nr+1, 2);
1249 }
1250 case EXT2_DIND_BLOCK:
1251 nr = i_data[EXT2_TIND_BLOCK];
1252 if (nr) {
1253 i_data[EXT2_TIND_BLOCK] = 0;
1254 mark_inode_dirty(inode);
1255 ext2_free_branches(inode, &nr, &nr+1, 3);
1256 }
1257 case EXT2_TIND_BLOCK:
1258 ;
1259 }
1260
1261 ext2_discard_reservation(inode);
1262
1263 mutex_unlock(&ei->truncate_mutex);
1264}
1265
1266static void ext2_truncate_blocks(struct inode *inode, loff_t offset)
1267{
1268
1269
1270
1271
1272
1273
1274
1275
1276 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
1277 S_ISLNK(inode->i_mode)))
1278 return;
1279 if (ext2_inode_is_fast_symlink(inode))
1280 return;
1281 if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
1282 return;
1283
1284 dax_sem_down_write(EXT2_I(inode));
1285 __ext2_truncate_blocks(inode, offset);
1286 dax_sem_up_write(EXT2_I(inode));
1287}
1288
1289static int ext2_setsize(struct inode *inode, loff_t newsize)
1290{
1291 int error;
1292
1293 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
1294 S_ISLNK(inode->i_mode)))
1295 return -EINVAL;
1296 if (ext2_inode_is_fast_symlink(inode))
1297 return -EINVAL;
1298 if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
1299 return -EPERM;
1300
1301 inode_dio_wait(inode);
1302
1303 if (IS_DAX(inode)) {
1304 error = iomap_zero_range(inode, newsize,
1305 PAGE_ALIGN(newsize) - newsize, NULL,
1306 &ext2_iomap_ops);
1307 } else if (test_opt(inode->i_sb, NOBH))
1308 error = nobh_truncate_page(inode->i_mapping,
1309 newsize, ext2_get_block);
1310 else
1311 error = block_truncate_page(inode->i_mapping,
1312 newsize, ext2_get_block);
1313 if (error)
1314 return error;
1315
1316 dax_sem_down_write(EXT2_I(inode));
1317 truncate_setsize(inode, newsize);
1318 __ext2_truncate_blocks(inode, newsize);
1319 dax_sem_up_write(EXT2_I(inode));
1320
1321 inode->i_mtime = inode->i_ctime = current_time(inode);
1322 if (inode_needs_sync(inode)) {
1323 sync_mapping_buffers(inode->i_mapping);
1324 sync_inode_metadata(inode, 1);
1325 } else {
1326 mark_inode_dirty(inode);
1327 }
1328
1329 return 0;
1330}
1331
1332static struct ext2_inode *ext2_get_inode(struct super_block *sb, ino_t ino,
1333 struct buffer_head **p)
1334{
1335 struct buffer_head * bh;
1336 unsigned long block_group;
1337 unsigned long block;
1338 unsigned long offset;
1339 struct ext2_group_desc * gdp;
1340
1341 *p = NULL;
1342 if ((ino != EXT2_ROOT_INO && ino < EXT2_FIRST_INO(sb)) ||
1343 ino > le32_to_cpu(EXT2_SB(sb)->s_es->s_inodes_count))
1344 goto Einval;
1345
1346 block_group = (ino - 1) / EXT2_INODES_PER_GROUP(sb);
1347 gdp = ext2_get_group_desc(sb, block_group, NULL);
1348 if (!gdp)
1349 goto Egdp;
1350
1351
1352
1353 offset = ((ino - 1) % EXT2_INODES_PER_GROUP(sb)) * EXT2_INODE_SIZE(sb);
1354 block = le32_to_cpu(gdp->bg_inode_table) +
1355 (offset >> EXT2_BLOCK_SIZE_BITS(sb));
1356 if (!(bh = sb_bread(sb, block)))
1357 goto Eio;
1358
1359 *p = bh;
1360 offset &= (EXT2_BLOCK_SIZE(sb) - 1);
1361 return (struct ext2_inode *) (bh->b_data + offset);
1362
1363Einval:
1364 ext2_error(sb, "ext2_get_inode", "bad inode number: %lu",
1365 (unsigned long) ino);
1366 return ERR_PTR(-EINVAL);
1367Eio:
1368 ext2_error(sb, "ext2_get_inode",
1369 "unable to read inode block - inode=%lu, block=%lu",
1370 (unsigned long) ino, block);
1371Egdp:
1372 return ERR_PTR(-EIO);
1373}
1374
1375void ext2_set_inode_flags(struct inode *inode)
1376{
1377 unsigned int flags = EXT2_I(inode)->i_flags;
1378
1379 inode->i_flags &= ~(S_SYNC | S_APPEND | S_IMMUTABLE | S_NOATIME |
1380 S_DIRSYNC | S_DAX);
1381 if (flags & EXT2_SYNC_FL)
1382 inode->i_flags |= S_SYNC;
1383 if (flags & EXT2_APPEND_FL)
1384 inode->i_flags |= S_APPEND;
1385 if (flags & EXT2_IMMUTABLE_FL)
1386 inode->i_flags |= S_IMMUTABLE;
1387 if (flags & EXT2_NOATIME_FL)
1388 inode->i_flags |= S_NOATIME;
1389 if (flags & EXT2_DIRSYNC_FL)
1390 inode->i_flags |= S_DIRSYNC;
1391 if (test_opt(inode->i_sb, DAX) && S_ISREG(inode->i_mode))
1392 inode->i_flags |= S_DAX;
1393}
1394
1395struct inode *ext2_iget (struct super_block *sb, unsigned long ino)
1396{
1397 struct ext2_inode_info *ei;
1398 struct buffer_head * bh;
1399 struct ext2_inode *raw_inode;
1400 struct inode *inode;
1401 long ret = -EIO;
1402 int n;
1403 uid_t i_uid;
1404 gid_t i_gid;
1405
1406 inode = iget_locked(sb, ino);
1407 if (!inode)
1408 return ERR_PTR(-ENOMEM);
1409 if (!(inode->i_state & I_NEW))
1410 return inode;
1411
1412 ei = EXT2_I(inode);
1413 ei->i_block_alloc_info = NULL;
1414
1415 raw_inode = ext2_get_inode(inode->i_sb, ino, &bh);
1416 if (IS_ERR(raw_inode)) {
1417 ret = PTR_ERR(raw_inode);
1418 goto bad_inode;
1419 }
1420
1421 inode->i_mode = le16_to_cpu(raw_inode->i_mode);
1422 i_uid = (uid_t)le16_to_cpu(raw_inode->i_uid_low);
1423 i_gid = (gid_t)le16_to_cpu(raw_inode->i_gid_low);
1424 if (!(test_opt (inode->i_sb, NO_UID32))) {
1425 i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16;
1426 i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16;
1427 }
1428 i_uid_write(inode, i_uid);
1429 i_gid_write(inode, i_gid);
1430 set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));
1431 inode->i_size = le32_to_cpu(raw_inode->i_size);
1432 inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime);
1433 inode->i_ctime.tv_sec = (signed)le32_to_cpu(raw_inode->i_ctime);
1434 inode->i_mtime.tv_sec = (signed)le32_to_cpu(raw_inode->i_mtime);
1435 inode->i_atime.tv_nsec = inode->i_mtime.tv_nsec = inode->i_ctime.tv_nsec = 0;
1436 ei->i_dtime = le32_to_cpu(raw_inode->i_dtime);
1437
1438
1439
1440
1441
1442 if (inode->i_nlink == 0 && (inode->i_mode == 0 || ei->i_dtime)) {
1443
1444 brelse (bh);
1445 ret = -ESTALE;
1446 goto bad_inode;
1447 }
1448 inode->i_blocks = le32_to_cpu(raw_inode->i_blocks);
1449 ei->i_flags = le32_to_cpu(raw_inode->i_flags);
1450 ei->i_faddr = le32_to_cpu(raw_inode->i_faddr);
1451 ei->i_frag_no = raw_inode->i_frag;
1452 ei->i_frag_size = raw_inode->i_fsize;
1453 ei->i_file_acl = le32_to_cpu(raw_inode->i_file_acl);
1454 ei->i_dir_acl = 0;
1455
1456 if (ei->i_file_acl &&
1457 !ext2_data_block_valid(EXT2_SB(sb), ei->i_file_acl, 1)) {
1458 ext2_error(sb, "ext2_iget", "bad extended attribute block %u",
1459 ei->i_file_acl);
1460 brelse(bh);
1461 ret = -EFSCORRUPTED;
1462 goto bad_inode;
1463 }
1464
1465 if (S_ISREG(inode->i_mode))
1466 inode->i_size |= ((__u64)le32_to_cpu(raw_inode->i_size_high)) << 32;
1467 else
1468 ei->i_dir_acl = le32_to_cpu(raw_inode->i_dir_acl);
1469 if (i_size_read(inode) < 0) {
1470 ret = -EFSCORRUPTED;
1471 goto bad_inode;
1472 }
1473 ei->i_dtime = 0;
1474 inode->i_generation = le32_to_cpu(raw_inode->i_generation);
1475 ei->i_state = 0;
1476 ei->i_block_group = (ino - 1) / EXT2_INODES_PER_GROUP(inode->i_sb);
1477 ei->i_dir_start_lookup = 0;
1478
1479
1480
1481
1482
1483 for (n = 0; n < EXT2_N_BLOCKS; n++)
1484 ei->i_data[n] = raw_inode->i_block[n];
1485
1486 if (S_ISREG(inode->i_mode)) {
1487 inode->i_op = &ext2_file_inode_operations;
1488 if (test_opt(inode->i_sb, NOBH)) {
1489 inode->i_mapping->a_ops = &ext2_nobh_aops;
1490 inode->i_fop = &ext2_file_operations;
1491 } else {
1492 inode->i_mapping->a_ops = &ext2_aops;
1493 inode->i_fop = &ext2_file_operations;
1494 }
1495 } else if (S_ISDIR(inode->i_mode)) {
1496 inode->i_op = &ext2_dir_inode_operations;
1497 inode->i_fop = &ext2_dir_operations;
1498 if (test_opt(inode->i_sb, NOBH))
1499 inode->i_mapping->a_ops = &ext2_nobh_aops;
1500 else
1501 inode->i_mapping->a_ops = &ext2_aops;
1502 } else if (S_ISLNK(inode->i_mode)) {
1503 if (ext2_inode_is_fast_symlink(inode)) {
1504 inode->i_link = (char *)ei->i_data;
1505 inode->i_op = &ext2_fast_symlink_inode_operations;
1506 nd_terminate_link(ei->i_data, inode->i_size,
1507 sizeof(ei->i_data) - 1);
1508 } else {
1509 inode->i_op = &ext2_symlink_inode_operations;
1510 inode_nohighmem(inode);
1511 if (test_opt(inode->i_sb, NOBH))
1512 inode->i_mapping->a_ops = &ext2_nobh_aops;
1513 else
1514 inode->i_mapping->a_ops = &ext2_aops;
1515 }
1516 } else {
1517 inode->i_op = &ext2_special_inode_operations;
1518 if (raw_inode->i_block[0])
1519 init_special_inode(inode, inode->i_mode,
1520 old_decode_dev(le32_to_cpu(raw_inode->i_block[0])));
1521 else
1522 init_special_inode(inode, inode->i_mode,
1523 new_decode_dev(le32_to_cpu(raw_inode->i_block[1])));
1524 }
1525 brelse (bh);
1526 ext2_set_inode_flags(inode);
1527 unlock_new_inode(inode);
1528 return inode;
1529
1530bad_inode:
1531 iget_failed(inode);
1532 return ERR_PTR(ret);
1533}
1534
1535static int __ext2_write_inode(struct inode *inode, int do_sync)
1536{
1537 struct ext2_inode_info *ei = EXT2_I(inode);
1538 struct super_block *sb = inode->i_sb;
1539 ino_t ino = inode->i_ino;
1540 uid_t uid = i_uid_read(inode);
1541 gid_t gid = i_gid_read(inode);
1542 struct buffer_head * bh;
1543 struct ext2_inode * raw_inode = ext2_get_inode(sb, ino, &bh);
1544 int n;
1545 int err = 0;
1546
1547 if (IS_ERR(raw_inode))
1548 return -EIO;
1549
1550
1551
1552 if (ei->i_state & EXT2_STATE_NEW)
1553 memset(raw_inode, 0, EXT2_SB(sb)->s_inode_size);
1554
1555 raw_inode->i_mode = cpu_to_le16(inode->i_mode);
1556 if (!(test_opt(sb, NO_UID32))) {
1557 raw_inode->i_uid_low = cpu_to_le16(low_16_bits(uid));
1558 raw_inode->i_gid_low = cpu_to_le16(low_16_bits(gid));
1559
1560
1561
1562
1563 if (!ei->i_dtime) {
1564 raw_inode->i_uid_high = cpu_to_le16(high_16_bits(uid));
1565 raw_inode->i_gid_high = cpu_to_le16(high_16_bits(gid));
1566 } else {
1567 raw_inode->i_uid_high = 0;
1568 raw_inode->i_gid_high = 0;
1569 }
1570 } else {
1571 raw_inode->i_uid_low = cpu_to_le16(fs_high2lowuid(uid));
1572 raw_inode->i_gid_low = cpu_to_le16(fs_high2lowgid(gid));
1573 raw_inode->i_uid_high = 0;
1574 raw_inode->i_gid_high = 0;
1575 }
1576 raw_inode->i_links_count = cpu_to_le16(inode->i_nlink);
1577 raw_inode->i_size = cpu_to_le32(inode->i_size);
1578 raw_inode->i_atime = cpu_to_le32(inode->i_atime.tv_sec);
1579 raw_inode->i_ctime = cpu_to_le32(inode->i_ctime.tv_sec);
1580 raw_inode->i_mtime = cpu_to_le32(inode->i_mtime.tv_sec);
1581
1582 raw_inode->i_blocks = cpu_to_le32(inode->i_blocks);
1583 raw_inode->i_dtime = cpu_to_le32(ei->i_dtime);
1584 raw_inode->i_flags = cpu_to_le32(ei->i_flags);
1585 raw_inode->i_faddr = cpu_to_le32(ei->i_faddr);
1586 raw_inode->i_frag = ei->i_frag_no;
1587 raw_inode->i_fsize = ei->i_frag_size;
1588 raw_inode->i_file_acl = cpu_to_le32(ei->i_file_acl);
1589 if (!S_ISREG(inode->i_mode))
1590 raw_inode->i_dir_acl = cpu_to_le32(ei->i_dir_acl);
1591 else {
1592 raw_inode->i_size_high = cpu_to_le32(inode->i_size >> 32);
1593 if (inode->i_size > 0x7fffffffULL) {
1594 if (!EXT2_HAS_RO_COMPAT_FEATURE(sb,
1595 EXT2_FEATURE_RO_COMPAT_LARGE_FILE) ||
1596 EXT2_SB(sb)->s_es->s_rev_level ==
1597 cpu_to_le32(EXT2_GOOD_OLD_REV)) {
1598
1599
1600
1601 spin_lock(&EXT2_SB(sb)->s_lock);
1602 ext2_update_dynamic_rev(sb);
1603 EXT2_SET_RO_COMPAT_FEATURE(sb,
1604 EXT2_FEATURE_RO_COMPAT_LARGE_FILE);
1605 spin_unlock(&EXT2_SB(sb)->s_lock);
1606 ext2_sync_super(sb, EXT2_SB(sb)->s_es, 1);
1607 }
1608 }
1609 }
1610
1611 raw_inode->i_generation = cpu_to_le32(inode->i_generation);
1612 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
1613 if (old_valid_dev(inode->i_rdev)) {
1614 raw_inode->i_block[0] =
1615 cpu_to_le32(old_encode_dev(inode->i_rdev));
1616 raw_inode->i_block[1] = 0;
1617 } else {
1618 raw_inode->i_block[0] = 0;
1619 raw_inode->i_block[1] =
1620 cpu_to_le32(new_encode_dev(inode->i_rdev));
1621 raw_inode->i_block[2] = 0;
1622 }
1623 } else for (n = 0; n < EXT2_N_BLOCKS; n++)
1624 raw_inode->i_block[n] = ei->i_data[n];
1625 mark_buffer_dirty(bh);
1626 if (do_sync) {
1627 sync_dirty_buffer(bh);
1628 if (buffer_req(bh) && !buffer_uptodate(bh)) {
1629 printk ("IO error syncing ext2 inode [%s:%08lx]\n",
1630 sb->s_id, (unsigned long) ino);
1631 err = -EIO;
1632 }
1633 }
1634 ei->i_state &= ~EXT2_STATE_NEW;
1635 brelse (bh);
1636 return err;
1637}
1638
1639int ext2_write_inode(struct inode *inode, struct writeback_control *wbc)
1640{
1641 return __ext2_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL);
1642}
1643
1644int ext2_setattr(struct dentry *dentry, struct iattr *iattr)
1645{
1646 struct inode *inode = d_inode(dentry);
1647 int error;
1648
1649 error = setattr_prepare(dentry, iattr);
1650 if (error)
1651 return error;
1652
1653 if (is_quota_modification(inode, iattr)) {
1654 error = dquot_initialize(inode);
1655 if (error)
1656 return error;
1657 }
1658 if ((iattr->ia_valid & ATTR_UID && !uid_eq(iattr->ia_uid, inode->i_uid)) ||
1659 (iattr->ia_valid & ATTR_GID && !gid_eq(iattr->ia_gid, inode->i_gid))) {
1660 error = dquot_transfer(inode, iattr);
1661 if (error)
1662 return error;
1663 }
1664 if (iattr->ia_valid & ATTR_SIZE && iattr->ia_size != inode->i_size) {
1665 error = ext2_setsize(inode, iattr->ia_size);
1666 if (error)
1667 return error;
1668 }
1669 setattr_copy(inode, iattr);
1670 if (iattr->ia_valid & ATTR_MODE)
1671 error = posix_acl_chmod(inode, inode->i_mode);
1672 mark_inode_dirty(inode);
1673
1674 return error;
1675}
1676