1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <linux/buffer_head.h>
23#include <linux/fs.h>
24#include <linux/mm.h>
25#include <linux/mount.h>
26#include <linux/mutex.h>
27#include <linux/pagemap.h>
28#include <linux/quotaops.h>
29#include <linux/slab.h>
30#include <linux/log2.h>
31
32#include "aops.h"
33#include "attrib.h"
34#include "bitmap.h"
35#include "dir.h"
36#include "debug.h"
37#include "inode.h"
38#include "lcnalloc.h"
39#include "malloc.h"
40#include "mft.h"
41#include "time.h"
42#include "ntfs.h"
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60int ntfs_test_inode(struct inode *vi, ntfs_attr *na)
61{
62 ntfs_inode *ni;
63
64 if (vi->i_ino != na->mft_no)
65 return 0;
66 ni = NTFS_I(vi);
67
68 if (likely(!NInoAttr(ni))) {
69
70 if (unlikely(na->type != AT_UNUSED))
71 return 0;
72 } else {
73
74 if (ni->type != na->type)
75 return 0;
76 if (ni->name_len != na->name_len)
77 return 0;
78 if (na->name_len && memcmp(ni->name, na->name,
79 na->name_len * sizeof(ntfschar)))
80 return 0;
81 }
82
83 return 1;
84}
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104static int ntfs_init_locked_inode(struct inode *vi, ntfs_attr *na)
105{
106 ntfs_inode *ni = NTFS_I(vi);
107
108 vi->i_ino = na->mft_no;
109
110 ni->type = na->type;
111 if (na->type == AT_INDEX_ALLOCATION)
112 NInoSetMstProtected(ni);
113
114 ni->name = na->name;
115 ni->name_len = na->name_len;
116
117
118 if (likely(na->type == AT_UNUSED)) {
119 BUG_ON(na->name);
120 BUG_ON(na->name_len);
121 return 0;
122 }
123
124
125 NInoSetAttr(ni);
126
127
128
129
130
131
132
133
134 if (na->name_len && na->name != I30) {
135 unsigned int i;
136
137 BUG_ON(!na->name);
138 i = na->name_len * sizeof(ntfschar);
139 ni->name = kmalloc(i + sizeof(ntfschar), GFP_ATOMIC);
140 if (!ni->name)
141 return -ENOMEM;
142 memcpy(ni->name, na->name, i);
143 ni->name[na->name_len] = 0;
144 }
145 return 0;
146}
147
148typedef int (*set_t)(struct inode *, void *);
149static int ntfs_read_locked_inode(struct inode *vi);
150static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi);
151static int ntfs_read_locked_index_inode(struct inode *base_vi,
152 struct inode *vi);
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170struct inode *ntfs_iget(struct super_block *sb, unsigned long mft_no)
171{
172 struct inode *vi;
173 int err;
174 ntfs_attr na;
175
176 na.mft_no = mft_no;
177 na.type = AT_UNUSED;
178 na.name = NULL;
179 na.name_len = 0;
180
181 vi = iget5_locked(sb, mft_no, (test_t)ntfs_test_inode,
182 (set_t)ntfs_init_locked_inode, &na);
183 if (unlikely(!vi))
184 return ERR_PTR(-ENOMEM);
185
186 err = 0;
187
188
189 if (vi->i_state & I_NEW) {
190 err = ntfs_read_locked_inode(vi);
191 unlock_new_inode(vi);
192 }
193
194
195
196
197 if (unlikely(err == -ENOMEM)) {
198 iput(vi);
199 vi = ERR_PTR(err);
200 }
201 return vi;
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
227struct inode *ntfs_attr_iget(struct inode *base_vi, ATTR_TYPE type,
228 ntfschar *name, u32 name_len)
229{
230 struct inode *vi;
231 int err;
232 ntfs_attr na;
233
234
235 BUG_ON(type == AT_INDEX_ALLOCATION);
236
237 na.mft_no = base_vi->i_ino;
238 na.type = type;
239 na.name = name;
240 na.name_len = name_len;
241
242 vi = iget5_locked(base_vi->i_sb, na.mft_no, (test_t)ntfs_test_inode,
243 (set_t)ntfs_init_locked_inode, &na);
244 if (unlikely(!vi))
245 return ERR_PTR(-ENOMEM);
246
247 err = 0;
248
249
250 if (vi->i_state & I_NEW) {
251 err = ntfs_read_locked_attr_inode(base_vi, vi);
252 unlock_new_inode(vi);
253 }
254
255
256
257
258
259 if (unlikely(err)) {
260 iput(vi);
261 vi = ERR_PTR(err);
262 }
263 return vi;
264}
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285struct inode *ntfs_index_iget(struct inode *base_vi, ntfschar *name,
286 u32 name_len)
287{
288 struct inode *vi;
289 int err;
290 ntfs_attr na;
291
292 na.mft_no = base_vi->i_ino;
293 na.type = AT_INDEX_ALLOCATION;
294 na.name = name;
295 na.name_len = name_len;
296
297 vi = iget5_locked(base_vi->i_sb, na.mft_no, (test_t)ntfs_test_inode,
298 (set_t)ntfs_init_locked_inode, &na);
299 if (unlikely(!vi))
300 return ERR_PTR(-ENOMEM);
301
302 err = 0;
303
304
305 if (vi->i_state & I_NEW) {
306 err = ntfs_read_locked_index_inode(base_vi, vi);
307 unlock_new_inode(vi);
308 }
309
310
311
312
313
314 if (unlikely(err)) {
315 iput(vi);
316 vi = ERR_PTR(err);
317 }
318 return vi;
319}
320
321struct inode *ntfs_alloc_big_inode(struct super_block *sb)
322{
323 ntfs_inode *ni;
324
325 ntfs_debug("Entering.");
326 ni = kmem_cache_alloc(ntfs_big_inode_cache, GFP_NOFS);
327 if (likely(ni != NULL)) {
328 ni->state = 0;
329 return VFS_I(ni);
330 }
331 ntfs_error(sb, "Allocation of NTFS big inode structure failed.");
332 return NULL;
333}
334
335static void ntfs_i_callback(struct rcu_head *head)
336{
337 struct inode *inode = container_of(head, struct inode, i_rcu);
338 kmem_cache_free(ntfs_big_inode_cache, NTFS_I(inode));
339}
340
341void ntfs_destroy_big_inode(struct inode *inode)
342{
343 ntfs_inode *ni = NTFS_I(inode);
344
345 ntfs_debug("Entering.");
346 BUG_ON(ni->page);
347 if (!atomic_dec_and_test(&ni->count))
348 BUG();
349 call_rcu(&inode->i_rcu, ntfs_i_callback);
350}
351
352static inline ntfs_inode *ntfs_alloc_extent_inode(void)
353{
354 ntfs_inode *ni;
355
356 ntfs_debug("Entering.");
357 ni = kmem_cache_alloc(ntfs_inode_cache, GFP_NOFS);
358 if (likely(ni != NULL)) {
359 ni->state = 0;
360 return ni;
361 }
362 ntfs_error(NULL, "Allocation of NTFS inode structure failed.");
363 return NULL;
364}
365
366static void ntfs_destroy_extent_inode(ntfs_inode *ni)
367{
368 ntfs_debug("Entering.");
369 BUG_ON(ni->page);
370 if (!atomic_dec_and_test(&ni->count))
371 BUG();
372 kmem_cache_free(ntfs_inode_cache, ni);
373}
374
375
376
377
378
379static struct lock_class_key attr_list_rl_lock_class;
380
381
382
383
384
385
386
387
388
389
390
391
392
393void __ntfs_init_inode(struct super_block *sb, ntfs_inode *ni)
394{
395 ntfs_debug("Entering.");
396 rwlock_init(&ni->size_lock);
397 ni->initialized_size = ni->allocated_size = 0;
398 ni->seq_no = 0;
399 atomic_set(&ni->count, 1);
400 ni->vol = NTFS_SB(sb);
401 ntfs_init_runlist(&ni->runlist);
402 mutex_init(&ni->mrec_lock);
403 ni->page = NULL;
404 ni->page_ofs = 0;
405 ni->attr_list_size = 0;
406 ni->attr_list = NULL;
407 ntfs_init_runlist(&ni->attr_list_rl);
408 lockdep_set_class(&ni->attr_list_rl.lock,
409 &attr_list_rl_lock_class);
410 ni->itype.index.block_size = 0;
411 ni->itype.index.vcn_size = 0;
412 ni->itype.index.collation_rule = 0;
413 ni->itype.index.block_size_bits = 0;
414 ni->itype.index.vcn_size_bits = 0;
415 mutex_init(&ni->extent_lock);
416 ni->nr_extents = 0;
417 ni->ext.base_ntfs_ino = NULL;
418}
419
420
421
422
423
424
425static struct lock_class_key extent_inode_mrec_lock_key;
426
427inline ntfs_inode *ntfs_new_extent_inode(struct super_block *sb,
428 unsigned long mft_no)
429{
430 ntfs_inode *ni = ntfs_alloc_extent_inode();
431
432 ntfs_debug("Entering.");
433 if (likely(ni != NULL)) {
434 __ntfs_init_inode(sb, ni);
435 lockdep_set_class(&ni->mrec_lock, &extent_inode_mrec_lock_key);
436 ni->mft_no = mft_no;
437 ni->type = AT_UNUSED;
438 ni->name = NULL;
439 ni->name_len = 0;
440 }
441 return ni;
442}
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457static int ntfs_is_extended_system_file(ntfs_attr_search_ctx *ctx)
458{
459 int nr_links, err;
460
461
462 ntfs_attr_reinit_search_ctx(ctx);
463
464
465 nr_links = le16_to_cpu(ctx->mrec->link_count);
466
467
468 while (!(err = ntfs_attr_lookup(AT_FILE_NAME, NULL, 0, 0, 0, NULL, 0,
469 ctx))) {
470 FILE_NAME_ATTR *file_name_attr;
471 ATTR_RECORD *attr = ctx->attr;
472 u8 *p, *p2;
473
474 nr_links--;
475
476
477
478
479 p = (u8*)attr + le32_to_cpu(attr->length);
480 if (p < (u8*)ctx->mrec || (u8*)p > (u8*)ctx->mrec +
481 le32_to_cpu(ctx->mrec->bytes_in_use)) {
482err_corrupt_attr:
483 ntfs_error(ctx->ntfs_ino->vol->sb, "Corrupt file name "
484 "attribute. You should run chkdsk.");
485 return -EIO;
486 }
487 if (attr->non_resident) {
488 ntfs_error(ctx->ntfs_ino->vol->sb, "Non-resident file "
489 "name. You should run chkdsk.");
490 return -EIO;
491 }
492 if (attr->flags) {
493 ntfs_error(ctx->ntfs_ino->vol->sb, "File name with "
494 "invalid flags. You should run "
495 "chkdsk.");
496 return -EIO;
497 }
498 if (!(attr->data.resident.flags & RESIDENT_ATTR_IS_INDEXED)) {
499 ntfs_error(ctx->ntfs_ino->vol->sb, "Unindexed file "
500 "name. You should run chkdsk.");
501 return -EIO;
502 }
503 file_name_attr = (FILE_NAME_ATTR*)((u8*)attr +
504 le16_to_cpu(attr->data.resident.value_offset));
505 p2 = (u8*)attr + le32_to_cpu(attr->data.resident.value_length);
506 if (p2 < (u8*)attr || p2 > p)
507 goto err_corrupt_attr;
508
509 if (MREF_LE(file_name_attr->parent_directory) == FILE_Extend)
510 return 1;
511 }
512 if (unlikely(err != -ENOENT))
513 return err;
514 if (unlikely(nr_links)) {
515 ntfs_error(ctx->ntfs_ino->vol->sb, "Inode hard link count "
516 "doesn't match number of name attributes. You "
517 "should run chkdsk.");
518 return -EIO;
519 }
520 return 0;
521}
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549static int ntfs_read_locked_inode(struct inode *vi)
550{
551 ntfs_volume *vol = NTFS_SB(vi->i_sb);
552 ntfs_inode *ni;
553 struct inode *bvi;
554 MFT_RECORD *m;
555 ATTR_RECORD *a;
556 STANDARD_INFORMATION *si;
557 ntfs_attr_search_ctx *ctx;
558 int err = 0;
559
560 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
561
562
563
564
565
566
567
568 vi->i_version = 1;
569
570 vi->i_uid = vol->uid;
571 vi->i_gid = vol->gid;
572 vi->i_mode = 0;
573
574
575
576
577
578 if (vi->i_ino != FILE_MFT)
579 ntfs_init_big_inode(vi);
580 ni = NTFS_I(vi);
581
582 m = map_mft_record(ni);
583 if (IS_ERR(m)) {
584 err = PTR_ERR(m);
585 goto err_out;
586 }
587 ctx = ntfs_attr_get_search_ctx(ni, m);
588 if (!ctx) {
589 err = -ENOMEM;
590 goto unm_err_out;
591 }
592
593 if (!(m->flags & MFT_RECORD_IN_USE)) {
594 ntfs_error(vi->i_sb, "Inode is not in use!");
595 goto unm_err_out;
596 }
597 if (m->base_mft_record) {
598 ntfs_error(vi->i_sb, "Inode is an extent inode!");
599 goto unm_err_out;
600 }
601
602
603 vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number);
604
605
606
607
608
609
610
611
612
613
614 set_nlink(vi, le16_to_cpu(m->link_count));
615
616
617
618
619
620
621
622
623 vi->i_mode |= S_IRWXUGO;
624
625 if (IS_RDONLY(vi))
626 vi->i_mode &= ~S_IWUGO;
627 if (m->flags & MFT_RECORD_IS_DIRECTORY) {
628 vi->i_mode |= S_IFDIR;
629
630
631
632
633 vi->i_mode &= ~vol->dmask;
634
635 if (vi->i_nlink > 1)
636 set_nlink(vi, 1);
637 } else {
638 vi->i_mode |= S_IFREG;
639
640 vi->i_mode &= ~vol->fmask;
641 }
642
643
644
645
646
647
648 err = ntfs_attr_lookup(AT_STANDARD_INFORMATION, NULL, 0, 0, 0, NULL, 0,
649 ctx);
650 if (unlikely(err)) {
651 if (err == -ENOENT) {
652
653
654
655
656
657 ntfs_error(vi->i_sb, "$STANDARD_INFORMATION attribute "
658 "is missing.");
659 }
660 goto unm_err_out;
661 }
662 a = ctx->attr;
663
664 si = (STANDARD_INFORMATION*)((u8*)a +
665 le16_to_cpu(a->data.resident.value_offset));
666
667
668
669
670
671
672
673
674
675
676
677 vi->i_mtime = ntfs2utc(si->last_data_change_time);
678
679
680
681
682
683 vi->i_ctime = ntfs2utc(si->last_mft_change_time);
684
685
686
687
688 vi->i_atime = ntfs2utc(si->last_access_time);
689
690
691 ntfs_attr_reinit_search_ctx(ctx);
692 err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx);
693 if (err) {
694 if (unlikely(err != -ENOENT)) {
695 ntfs_error(vi->i_sb, "Failed to lookup attribute list "
696 "attribute.");
697 goto unm_err_out;
698 }
699 } else {
700 if (vi->i_ino == FILE_MFT)
701 goto skip_attr_list_load;
702 ntfs_debug("Attribute list found in inode 0x%lx.", vi->i_ino);
703 NInoSetAttrList(ni);
704 a = ctx->attr;
705 if (a->flags & ATTR_COMPRESSION_MASK) {
706 ntfs_error(vi->i_sb, "Attribute list attribute is "
707 "compressed.");
708 goto unm_err_out;
709 }
710 if (a->flags & ATTR_IS_ENCRYPTED ||
711 a->flags & ATTR_IS_SPARSE) {
712 if (a->non_resident) {
713 ntfs_error(vi->i_sb, "Non-resident attribute "
714 "list attribute is encrypted/"
715 "sparse.");
716 goto unm_err_out;
717 }
718 ntfs_warning(vi->i_sb, "Resident attribute list "
719 "attribute in inode 0x%lx is marked "
720 "encrypted/sparse which is not true. "
721 "However, Windows allows this and "
722 "chkdsk does not detect or correct it "
723 "so we will just ignore the invalid "
724 "flags and pretend they are not set.",
725 vi->i_ino);
726 }
727
728 ni->attr_list_size = (u32)ntfs_attr_size(a);
729 ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size);
730 if (!ni->attr_list) {
731 ntfs_error(vi->i_sb, "Not enough memory to allocate "
732 "buffer for attribute list.");
733 err = -ENOMEM;
734 goto unm_err_out;
735 }
736 if (a->non_resident) {
737 NInoSetAttrListNonResident(ni);
738 if (a->data.non_resident.lowest_vcn) {
739 ntfs_error(vi->i_sb, "Attribute list has non "
740 "zero lowest_vcn.");
741 goto unm_err_out;
742 }
743
744
745
746
747 ni->attr_list_rl.rl = ntfs_mapping_pairs_decompress(vol,
748 a, NULL);
749 if (IS_ERR(ni->attr_list_rl.rl)) {
750 err = PTR_ERR(ni->attr_list_rl.rl);
751 ni->attr_list_rl.rl = NULL;
752 ntfs_error(vi->i_sb, "Mapping pairs "
753 "decompression failed.");
754 goto unm_err_out;
755 }
756
757 if ((err = load_attribute_list(vol, &ni->attr_list_rl,
758 ni->attr_list, ni->attr_list_size,
759 sle64_to_cpu(a->data.non_resident.
760 initialized_size)))) {
761 ntfs_error(vi->i_sb, "Failed to load "
762 "attribute list attribute.");
763 goto unm_err_out;
764 }
765 } else {
766 if ((u8*)a + le16_to_cpu(a->data.resident.value_offset)
767 + le32_to_cpu(
768 a->data.resident.value_length) >
769 (u8*)ctx->mrec + vol->mft_record_size) {
770 ntfs_error(vi->i_sb, "Corrupt attribute list "
771 "in inode.");
772 goto unm_err_out;
773 }
774
775 memcpy(ni->attr_list, (u8*)a + le16_to_cpu(
776 a->data.resident.value_offset),
777 le32_to_cpu(
778 a->data.resident.value_length));
779 }
780 }
781skip_attr_list_load:
782
783
784
785
786 if (S_ISDIR(vi->i_mode)) {
787 loff_t bvi_size;
788 ntfs_inode *bni;
789 INDEX_ROOT *ir;
790 u8 *ir_end, *index_end;
791
792
793 ntfs_attr_reinit_search_ctx(ctx);
794 err = ntfs_attr_lookup(AT_INDEX_ROOT, I30, 4, CASE_SENSITIVE,
795 0, NULL, 0, ctx);
796 if (unlikely(err)) {
797 if (err == -ENOENT) {
798
799
800
801 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute "
802 "is missing.");
803 }
804 goto unm_err_out;
805 }
806 a = ctx->attr;
807
808 if (unlikely(a->non_resident)) {
809 ntfs_error(vol->sb, "$INDEX_ROOT attribute is not "
810 "resident.");
811 goto unm_err_out;
812 }
813
814 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
815 le16_to_cpu(a->data.resident.value_offset)))) {
816 ntfs_error(vol->sb, "$INDEX_ROOT attribute name is "
817 "placed after the attribute value.");
818 goto unm_err_out;
819 }
820
821
822
823
824
825
826 if (a->flags & ATTR_COMPRESSION_MASK)
827 NInoSetCompressed(ni);
828 if (a->flags & ATTR_IS_ENCRYPTED) {
829 if (a->flags & ATTR_COMPRESSION_MASK) {
830 ntfs_error(vi->i_sb, "Found encrypted and "
831 "compressed attribute.");
832 goto unm_err_out;
833 }
834 NInoSetEncrypted(ni);
835 }
836 if (a->flags & ATTR_IS_SPARSE)
837 NInoSetSparse(ni);
838 ir = (INDEX_ROOT*)((u8*)a +
839 le16_to_cpu(a->data.resident.value_offset));
840 ir_end = (u8*)ir + le32_to_cpu(a->data.resident.value_length);
841 if (ir_end > (u8*)ctx->mrec + vol->mft_record_size) {
842 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is "
843 "corrupt.");
844 goto unm_err_out;
845 }
846 index_end = (u8*)&ir->index +
847 le32_to_cpu(ir->index.index_length);
848 if (index_end > ir_end) {
849 ntfs_error(vi->i_sb, "Directory index is corrupt.");
850 goto unm_err_out;
851 }
852 if (ir->type != AT_FILE_NAME) {
853 ntfs_error(vi->i_sb, "Indexed attribute is not "
854 "$FILE_NAME.");
855 goto unm_err_out;
856 }
857 if (ir->collation_rule != COLLATION_FILE_NAME) {
858 ntfs_error(vi->i_sb, "Index collation rule is not "
859 "COLLATION_FILE_NAME.");
860 goto unm_err_out;
861 }
862 ni->itype.index.collation_rule = ir->collation_rule;
863 ni->itype.index.block_size = le32_to_cpu(ir->index_block_size);
864 if (ni->itype.index.block_size &
865 (ni->itype.index.block_size - 1)) {
866 ntfs_error(vi->i_sb, "Index block size (%u) is not a "
867 "power of two.",
868 ni->itype.index.block_size);
869 goto unm_err_out;
870 }
871 if (ni->itype.index.block_size > PAGE_CACHE_SIZE) {
872 ntfs_error(vi->i_sb, "Index block size (%u) > "
873 "PAGE_CACHE_SIZE (%ld) is not "
874 "supported. Sorry.",
875 ni->itype.index.block_size,
876 PAGE_CACHE_SIZE);
877 err = -EOPNOTSUPP;
878 goto unm_err_out;
879 }
880 if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) {
881 ntfs_error(vi->i_sb, "Index block size (%u) < "
882 "NTFS_BLOCK_SIZE (%i) is not "
883 "supported. Sorry.",
884 ni->itype.index.block_size,
885 NTFS_BLOCK_SIZE);
886 err = -EOPNOTSUPP;
887 goto unm_err_out;
888 }
889 ni->itype.index.block_size_bits =
890 ffs(ni->itype.index.block_size) - 1;
891
892 if (vol->cluster_size <= ni->itype.index.block_size) {
893 ni->itype.index.vcn_size = vol->cluster_size;
894 ni->itype.index.vcn_size_bits = vol->cluster_size_bits;
895 } else {
896 ni->itype.index.vcn_size = vol->sector_size;
897 ni->itype.index.vcn_size_bits = vol->sector_size_bits;
898 }
899
900
901 NInoSetMstProtected(ni);
902 ni->type = AT_INDEX_ALLOCATION;
903 ni->name = I30;
904 ni->name_len = 4;
905
906 if (!(ir->index.flags & LARGE_INDEX)) {
907
908 vi->i_size = ni->initialized_size =
909 ni->allocated_size = 0;
910
911 ntfs_attr_put_search_ctx(ctx);
912 unmap_mft_record(ni);
913 m = NULL;
914 ctx = NULL;
915 goto skip_large_dir_stuff;
916 }
917 NInoSetIndexAllocPresent(ni);
918
919 ntfs_attr_reinit_search_ctx(ctx);
920 err = ntfs_attr_lookup(AT_INDEX_ALLOCATION, I30, 4,
921 CASE_SENSITIVE, 0, NULL, 0, ctx);
922 if (unlikely(err)) {
923 if (err == -ENOENT)
924 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION "
925 "attribute is not present but "
926 "$INDEX_ROOT indicated it is.");
927 else
928 ntfs_error(vi->i_sb, "Failed to lookup "
929 "$INDEX_ALLOCATION "
930 "attribute.");
931 goto unm_err_out;
932 }
933 a = ctx->attr;
934 if (!a->non_resident) {
935 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
936 "is resident.");
937 goto unm_err_out;
938 }
939
940
941
942
943 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
944 le16_to_cpu(
945 a->data.non_resident.mapping_pairs_offset)))) {
946 ntfs_error(vol->sb, "$INDEX_ALLOCATION attribute name "
947 "is placed after the mapping pairs "
948 "array.");
949 goto unm_err_out;
950 }
951 if (a->flags & ATTR_IS_ENCRYPTED) {
952 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
953 "is encrypted.");
954 goto unm_err_out;
955 }
956 if (a->flags & ATTR_IS_SPARSE) {
957 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
958 "is sparse.");
959 goto unm_err_out;
960 }
961 if (a->flags & ATTR_COMPRESSION_MASK) {
962 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
963 "is compressed.");
964 goto unm_err_out;
965 }
966 if (a->data.non_resident.lowest_vcn) {
967 ntfs_error(vi->i_sb, "First extent of "
968 "$INDEX_ALLOCATION attribute has non "
969 "zero lowest_vcn.");
970 goto unm_err_out;
971 }
972 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
973 ni->initialized_size = sle64_to_cpu(
974 a->data.non_resident.initialized_size);
975 ni->allocated_size = sle64_to_cpu(
976 a->data.non_resident.allocated_size);
977
978
979
980
981 ntfs_attr_put_search_ctx(ctx);
982 unmap_mft_record(ni);
983 m = NULL;
984 ctx = NULL;
985
986 bvi = ntfs_attr_iget(vi, AT_BITMAP, I30, 4);
987 if (IS_ERR(bvi)) {
988 ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
989 err = PTR_ERR(bvi);
990 goto unm_err_out;
991 }
992 bni = NTFS_I(bvi);
993 if (NInoCompressed(bni) || NInoEncrypted(bni) ||
994 NInoSparse(bni)) {
995 ntfs_error(vi->i_sb, "$BITMAP attribute is compressed "
996 "and/or encrypted and/or sparse.");
997 goto iput_unm_err_out;
998 }
999
1000 bvi_size = i_size_read(bvi);
1001 if ((bvi_size << 3) < (vi->i_size >>
1002 ni->itype.index.block_size_bits)) {
1003 ntfs_error(vi->i_sb, "Index bitmap too small (0x%llx) "
1004 "for index allocation (0x%llx).",
1005 bvi_size << 3, vi->i_size);
1006 goto iput_unm_err_out;
1007 }
1008
1009 iput(bvi);
1010skip_large_dir_stuff:
1011
1012 vi->i_op = &ntfs_dir_inode_ops;
1013 vi->i_fop = &ntfs_dir_ops;
1014 } else {
1015
1016 ntfs_attr_reinit_search_ctx(ctx);
1017
1018
1019 ni->type = AT_DATA;
1020 ni->name = NULL;
1021 ni->name_len = 0;
1022
1023
1024 err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, 0, NULL, 0, ctx);
1025 if (unlikely(err)) {
1026 vi->i_size = ni->initialized_size =
1027 ni->allocated_size = 0;
1028 if (err != -ENOENT) {
1029 ntfs_error(vi->i_sb, "Failed to lookup $DATA "
1030 "attribute.");
1031 goto unm_err_out;
1032 }
1033
1034
1035
1036
1037 if (vi->i_ino == FILE_Secure)
1038 goto no_data_attr_special_case;
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048 if (ntfs_is_extended_system_file(ctx) > 0)
1049 goto no_data_attr_special_case;
1050
1051
1052 ntfs_error(vi->i_sb, "$DATA attribute is missing.");
1053 goto unm_err_out;
1054 }
1055 a = ctx->attr;
1056
1057 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) {
1058 if (a->flags & ATTR_COMPRESSION_MASK) {
1059 NInoSetCompressed(ni);
1060 if (vol->cluster_size > 4096) {
1061 ntfs_error(vi->i_sb, "Found "
1062 "compressed data but "
1063 "compression is "
1064 "disabled due to "
1065 "cluster size (%i) > "
1066 "4kiB.",
1067 vol->cluster_size);
1068 goto unm_err_out;
1069 }
1070 if ((a->flags & ATTR_COMPRESSION_MASK)
1071 != ATTR_IS_COMPRESSED) {
1072 ntfs_error(vi->i_sb, "Found unknown "
1073 "compression method "
1074 "or corrupt file.");
1075 goto unm_err_out;
1076 }
1077 }
1078 if (a->flags & ATTR_IS_SPARSE)
1079 NInoSetSparse(ni);
1080 }
1081 if (a->flags & ATTR_IS_ENCRYPTED) {
1082 if (NInoCompressed(ni)) {
1083 ntfs_error(vi->i_sb, "Found encrypted and "
1084 "compressed data.");
1085 goto unm_err_out;
1086 }
1087 NInoSetEncrypted(ni);
1088 }
1089 if (a->non_resident) {
1090 NInoSetNonResident(ni);
1091 if (NInoCompressed(ni) || NInoSparse(ni)) {
1092 if (NInoCompressed(ni) && a->data.non_resident.
1093 compression_unit != 4) {
1094 ntfs_error(vi->i_sb, "Found "
1095 "non-standard "
1096 "compression unit (%u "
1097 "instead of 4). "
1098 "Cannot handle this.",
1099 a->data.non_resident.
1100 compression_unit);
1101 err = -EOPNOTSUPP;
1102 goto unm_err_out;
1103 }
1104 if (a->data.non_resident.compression_unit) {
1105 ni->itype.compressed.block_size = 1U <<
1106 (a->data.non_resident.
1107 compression_unit +
1108 vol->cluster_size_bits);
1109 ni->itype.compressed.block_size_bits =
1110 ffs(ni->itype.
1111 compressed.
1112 block_size) - 1;
1113 ni->itype.compressed.block_clusters =
1114 1U << a->data.
1115 non_resident.
1116 compression_unit;
1117 } else {
1118 ni->itype.compressed.block_size = 0;
1119 ni->itype.compressed.block_size_bits =
1120 0;
1121 ni->itype.compressed.block_clusters =
1122 0;
1123 }
1124 ni->itype.compressed.size = sle64_to_cpu(
1125 a->data.non_resident.
1126 compressed_size);
1127 }
1128 if (a->data.non_resident.lowest_vcn) {
1129 ntfs_error(vi->i_sb, "First extent of $DATA "
1130 "attribute has non zero "
1131 "lowest_vcn.");
1132 goto unm_err_out;
1133 }
1134 vi->i_size = sle64_to_cpu(
1135 a->data.non_resident.data_size);
1136 ni->initialized_size = sle64_to_cpu(
1137 a->data.non_resident.initialized_size);
1138 ni->allocated_size = sle64_to_cpu(
1139 a->data.non_resident.allocated_size);
1140 } else {
1141 vi->i_size = ni->initialized_size = le32_to_cpu(
1142 a->data.resident.value_length);
1143 ni->allocated_size = le32_to_cpu(a->length) -
1144 le16_to_cpu(
1145 a->data.resident.value_offset);
1146 if (vi->i_size > ni->allocated_size) {
1147 ntfs_error(vi->i_sb, "Resident data attribute "
1148 "is corrupt (size exceeds "
1149 "allocation).");
1150 goto unm_err_out;
1151 }
1152 }
1153no_data_attr_special_case:
1154
1155 ntfs_attr_put_search_ctx(ctx);
1156 unmap_mft_record(ni);
1157 m = NULL;
1158 ctx = NULL;
1159
1160 vi->i_op = &ntfs_file_inode_ops;
1161 vi->i_fop = &ntfs_file_ops;
1162 }
1163 if (NInoMstProtected(ni))
1164 vi->i_mapping->a_ops = &ntfs_mst_aops;
1165 else
1166 vi->i_mapping->a_ops = &ntfs_aops;
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178 if (S_ISREG(vi->i_mode) && (NInoCompressed(ni) || NInoSparse(ni)))
1179 vi->i_blocks = ni->itype.compressed.size >> 9;
1180 else
1181 vi->i_blocks = ni->allocated_size >> 9;
1182 ntfs_debug("Done.");
1183 return 0;
1184iput_unm_err_out:
1185 iput(bvi);
1186unm_err_out:
1187 if (!err)
1188 err = -EIO;
1189 if (ctx)
1190 ntfs_attr_put_search_ctx(ctx);
1191 if (m)
1192 unmap_mft_record(ni);
1193err_out:
1194 ntfs_error(vol->sb, "Failed with error code %i. Marking corrupt "
1195 "inode 0x%lx as bad. Run chkdsk.", err, vi->i_ino);
1196 make_bad_inode(vi);
1197 if (err != -EOPNOTSUPP && err != -ENOMEM)
1198 NVolSetErrors(vol);
1199 return err;
1200}
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi)
1225{
1226 ntfs_volume *vol = NTFS_SB(vi->i_sb);
1227 ntfs_inode *ni, *base_ni;
1228 MFT_RECORD *m;
1229 ATTR_RECORD *a;
1230 ntfs_attr_search_ctx *ctx;
1231 int err = 0;
1232
1233 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1234
1235 ntfs_init_big_inode(vi);
1236
1237 ni = NTFS_I(vi);
1238 base_ni = NTFS_I(base_vi);
1239
1240
1241 vi->i_version = base_vi->i_version;
1242 vi->i_uid = base_vi->i_uid;
1243 vi->i_gid = base_vi->i_gid;
1244 set_nlink(vi, base_vi->i_nlink);
1245 vi->i_mtime = base_vi->i_mtime;
1246 vi->i_ctime = base_vi->i_ctime;
1247 vi->i_atime = base_vi->i_atime;
1248 vi->i_generation = ni->seq_no = base_ni->seq_no;
1249
1250
1251 vi->i_mode = base_vi->i_mode & ~S_IFMT;
1252
1253 m = map_mft_record(base_ni);
1254 if (IS_ERR(m)) {
1255 err = PTR_ERR(m);
1256 goto err_out;
1257 }
1258 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1259 if (!ctx) {
1260 err = -ENOMEM;
1261 goto unm_err_out;
1262 }
1263
1264 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
1265 CASE_SENSITIVE, 0, NULL, 0, ctx);
1266 if (unlikely(err))
1267 goto unm_err_out;
1268 a = ctx->attr;
1269 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) {
1270 if (a->flags & ATTR_COMPRESSION_MASK) {
1271 NInoSetCompressed(ni);
1272 if ((ni->type != AT_DATA) || (ni->type == AT_DATA &&
1273 ni->name_len)) {
1274 ntfs_error(vi->i_sb, "Found compressed "
1275 "non-data or named data "
1276 "attribute. Please report "
1277 "you saw this message to "
1278 "linux-ntfs-dev@lists."
1279 "sourceforge.net");
1280 goto unm_err_out;
1281 }
1282 if (vol->cluster_size > 4096) {
1283 ntfs_error(vi->i_sb, "Found compressed "
1284 "attribute but compression is "
1285 "disabled due to cluster size "
1286 "(%i) > 4kiB.",
1287 vol->cluster_size);
1288 goto unm_err_out;
1289 }
1290 if ((a->flags & ATTR_COMPRESSION_MASK) !=
1291 ATTR_IS_COMPRESSED) {
1292 ntfs_error(vi->i_sb, "Found unknown "
1293 "compression method.");
1294 goto unm_err_out;
1295 }
1296 }
1297
1298
1299
1300
1301 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1302 ntfs_error(vi->i_sb, "Found mst protected attribute "
1303 "but the attribute is %s. Please "
1304 "report you saw this message to "
1305 "linux-ntfs-dev@lists.sourceforge.net",
1306 NInoCompressed(ni) ? "compressed" :
1307 "sparse");
1308 goto unm_err_out;
1309 }
1310 if (a->flags & ATTR_IS_SPARSE)
1311 NInoSetSparse(ni);
1312 }
1313 if (a->flags & ATTR_IS_ENCRYPTED) {
1314 if (NInoCompressed(ni)) {
1315 ntfs_error(vi->i_sb, "Found encrypted and compressed "
1316 "data.");
1317 goto unm_err_out;
1318 }
1319
1320
1321
1322
1323 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1324 ntfs_error(vi->i_sb, "Found mst protected attribute "
1325 "but the attribute is encrypted. "
1326 "Please report you saw this message "
1327 "to linux-ntfs-dev@lists.sourceforge."
1328 "net");
1329 goto unm_err_out;
1330 }
1331 if (ni->type != AT_DATA) {
1332 ntfs_error(vi->i_sb, "Found encrypted non-data "
1333 "attribute.");
1334 goto unm_err_out;
1335 }
1336 NInoSetEncrypted(ni);
1337 }
1338 if (!a->non_resident) {
1339
1340 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1341 le16_to_cpu(a->data.resident.value_offset)))) {
1342 ntfs_error(vol->sb, "Attribute name is placed after "
1343 "the attribute value.");
1344 goto unm_err_out;
1345 }
1346 if (NInoMstProtected(ni)) {
1347 ntfs_error(vi->i_sb, "Found mst protected attribute "
1348 "but the attribute is resident. "
1349 "Please report you saw this message to "
1350 "linux-ntfs-dev@lists.sourceforge.net");
1351 goto unm_err_out;
1352 }
1353 vi->i_size = ni->initialized_size = le32_to_cpu(
1354 a->data.resident.value_length);
1355 ni->allocated_size = le32_to_cpu(a->length) -
1356 le16_to_cpu(a->data.resident.value_offset);
1357 if (vi->i_size > ni->allocated_size) {
1358 ntfs_error(vi->i_sb, "Resident attribute is corrupt "
1359 "(size exceeds allocation).");
1360 goto unm_err_out;
1361 }
1362 } else {
1363 NInoSetNonResident(ni);
1364
1365
1366
1367
1368 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1369 le16_to_cpu(
1370 a->data.non_resident.mapping_pairs_offset)))) {
1371 ntfs_error(vol->sb, "Attribute name is placed after "
1372 "the mapping pairs array.");
1373 goto unm_err_out;
1374 }
1375 if (NInoCompressed(ni) || NInoSparse(ni)) {
1376 if (NInoCompressed(ni) && a->data.non_resident.
1377 compression_unit != 4) {
1378 ntfs_error(vi->i_sb, "Found non-standard "
1379 "compression unit (%u instead "
1380 "of 4). Cannot handle this.",
1381 a->data.non_resident.
1382 compression_unit);
1383 err = -EOPNOTSUPP;
1384 goto unm_err_out;
1385 }
1386 if (a->data.non_resident.compression_unit) {
1387 ni->itype.compressed.block_size = 1U <<
1388 (a->data.non_resident.
1389 compression_unit +
1390 vol->cluster_size_bits);
1391 ni->itype.compressed.block_size_bits =
1392 ffs(ni->itype.compressed.
1393 block_size) - 1;
1394 ni->itype.compressed.block_clusters = 1U <<
1395 a->data.non_resident.
1396 compression_unit;
1397 } else {
1398 ni->itype.compressed.block_size = 0;
1399 ni->itype.compressed.block_size_bits = 0;
1400 ni->itype.compressed.block_clusters = 0;
1401 }
1402 ni->itype.compressed.size = sle64_to_cpu(
1403 a->data.non_resident.compressed_size);
1404 }
1405 if (a->data.non_resident.lowest_vcn) {
1406 ntfs_error(vi->i_sb, "First extent of attribute has "
1407 "non-zero lowest_vcn.");
1408 goto unm_err_out;
1409 }
1410 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1411 ni->initialized_size = sle64_to_cpu(
1412 a->data.non_resident.initialized_size);
1413 ni->allocated_size = sle64_to_cpu(
1414 a->data.non_resident.allocated_size);
1415 }
1416 if (NInoMstProtected(ni))
1417 vi->i_mapping->a_ops = &ntfs_mst_aops;
1418 else
1419 vi->i_mapping->a_ops = &ntfs_aops;
1420 if ((NInoCompressed(ni) || NInoSparse(ni)) && ni->type != AT_INDEX_ROOT)
1421 vi->i_blocks = ni->itype.compressed.size >> 9;
1422 else
1423 vi->i_blocks = ni->allocated_size >> 9;
1424
1425
1426
1427
1428 igrab(base_vi);
1429 ni->ext.base_ntfs_ino = base_ni;
1430 ni->nr_extents = -1;
1431
1432 ntfs_attr_put_search_ctx(ctx);
1433 unmap_mft_record(base_ni);
1434
1435 ntfs_debug("Done.");
1436 return 0;
1437
1438unm_err_out:
1439 if (!err)
1440 err = -EIO;
1441 if (ctx)
1442 ntfs_attr_put_search_ctx(ctx);
1443 unmap_mft_record(base_ni);
1444err_out:
1445 ntfs_error(vol->sb, "Failed with error code %i while reading attribute "
1446 "inode (mft_no 0x%lx, type 0x%x, name_len %i). "
1447 "Marking corrupt inode and base inode 0x%lx as bad. "
1448 "Run chkdsk.", err, vi->i_ino, ni->type, ni->name_len,
1449 base_vi->i_ino);
1450 make_bad_inode(vi);
1451 if (err != -ENOMEM)
1452 NVolSetErrors(vol);
1453 return err;
1454}
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi)
1490{
1491 loff_t bvi_size;
1492 ntfs_volume *vol = NTFS_SB(vi->i_sb);
1493 ntfs_inode *ni, *base_ni, *bni;
1494 struct inode *bvi;
1495 MFT_RECORD *m;
1496 ATTR_RECORD *a;
1497 ntfs_attr_search_ctx *ctx;
1498 INDEX_ROOT *ir;
1499 u8 *ir_end, *index_end;
1500 int err = 0;
1501
1502 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1503 ntfs_init_big_inode(vi);
1504 ni = NTFS_I(vi);
1505 base_ni = NTFS_I(base_vi);
1506
1507 vi->i_version = base_vi->i_version;
1508 vi->i_uid = base_vi->i_uid;
1509 vi->i_gid = base_vi->i_gid;
1510 set_nlink(vi, base_vi->i_nlink);
1511 vi->i_mtime = base_vi->i_mtime;
1512 vi->i_ctime = base_vi->i_ctime;
1513 vi->i_atime = base_vi->i_atime;
1514 vi->i_generation = ni->seq_no = base_ni->seq_no;
1515
1516 vi->i_mode = base_vi->i_mode & ~S_IFMT;
1517
1518 m = map_mft_record(base_ni);
1519 if (IS_ERR(m)) {
1520 err = PTR_ERR(m);
1521 goto err_out;
1522 }
1523 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1524 if (!ctx) {
1525 err = -ENOMEM;
1526 goto unm_err_out;
1527 }
1528
1529 err = ntfs_attr_lookup(AT_INDEX_ROOT, ni->name, ni->name_len,
1530 CASE_SENSITIVE, 0, NULL, 0, ctx);
1531 if (unlikely(err)) {
1532 if (err == -ENOENT)
1533 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is "
1534 "missing.");
1535 goto unm_err_out;
1536 }
1537 a = ctx->attr;
1538
1539 if (unlikely(a->non_resident)) {
1540 ntfs_error(vol->sb, "$INDEX_ROOT attribute is not resident.");
1541 goto unm_err_out;
1542 }
1543
1544 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1545 le16_to_cpu(a->data.resident.value_offset)))) {
1546 ntfs_error(vol->sb, "$INDEX_ROOT attribute name is placed "
1547 "after the attribute value.");
1548 goto unm_err_out;
1549 }
1550
1551
1552
1553
1554 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_ENCRYPTED |
1555 ATTR_IS_SPARSE)) {
1556 ntfs_error(vi->i_sb, "Found compressed/encrypted/sparse index "
1557 "root attribute.");
1558 goto unm_err_out;
1559 }
1560 ir = (INDEX_ROOT*)((u8*)a + le16_to_cpu(a->data.resident.value_offset));
1561 ir_end = (u8*)ir + le32_to_cpu(a->data.resident.value_length);
1562 if (ir_end > (u8*)ctx->mrec + vol->mft_record_size) {
1563 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is corrupt.");
1564 goto unm_err_out;
1565 }
1566 index_end = (u8*)&ir->index + le32_to_cpu(ir->index.index_length);
1567 if (index_end > ir_end) {
1568 ntfs_error(vi->i_sb, "Index is corrupt.");
1569 goto unm_err_out;
1570 }
1571 if (ir->type) {
1572 ntfs_error(vi->i_sb, "Index type is not 0 (type is 0x%x).",
1573 le32_to_cpu(ir->type));
1574 goto unm_err_out;
1575 }
1576 ni->itype.index.collation_rule = ir->collation_rule;
1577 ntfs_debug("Index collation rule is 0x%x.",
1578 le32_to_cpu(ir->collation_rule));
1579 ni->itype.index.block_size = le32_to_cpu(ir->index_block_size);
1580 if (!is_power_of_2(ni->itype.index.block_size)) {
1581 ntfs_error(vi->i_sb, "Index block size (%u) is not a power of "
1582 "two.", ni->itype.index.block_size);
1583 goto unm_err_out;
1584 }
1585 if (ni->itype.index.block_size > PAGE_CACHE_SIZE) {
1586 ntfs_error(vi->i_sb, "Index block size (%u) > PAGE_CACHE_SIZE "
1587 "(%ld) is not supported. Sorry.",
1588 ni->itype.index.block_size, PAGE_CACHE_SIZE);
1589 err = -EOPNOTSUPP;
1590 goto unm_err_out;
1591 }
1592 if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) {
1593 ntfs_error(vi->i_sb, "Index block size (%u) < NTFS_BLOCK_SIZE "
1594 "(%i) is not supported. Sorry.",
1595 ni->itype.index.block_size, NTFS_BLOCK_SIZE);
1596 err = -EOPNOTSUPP;
1597 goto unm_err_out;
1598 }
1599 ni->itype.index.block_size_bits = ffs(ni->itype.index.block_size) - 1;
1600
1601 if (vol->cluster_size <= ni->itype.index.block_size) {
1602 ni->itype.index.vcn_size = vol->cluster_size;
1603 ni->itype.index.vcn_size_bits = vol->cluster_size_bits;
1604 } else {
1605 ni->itype.index.vcn_size = vol->sector_size;
1606 ni->itype.index.vcn_size_bits = vol->sector_size_bits;
1607 }
1608
1609 if (!(ir->index.flags & LARGE_INDEX)) {
1610
1611 vi->i_size = ni->initialized_size = ni->allocated_size = 0;
1612
1613 ntfs_attr_put_search_ctx(ctx);
1614 unmap_mft_record(base_ni);
1615 m = NULL;
1616 ctx = NULL;
1617 goto skip_large_index_stuff;
1618 }
1619 NInoSetIndexAllocPresent(ni);
1620
1621 ntfs_attr_reinit_search_ctx(ctx);
1622 err = ntfs_attr_lookup(AT_INDEX_ALLOCATION, ni->name, ni->name_len,
1623 CASE_SENSITIVE, 0, NULL, 0, ctx);
1624 if (unlikely(err)) {
1625 if (err == -ENOENT)
1626 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1627 "not present but $INDEX_ROOT "
1628 "indicated it is.");
1629 else
1630 ntfs_error(vi->i_sb, "Failed to lookup "
1631 "$INDEX_ALLOCATION attribute.");
1632 goto unm_err_out;
1633 }
1634 a = ctx->attr;
1635 if (!a->non_resident) {
1636 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1637 "resident.");
1638 goto unm_err_out;
1639 }
1640
1641
1642
1643 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1644 le16_to_cpu(
1645 a->data.non_resident.mapping_pairs_offset)))) {
1646 ntfs_error(vol->sb, "$INDEX_ALLOCATION attribute name is "
1647 "placed after the mapping pairs array.");
1648 goto unm_err_out;
1649 }
1650 if (a->flags & ATTR_IS_ENCRYPTED) {
1651 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1652 "encrypted.");
1653 goto unm_err_out;
1654 }
1655 if (a->flags & ATTR_IS_SPARSE) {
1656 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is sparse.");
1657 goto unm_err_out;
1658 }
1659 if (a->flags & ATTR_COMPRESSION_MASK) {
1660 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1661 "compressed.");
1662 goto unm_err_out;
1663 }
1664 if (a->data.non_resident.lowest_vcn) {
1665 ntfs_error(vi->i_sb, "First extent of $INDEX_ALLOCATION "
1666 "attribute has non zero lowest_vcn.");
1667 goto unm_err_out;
1668 }
1669 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1670 ni->initialized_size = sle64_to_cpu(
1671 a->data.non_resident.initialized_size);
1672 ni->allocated_size = sle64_to_cpu(a->data.non_resident.allocated_size);
1673
1674
1675
1676
1677 ntfs_attr_put_search_ctx(ctx);
1678 unmap_mft_record(base_ni);
1679 m = NULL;
1680 ctx = NULL;
1681
1682 bvi = ntfs_attr_iget(base_vi, AT_BITMAP, ni->name, ni->name_len);
1683 if (IS_ERR(bvi)) {
1684 ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
1685 err = PTR_ERR(bvi);
1686 goto unm_err_out;
1687 }
1688 bni = NTFS_I(bvi);
1689 if (NInoCompressed(bni) || NInoEncrypted(bni) ||
1690 NInoSparse(bni)) {
1691 ntfs_error(vi->i_sb, "$BITMAP attribute is compressed and/or "
1692 "encrypted and/or sparse.");
1693 goto iput_unm_err_out;
1694 }
1695
1696 bvi_size = i_size_read(bvi);
1697 if ((bvi_size << 3) < (vi->i_size >> ni->itype.index.block_size_bits)) {
1698 ntfs_error(vi->i_sb, "Index bitmap too small (0x%llx) for "
1699 "index allocation (0x%llx).", bvi_size << 3,
1700 vi->i_size);
1701 goto iput_unm_err_out;
1702 }
1703 iput(bvi);
1704skip_large_index_stuff:
1705
1706 vi->i_op = NULL;
1707 vi->i_fop = NULL;
1708 vi->i_mapping->a_ops = &ntfs_mst_aops;
1709 vi->i_blocks = ni->allocated_size >> 9;
1710
1711
1712
1713
1714 igrab(base_vi);
1715 ni->ext.base_ntfs_ino = base_ni;
1716 ni->nr_extents = -1;
1717
1718 ntfs_debug("Done.");
1719 return 0;
1720iput_unm_err_out:
1721 iput(bvi);
1722unm_err_out:
1723 if (!err)
1724 err = -EIO;
1725 if (ctx)
1726 ntfs_attr_put_search_ctx(ctx);
1727 if (m)
1728 unmap_mft_record(base_ni);
1729err_out:
1730 ntfs_error(vi->i_sb, "Failed with error code %i while reading index "
1731 "inode (mft_no 0x%lx, name_len %i.", err, vi->i_ino,
1732 ni->name_len);
1733 make_bad_inode(vi);
1734 if (err != -EOPNOTSUPP && err != -ENOMEM)
1735 NVolSetErrors(vol);
1736 return err;
1737}
1738
1739
1740
1741
1742
1743
1744
1745
1746static struct lock_class_key mft_ni_runlist_lock_key, mft_ni_mrec_lock_key;
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774int ntfs_read_inode_mount(struct inode *vi)
1775{
1776 VCN next_vcn, last_vcn, highest_vcn;
1777 s64 block;
1778 struct super_block *sb = vi->i_sb;
1779 ntfs_volume *vol = NTFS_SB(sb);
1780 struct buffer_head *bh;
1781 ntfs_inode *ni;
1782 MFT_RECORD *m = NULL;
1783 ATTR_RECORD *a;
1784 ntfs_attr_search_ctx *ctx;
1785 unsigned int i, nr_blocks;
1786 int err;
1787
1788 ntfs_debug("Entering.");
1789
1790
1791 ntfs_init_big_inode(vi);
1792
1793 ni = NTFS_I(vi);
1794
1795
1796 NInoSetNonResident(ni);
1797 NInoSetMstProtected(ni);
1798 NInoSetSparseDisabled(ni);
1799 ni->type = AT_DATA;
1800 ni->name = NULL;
1801 ni->name_len = 0;
1802
1803
1804
1805
1806 ni->itype.index.block_size = vol->mft_record_size;
1807 ni->itype.index.block_size_bits = vol->mft_record_size_bits;
1808
1809
1810 vol->mft_ino = vi;
1811
1812
1813 if (vol->mft_record_size > 64 * 1024) {
1814 ntfs_error(sb, "Unsupported mft record size %i (max 64kiB).",
1815 vol->mft_record_size);
1816 goto err_out;
1817 }
1818 i = vol->mft_record_size;
1819 if (i < sb->s_blocksize)
1820 i = sb->s_blocksize;
1821 m = (MFT_RECORD*)ntfs_malloc_nofs(i);
1822 if (!m) {
1823 ntfs_error(sb, "Failed to allocate buffer for $MFT record 0.");
1824 goto err_out;
1825 }
1826
1827
1828 block = vol->mft_lcn << vol->cluster_size_bits >>
1829 sb->s_blocksize_bits;
1830 nr_blocks = vol->mft_record_size >> sb->s_blocksize_bits;
1831 if (!nr_blocks)
1832 nr_blocks = 1;
1833
1834
1835 for (i = 0; i < nr_blocks; i++) {
1836 bh = sb_bread(sb, block++);
1837 if (!bh) {
1838 ntfs_error(sb, "Device read failed.");
1839 goto err_out;
1840 }
1841 memcpy((char*)m + (i << sb->s_blocksize_bits), bh->b_data,
1842 sb->s_blocksize);
1843 brelse(bh);
1844 }
1845
1846
1847 if (post_read_mst_fixup((NTFS_RECORD*)m, vol->mft_record_size)) {
1848
1849 ntfs_error(sb, "MST fixup failed. $MFT is corrupt.");
1850 goto err_out;
1851 }
1852
1853
1854 vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number);
1855
1856
1857 vi->i_mapping->a_ops = &ntfs_mst_aops;
1858
1859 ctx = ntfs_attr_get_search_ctx(ni, m);
1860 if (!ctx) {
1861 err = -ENOMEM;
1862 goto err_out;
1863 }
1864
1865
1866 err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx);
1867 if (err) {
1868 if (unlikely(err != -ENOENT)) {
1869 ntfs_error(sb, "Failed to lookup attribute list "
1870 "attribute. You should run chkdsk.");
1871 goto put_err_out;
1872 }
1873 } else {
1874 ATTR_LIST_ENTRY *al_entry, *next_al_entry;
1875 u8 *al_end;
1876 static const char *es = " Not allowed. $MFT is corrupt. "
1877 "You should run chkdsk.";
1878
1879 ntfs_debug("Attribute list attribute found in $MFT.");
1880 NInoSetAttrList(ni);
1881 a = ctx->attr;
1882 if (a->flags & ATTR_COMPRESSION_MASK) {
1883 ntfs_error(sb, "Attribute list attribute is "
1884 "compressed.%s", es);
1885 goto put_err_out;
1886 }
1887 if (a->flags & ATTR_IS_ENCRYPTED ||
1888 a->flags & ATTR_IS_SPARSE) {
1889 if (a->non_resident) {
1890 ntfs_error(sb, "Non-resident attribute list "
1891 "attribute is encrypted/"
1892 "sparse.%s", es);
1893 goto put_err_out;
1894 }
1895 ntfs_warning(sb, "Resident attribute list attribute "
1896 "in $MFT system file is marked "
1897 "encrypted/sparse which is not true. "
1898 "However, Windows allows this and "
1899 "chkdsk does not detect or correct it "
1900 "so we will just ignore the invalid "
1901 "flags and pretend they are not set.");
1902 }
1903
1904 ni->attr_list_size = (u32)ntfs_attr_size(a);
1905 ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size);
1906 if (!ni->attr_list) {
1907 ntfs_error(sb, "Not enough memory to allocate buffer "
1908 "for attribute list.");
1909 goto put_err_out;
1910 }
1911 if (a->non_resident) {
1912 NInoSetAttrListNonResident(ni);
1913 if (a->data.non_resident.lowest_vcn) {
1914 ntfs_error(sb, "Attribute list has non zero "
1915 "lowest_vcn. $MFT is corrupt. "
1916 "You should run chkdsk.");
1917 goto put_err_out;
1918 }
1919
1920 ni->attr_list_rl.rl = ntfs_mapping_pairs_decompress(vol,
1921 a, NULL);
1922 if (IS_ERR(ni->attr_list_rl.rl)) {
1923 err = PTR_ERR(ni->attr_list_rl.rl);
1924 ni->attr_list_rl.rl = NULL;
1925 ntfs_error(sb, "Mapping pairs decompression "
1926 "failed with error code %i.",
1927 -err);
1928 goto put_err_out;
1929 }
1930
1931 if ((err = load_attribute_list(vol, &ni->attr_list_rl,
1932 ni->attr_list, ni->attr_list_size,
1933 sle64_to_cpu(a->data.
1934 non_resident.initialized_size)))) {
1935 ntfs_error(sb, "Failed to load attribute list "
1936 "attribute with error code %i.",
1937 -err);
1938 goto put_err_out;
1939 }
1940 } else {
1941 if ((u8*)a + le16_to_cpu(
1942 a->data.resident.value_offset) +
1943 le32_to_cpu(
1944 a->data.resident.value_length) >
1945 (u8*)ctx->mrec + vol->mft_record_size) {
1946 ntfs_error(sb, "Corrupt attribute list "
1947 "attribute.");
1948 goto put_err_out;
1949 }
1950
1951 memcpy(ni->attr_list, (u8*)a + le16_to_cpu(
1952 a->data.resident.value_offset),
1953 le32_to_cpu(
1954 a->data.resident.value_length));
1955 }
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968 al_entry = (ATTR_LIST_ENTRY*)ni->attr_list;
1969 al_end = (u8*)al_entry + ni->attr_list_size;
1970 for (;; al_entry = next_al_entry) {
1971
1972 if ((u8*)al_entry < ni->attr_list ||
1973 (u8*)al_entry > al_end)
1974 goto em_put_err_out;
1975
1976 if ((u8*)al_entry == al_end)
1977 goto em_put_err_out;
1978 if (!al_entry->length)
1979 goto em_put_err_out;
1980 if ((u8*)al_entry + 6 > al_end || (u8*)al_entry +
1981 le16_to_cpu(al_entry->length) > al_end)
1982 goto em_put_err_out;
1983 next_al_entry = (ATTR_LIST_ENTRY*)((u8*)al_entry +
1984 le16_to_cpu(al_entry->length));
1985 if (le32_to_cpu(al_entry->type) > le32_to_cpu(AT_DATA))
1986 goto em_put_err_out;
1987 if (AT_DATA != al_entry->type)
1988 continue;
1989
1990 if (al_entry->name_length)
1991 goto em_put_err_out;
1992
1993 if (al_entry->lowest_vcn)
1994 goto em_put_err_out;
1995
1996 if (MREF_LE(al_entry->mft_reference) != vi->i_ino) {
1997
1998 ntfs_error(sb, "BUG: The first $DATA extent "
1999 "of $MFT is not in the base "
2000 "mft record. Please report "
2001 "you saw this message to "
2002 "linux-ntfs-dev@lists."
2003 "sourceforge.net");
2004 goto put_err_out;
2005 } else {
2006
2007 if (MSEQNO_LE(al_entry->mft_reference) !=
2008 ni->seq_no)
2009 goto em_put_err_out;
2010
2011 break;
2012 }
2013 }
2014 }
2015
2016 ntfs_attr_reinit_search_ctx(ctx);
2017
2018
2019 a = NULL;
2020 next_vcn = last_vcn = highest_vcn = 0;
2021 while (!(err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, next_vcn, NULL, 0,
2022 ctx))) {
2023 runlist_element *nrl;
2024
2025
2026 a = ctx->attr;
2027
2028 if (!a->non_resident) {
2029 ntfs_error(sb, "$MFT must be non-resident but a "
2030 "resident extent was found. $MFT is "
2031 "corrupt. Run chkdsk.");
2032 goto put_err_out;
2033 }
2034
2035 if (a->flags & ATTR_COMPRESSION_MASK ||
2036 a->flags & ATTR_IS_ENCRYPTED ||
2037 a->flags & ATTR_IS_SPARSE) {
2038 ntfs_error(sb, "$MFT must be uncompressed, "
2039 "non-sparse, and unencrypted but a "
2040 "compressed/sparse/encrypted extent "
2041 "was found. $MFT is corrupt. Run "
2042 "chkdsk.");
2043 goto put_err_out;
2044 }
2045
2046
2047
2048
2049
2050
2051 nrl = ntfs_mapping_pairs_decompress(vol, a, ni->runlist.rl);
2052 if (IS_ERR(nrl)) {
2053 ntfs_error(sb, "ntfs_mapping_pairs_decompress() "
2054 "failed with error code %ld. $MFT is "
2055 "corrupt.", PTR_ERR(nrl));
2056 goto put_err_out;
2057 }
2058 ni->runlist.rl = nrl;
2059
2060
2061 if (!next_vcn) {
2062 if (a->data.non_resident.lowest_vcn) {
2063 ntfs_error(sb, "First extent of $DATA "
2064 "attribute has non zero "
2065 "lowest_vcn. $MFT is corrupt. "
2066 "You should run chkdsk.");
2067 goto put_err_out;
2068 }
2069
2070 last_vcn = sle64_to_cpu(
2071 a->data.non_resident.allocated_size)
2072 >> vol->cluster_size_bits;
2073
2074 vi->i_size = sle64_to_cpu(
2075 a->data.non_resident.data_size);
2076 ni->initialized_size = sle64_to_cpu(
2077 a->data.non_resident.initialized_size);
2078 ni->allocated_size = sle64_to_cpu(
2079 a->data.non_resident.allocated_size);
2080
2081
2082
2083
2084 if ((vi->i_size >> vol->mft_record_size_bits) >=
2085 (1ULL << 32)) {
2086 ntfs_error(sb, "$MFT is too big! Aborting.");
2087 goto put_err_out;
2088 }
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108 ntfs_read_locked_inode(vi);
2109 if (is_bad_inode(vi)) {
2110 ntfs_error(sb, "ntfs_read_inode() of $MFT "
2111 "failed. BUG or corrupt $MFT. "
2112 "Run chkdsk and if no errors "
2113 "are found, please report you "
2114 "saw this message to "
2115 "linux-ntfs-dev@lists."
2116 "sourceforge.net");
2117 ntfs_attr_put_search_ctx(ctx);
2118
2119 ntfs_free(m);
2120 return -1;
2121 }
2122
2123
2124
2125
2126
2127 vi->i_uid = GLOBAL_ROOT_UID;
2128 vi->i_gid = GLOBAL_ROOT_GID;
2129
2130 vi->i_mode = S_IFREG;
2131
2132 vi->i_op = &ntfs_empty_inode_ops;
2133 vi->i_fop = &ntfs_empty_file_ops;
2134 }
2135
2136
2137 highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2138 next_vcn = highest_vcn + 1;
2139
2140
2141 if (next_vcn <= 0)
2142 break;
2143
2144
2145 if (next_vcn < sle64_to_cpu(
2146 a->data.non_resident.lowest_vcn)) {
2147 ntfs_error(sb, "$MFT has corrupt attribute list "
2148 "attribute. Run chkdsk.");
2149 goto put_err_out;
2150 }
2151 }
2152 if (err != -ENOENT) {
2153 ntfs_error(sb, "Failed to lookup $MFT/$DATA attribute extent. "
2154 "$MFT is corrupt. Run chkdsk.");
2155 goto put_err_out;
2156 }
2157 if (!a) {
2158 ntfs_error(sb, "$MFT/$DATA attribute not found. $MFT is "
2159 "corrupt. Run chkdsk.");
2160 goto put_err_out;
2161 }
2162 if (highest_vcn && highest_vcn != last_vcn - 1) {
2163 ntfs_error(sb, "Failed to load the complete runlist for "
2164 "$MFT/$DATA. Driver bug or corrupt $MFT. "
2165 "Run chkdsk.");
2166 ntfs_debug("highest_vcn = 0x%llx, last_vcn - 1 = 0x%llx",
2167 (unsigned long long)highest_vcn,
2168 (unsigned long long)last_vcn - 1);
2169 goto put_err_out;
2170 }
2171 ntfs_attr_put_search_ctx(ctx);
2172 ntfs_debug("Done.");
2173 ntfs_free(m);
2174
2175
2176
2177
2178
2179 lockdep_set_class(&ni->runlist.lock, &mft_ni_runlist_lock_key);
2180 lockdep_set_class(&ni->mrec_lock, &mft_ni_mrec_lock_key);
2181
2182 return 0;
2183
2184em_put_err_out:
2185 ntfs_error(sb, "Couldn't find first extent of $DATA attribute in "
2186 "attribute list. $MFT is corrupt. Run chkdsk.");
2187put_err_out:
2188 ntfs_attr_put_search_ctx(ctx);
2189err_out:
2190 ntfs_error(sb, "Failed. Marking inode as bad.");
2191 make_bad_inode(vi);
2192 ntfs_free(m);
2193 return -1;
2194}
2195
2196static void __ntfs_clear_inode(ntfs_inode *ni)
2197{
2198
2199 down_write(&ni->runlist.lock);
2200 if (ni->runlist.rl) {
2201 ntfs_free(ni->runlist.rl);
2202 ni->runlist.rl = NULL;
2203 }
2204 up_write(&ni->runlist.lock);
2205
2206 if (ni->attr_list) {
2207 ntfs_free(ni->attr_list);
2208 ni->attr_list = NULL;
2209 }
2210
2211 down_write(&ni->attr_list_rl.lock);
2212 if (ni->attr_list_rl.rl) {
2213 ntfs_free(ni->attr_list_rl.rl);
2214 ni->attr_list_rl.rl = NULL;
2215 }
2216 up_write(&ni->attr_list_rl.lock);
2217
2218 if (ni->name_len && ni->name != I30) {
2219
2220 BUG_ON(!ni->name);
2221 kfree(ni->name);
2222 }
2223}
2224
2225void ntfs_clear_extent_inode(ntfs_inode *ni)
2226{
2227 ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
2228
2229 BUG_ON(NInoAttr(ni));
2230 BUG_ON(ni->nr_extents != -1);
2231
2232#ifdef NTFS_RW
2233 if (NInoDirty(ni)) {
2234 if (!is_bad_inode(VFS_I(ni->ext.base_ntfs_ino)))
2235 ntfs_error(ni->vol->sb, "Clearing dirty extent inode! "
2236 "Losing data! This is a BUG!!!");
2237
2238 }
2239#endif
2240
2241 __ntfs_clear_inode(ni);
2242
2243
2244 ntfs_destroy_extent_inode(ni);
2245}
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257void ntfs_evict_big_inode(struct inode *vi)
2258{
2259 ntfs_inode *ni = NTFS_I(vi);
2260
2261 truncate_inode_pages(&vi->i_data, 0);
2262 clear_inode(vi);
2263
2264#ifdef NTFS_RW
2265 if (NInoDirty(ni)) {
2266 bool was_bad = (is_bad_inode(vi));
2267
2268
2269 ntfs_commit_inode(vi);
2270
2271 if (!was_bad && (is_bad_inode(vi) || NInoDirty(ni))) {
2272 ntfs_error(vi->i_sb, "Failed to commit dirty inode "
2273 "0x%lx. Losing data!", vi->i_ino);
2274
2275 }
2276 }
2277#endif
2278
2279
2280 if (ni->nr_extents > 0) {
2281 int i;
2282
2283 for (i = 0; i < ni->nr_extents; i++)
2284 ntfs_clear_extent_inode(ni->ext.extent_ntfs_inos[i]);
2285 kfree(ni->ext.extent_ntfs_inos);
2286 }
2287
2288 __ntfs_clear_inode(ni);
2289
2290 if (NInoAttr(ni)) {
2291
2292 if (ni->nr_extents == -1) {
2293 iput(VFS_I(ni->ext.base_ntfs_ino));
2294 ni->nr_extents = 0;
2295 ni->ext.base_ntfs_ino = NULL;
2296 }
2297 }
2298 return;
2299}
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311int ntfs_show_options(struct seq_file *sf, struct dentry *root)
2312{
2313 ntfs_volume *vol = NTFS_SB(root->d_sb);
2314 int i;
2315
2316 seq_printf(sf, ",uid=%i", from_kuid_munged(&init_user_ns, vol->uid));
2317 seq_printf(sf, ",gid=%i", from_kgid_munged(&init_user_ns, vol->gid));
2318 if (vol->fmask == vol->dmask)
2319 seq_printf(sf, ",umask=0%o", vol->fmask);
2320 else {
2321 seq_printf(sf, ",fmask=0%o", vol->fmask);
2322 seq_printf(sf, ",dmask=0%o", vol->dmask);
2323 }
2324 seq_printf(sf, ",nls=%s", vol->nls_map->charset);
2325 if (NVolCaseSensitive(vol))
2326 seq_printf(sf, ",case_sensitive");
2327 if (NVolShowSystemFiles(vol))
2328 seq_printf(sf, ",show_sys_files");
2329 if (!NVolSparseEnabled(vol))
2330 seq_printf(sf, ",disable_sparse");
2331 for (i = 0; on_errors_arr[i].val; i++) {
2332 if (on_errors_arr[i].val & vol->on_errors)
2333 seq_printf(sf, ",errors=%s", on_errors_arr[i].str);
2334 }
2335 seq_printf(sf, ",mft_zone_multiplier=%i", vol->mft_zone_multiplier);
2336 return 0;
2337}
2338
2339#ifdef NTFS_RW
2340
2341static const char *es = " Leaving inconsistent metadata. Unmount and run "
2342 "chkdsk.";
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362int ntfs_truncate(struct inode *vi)
2363{
2364 s64 new_size, old_size, nr_freed, new_alloc_size, old_alloc_size;
2365 VCN highest_vcn;
2366 unsigned long flags;
2367 ntfs_inode *base_ni, *ni = NTFS_I(vi);
2368 ntfs_volume *vol = ni->vol;
2369 ntfs_attr_search_ctx *ctx;
2370 MFT_RECORD *m;
2371 ATTR_RECORD *a;
2372 const char *te = " Leaving file length out of sync with i_size.";
2373 int err, mp_size, size_change, alloc_change;
2374 u32 attr_len;
2375
2376 ntfs_debug("Entering for inode 0x%lx.", vi->i_ino);
2377 BUG_ON(NInoAttr(ni));
2378 BUG_ON(S_ISDIR(vi->i_mode));
2379 BUG_ON(NInoMstProtected(ni));
2380 BUG_ON(ni->nr_extents < 0);
2381retry_truncate:
2382
2383
2384
2385
2386 down_write(&ni->runlist.lock);
2387 if (!NInoAttr(ni))
2388 base_ni = ni;
2389 else
2390 base_ni = ni->ext.base_ntfs_ino;
2391 m = map_mft_record(base_ni);
2392 if (IS_ERR(m)) {
2393 err = PTR_ERR(m);
2394 ntfs_error(vi->i_sb, "Failed to map mft record for inode 0x%lx "
2395 "(error code %d).%s", vi->i_ino, err, te);
2396 ctx = NULL;
2397 m = NULL;
2398 goto old_bad_out;
2399 }
2400 ctx = ntfs_attr_get_search_ctx(base_ni, m);
2401 if (unlikely(!ctx)) {
2402 ntfs_error(vi->i_sb, "Failed to allocate a search context for "
2403 "inode 0x%lx (not enough memory).%s",
2404 vi->i_ino, te);
2405 err = -ENOMEM;
2406 goto old_bad_out;
2407 }
2408 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
2409 CASE_SENSITIVE, 0, NULL, 0, ctx);
2410 if (unlikely(err)) {
2411 if (err == -ENOENT) {
2412 ntfs_error(vi->i_sb, "Open attribute is missing from "
2413 "mft record. Inode 0x%lx is corrupt. "
2414 "Run chkdsk.%s", vi->i_ino, te);
2415 err = -EIO;
2416 } else
2417 ntfs_error(vi->i_sb, "Failed to lookup attribute in "
2418 "inode 0x%lx (error code %d).%s",
2419 vi->i_ino, err, te);
2420 goto old_bad_out;
2421 }
2422 m = ctx->mrec;
2423 a = ctx->attr;
2424
2425
2426
2427 new_size = i_size_read(vi);
2428
2429 old_size = ntfs_attr_size(a);
2430
2431 if (NInoNonResident(ni))
2432 new_alloc_size = (new_size + vol->cluster_size - 1) &
2433 ~(s64)vol->cluster_size_mask;
2434 else
2435 new_alloc_size = (new_size + 7) & ~7;
2436
2437 read_lock_irqsave(&ni->size_lock, flags);
2438 old_alloc_size = ni->allocated_size;
2439 read_unlock_irqrestore(&ni->size_lock, flags);
2440
2441
2442
2443
2444 size_change = -1;
2445 if (new_size - old_size >= 0) {
2446 size_change = 1;
2447 if (new_size == old_size)
2448 size_change = 0;
2449 }
2450
2451 alloc_change = -1;
2452 if (new_alloc_size - old_alloc_size >= 0) {
2453 alloc_change = 1;
2454 if (new_alloc_size == old_alloc_size)
2455 alloc_change = 0;
2456 }
2457
2458
2459
2460
2461 if (!size_change && !alloc_change)
2462 goto unm_done;
2463
2464 if (size_change) {
2465 err = ntfs_attr_size_bounds_check(vol, ni->type, new_size);
2466 if (unlikely(err)) {
2467 if (err == -ERANGE) {
2468 ntfs_error(vol->sb, "Truncate would cause the "
2469 "inode 0x%lx to %simum size "
2470 "for its attribute type "
2471 "(0x%x). Aborting truncate.",
2472 vi->i_ino,
2473 new_size > old_size ? "exceed "
2474 "the max" : "go under the min",
2475 le32_to_cpu(ni->type));
2476 err = -EFBIG;
2477 } else {
2478 ntfs_error(vol->sb, "Inode 0x%lx has unknown "
2479 "attribute type 0x%x. "
2480 "Aborting truncate.",
2481 vi->i_ino,
2482 le32_to_cpu(ni->type));
2483 err = -EIO;
2484 }
2485
2486 i_size_write(vi, old_size);
2487 goto err_out;
2488 }
2489 }
2490 if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2491 ntfs_warning(vi->i_sb, "Changes in inode size are not "
2492 "supported yet for %s files, ignoring.",
2493 NInoCompressed(ni) ? "compressed" :
2494 "encrypted");
2495 err = -EOPNOTSUPP;
2496 goto bad_out;
2497 }
2498 if (a->non_resident)
2499 goto do_non_resident_truncate;
2500 BUG_ON(NInoNonResident(ni));
2501
2502 if (new_size < vol->mft_record_size &&
2503 !ntfs_resident_attr_value_resize(m, a, new_size)) {
2504
2505 flush_dcache_mft_record_page(ctx->ntfs_ino);
2506 mark_mft_record_dirty(ctx->ntfs_ino);
2507 write_lock_irqsave(&ni->size_lock, flags);
2508
2509 ni->allocated_size = le32_to_cpu(a->length) -
2510 le16_to_cpu(a->data.resident.value_offset);
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539 ni->initialized_size = new_size;
2540 write_unlock_irqrestore(&ni->size_lock, flags);
2541 goto unm_done;
2542 }
2543
2544 BUG_ON(size_change < 0);
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554 ntfs_attr_put_search_ctx(ctx);
2555 unmap_mft_record(base_ni);
2556 up_write(&ni->runlist.lock);
2557
2558
2559
2560
2561 err = ntfs_attr_make_non_resident(ni, old_size);
2562 if (likely(!err))
2563 goto retry_truncate;
2564
2565
2566
2567
2568
2569 if (unlikely(err != -EPERM && err != -ENOSPC)) {
2570 ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, attribute "
2571 "type 0x%x, because the conversion from "
2572 "resident to non-resident attribute failed "
2573 "with error code %i.", vi->i_ino,
2574 (unsigned)le32_to_cpu(ni->type), err);
2575 if (err != -ENOMEM)
2576 err = -EIO;
2577 goto conv_err_out;
2578 }
2579
2580 if (err == -ENOSPC)
2581 ntfs_error(vol->sb, "Not enough space in the mft record/on "
2582 "disk for the non-resident attribute value. "
2583 "This case is not implemented yet.");
2584 else
2585 ntfs_error(vol->sb, "This attribute type may not be "
2586 "non-resident. This case is not implemented "
2587 "yet.");
2588 err = -EOPNOTSUPP;
2589 goto conv_err_out;
2590#if 0
2591
2592 if (!err)
2593 goto do_resident_extend;
2594
2595
2596
2597
2598
2599
2600 if (ni->type == AT_ATTRIBUTE_LIST ||
2601 ni->type == AT_STANDARD_INFORMATION) {
2602
2603
2604 err = -EOPNOTSUPP;
2605 if (!err)
2606 goto do_resident_extend;
2607 goto err_out;
2608 }
2609
2610
2611
2612 err = -EOPNOTSUPP;
2613 if (!err)
2614 goto do_resident_extend;
2615
2616 goto err_out;
2617#endif
2618do_non_resident_truncate:
2619 BUG_ON(!NInoNonResident(ni));
2620 if (alloc_change < 0) {
2621 highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2622 if (highest_vcn > 0 &&
2623 old_alloc_size >> vol->cluster_size_bits >
2624 highest_vcn + 1) {
2625
2626
2627
2628
2629 ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, "
2630 "attribute type 0x%x, because the "
2631 "attribute is highly fragmented (it "
2632 "consists of multiple extents) and "
2633 "this case is not implemented yet.",
2634 vi->i_ino,
2635 (unsigned)le32_to_cpu(ni->type));
2636 err = -EOPNOTSUPP;
2637 goto bad_out;
2638 }
2639 }
2640
2641
2642
2643
2644 if (size_change < 0) {
2645
2646
2647
2648 write_lock_irqsave(&ni->size_lock, flags);
2649 if (new_size < ni->initialized_size) {
2650 ni->initialized_size = new_size;
2651 a->data.non_resident.initialized_size =
2652 cpu_to_sle64(new_size);
2653 }
2654 a->data.non_resident.data_size = cpu_to_sle64(new_size);
2655 write_unlock_irqrestore(&ni->size_lock, flags);
2656 flush_dcache_mft_record_page(ctx->ntfs_ino);
2657 mark_mft_record_dirty(ctx->ntfs_ino);
2658
2659 if (!alloc_change)
2660 goto unm_done;
2661
2662
2663
2664
2665 BUG_ON(alloc_change > 0);
2666 } else {
2667
2668
2669
2670
2671 if (alloc_change > 0) {
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687 ntfs_attr_put_search_ctx(ctx);
2688 unmap_mft_record(base_ni);
2689 up_write(&ni->runlist.lock);
2690 err = ntfs_attr_extend_allocation(ni, new_size,
2691 size_change > 0 ? new_size : -1, -1);
2692
2693
2694
2695
2696 goto done;
2697 }
2698 if (!alloc_change)
2699 goto alloc_done;
2700 }
2701
2702
2703 nr_freed = ntfs_cluster_free(ni, new_alloc_size >>
2704 vol->cluster_size_bits, -1, ctx);
2705 m = ctx->mrec;
2706 a = ctx->attr;
2707 if (unlikely(nr_freed < 0)) {
2708 ntfs_error(vol->sb, "Failed to release cluster(s) (error code "
2709 "%lli). Unmount and run chkdsk to recover "
2710 "the lost cluster(s).", (long long)nr_freed);
2711 NVolSetErrors(vol);
2712 nr_freed = 0;
2713 }
2714
2715 err = ntfs_rl_truncate_nolock(vol, &ni->runlist,
2716 new_alloc_size >> vol->cluster_size_bits);
2717
2718
2719
2720
2721
2722
2723 if (unlikely(err || IS_ERR(m))) {
2724 ntfs_error(vol->sb, "Failed to %s (error code %li).%s",
2725 IS_ERR(m) ?
2726 "restore attribute search context" :
2727 "truncate attribute runlist",
2728 IS_ERR(m) ? PTR_ERR(m) : err, es);
2729 err = -EIO;
2730 goto bad_out;
2731 }
2732
2733 mp_size = ntfs_get_size_for_mapping_pairs(vol, ni->runlist.rl, 0, -1);
2734 if (unlikely(mp_size <= 0)) {
2735 ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2736 "attribute type 0x%x, because determining the "
2737 "size for the mapping pairs failed with error "
2738 "code %i.%s", vi->i_ino,
2739 (unsigned)le32_to_cpu(ni->type), mp_size, es);
2740 err = -EIO;
2741 goto bad_out;
2742 }
2743
2744
2745
2746
2747
2748 attr_len = le32_to_cpu(a->length);
2749 err = ntfs_attr_record_resize(m, a, mp_size +
2750 le16_to_cpu(a->data.non_resident.mapping_pairs_offset));
2751 BUG_ON(err);
2752
2753
2754
2755 err = ntfs_mapping_pairs_build(vol, (u8*)a +
2756 le16_to_cpu(a->data.non_resident.mapping_pairs_offset),
2757 mp_size, ni->runlist.rl, 0, -1, NULL);
2758 if (unlikely(err)) {
2759 ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2760 "attribute type 0x%x, because building the "
2761 "mapping pairs failed with error code %i.%s",
2762 vi->i_ino, (unsigned)le32_to_cpu(ni->type),
2763 err, es);
2764 err = -EIO;
2765 goto bad_out;
2766 }
2767
2768 a->data.non_resident.highest_vcn = cpu_to_sle64((new_alloc_size >>
2769 vol->cluster_size_bits) - 1);
2770 write_lock_irqsave(&ni->size_lock, flags);
2771 ni->allocated_size = new_alloc_size;
2772 a->data.non_resident.allocated_size = cpu_to_sle64(new_alloc_size);
2773 if (NInoSparse(ni) || NInoCompressed(ni)) {
2774 if (nr_freed) {
2775 ni->itype.compressed.size -= nr_freed <<
2776 vol->cluster_size_bits;
2777 BUG_ON(ni->itype.compressed.size < 0);
2778 a->data.non_resident.compressed_size = cpu_to_sle64(
2779 ni->itype.compressed.size);
2780 vi->i_blocks = ni->itype.compressed.size >> 9;
2781 }
2782 } else
2783 vi->i_blocks = new_alloc_size >> 9;
2784 write_unlock_irqrestore(&ni->size_lock, flags);
2785
2786
2787
2788
2789
2790
2791
2792
2793alloc_done:
2794
2795
2796
2797
2798 if (size_change > 0)
2799 a->data.non_resident.data_size = cpu_to_sle64(new_size);
2800
2801 flush_dcache_mft_record_page(ctx->ntfs_ino);
2802 mark_mft_record_dirty(ctx->ntfs_ino);
2803unm_done:
2804 ntfs_attr_put_search_ctx(ctx);
2805 unmap_mft_record(base_ni);
2806 up_write(&ni->runlist.lock);
2807done:
2808
2809
2810
2811
2812
2813
2814 if (!IS_NOCMTIME(VFS_I(base_ni)) && !IS_RDONLY(VFS_I(base_ni))) {
2815 struct timespec now = current_fs_time(VFS_I(base_ni)->i_sb);
2816 int sync_it = 0;
2817
2818 if (!timespec_equal(&VFS_I(base_ni)->i_mtime, &now) ||
2819 !timespec_equal(&VFS_I(base_ni)->i_ctime, &now))
2820 sync_it = 1;
2821 VFS_I(base_ni)->i_mtime = now;
2822 VFS_I(base_ni)->i_ctime = now;
2823
2824 if (sync_it)
2825 mark_inode_dirty_sync(VFS_I(base_ni));
2826 }
2827
2828 if (likely(!err)) {
2829 NInoClearTruncateFailed(ni);
2830 ntfs_debug("Done.");
2831 }
2832 return err;
2833old_bad_out:
2834 old_size = -1;
2835bad_out:
2836 if (err != -ENOMEM && err != -EOPNOTSUPP)
2837 NVolSetErrors(vol);
2838 if (err != -EOPNOTSUPP)
2839 NInoSetTruncateFailed(ni);
2840 else if (old_size >= 0)
2841 i_size_write(vi, old_size);
2842err_out:
2843 if (ctx)
2844 ntfs_attr_put_search_ctx(ctx);
2845 if (m)
2846 unmap_mft_record(base_ni);
2847 up_write(&ni->runlist.lock);
2848out:
2849 ntfs_debug("Failed. Returning error code %i.", err);
2850 return err;
2851conv_err_out:
2852 if (err != -ENOMEM && err != -EOPNOTSUPP)
2853 NVolSetErrors(vol);
2854 if (err != -EOPNOTSUPP)
2855 NInoSetTruncateFailed(ni);
2856 else
2857 i_size_write(vi, old_size);
2858 goto out;
2859}
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869void ntfs_truncate_vfs(struct inode *vi) {
2870 ntfs_truncate(vi);
2871}
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887int ntfs_setattr(struct dentry *dentry, struct iattr *attr)
2888{
2889 struct inode *vi = dentry->d_inode;
2890 int err;
2891 unsigned int ia_valid = attr->ia_valid;
2892
2893 err = inode_change_ok(vi, attr);
2894 if (err)
2895 goto out;
2896
2897 if (ia_valid & (ATTR_UID | ATTR_GID | ATTR_MODE)) {
2898 ntfs_warning(vi->i_sb, "Changes in user/group/mode are not "
2899 "supported yet, ignoring.");
2900 err = -EOPNOTSUPP;
2901 goto out;
2902 }
2903 if (ia_valid & ATTR_SIZE) {
2904 if (attr->ia_size != i_size_read(vi)) {
2905 ntfs_inode *ni = NTFS_I(vi);
2906
2907
2908
2909
2910 if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2911 ntfs_warning(vi->i_sb, "Changes in inode size "
2912 "are not supported yet for "
2913 "%s files, ignoring.",
2914 NInoCompressed(ni) ?
2915 "compressed" : "encrypted");
2916 err = -EOPNOTSUPP;
2917 } else
2918 err = vmtruncate(vi, attr->ia_size);
2919 if (err || ia_valid == ATTR_SIZE)
2920 goto out;
2921 } else {
2922
2923
2924
2925
2926 ia_valid |= ATTR_MTIME | ATTR_CTIME;
2927 }
2928 }
2929 if (ia_valid & ATTR_ATIME)
2930 vi->i_atime = timespec_trunc(attr->ia_atime,
2931 vi->i_sb->s_time_gran);
2932 if (ia_valid & ATTR_MTIME)
2933 vi->i_mtime = timespec_trunc(attr->ia_mtime,
2934 vi->i_sb->s_time_gran);
2935 if (ia_valid & ATTR_CTIME)
2936 vi->i_ctime = timespec_trunc(attr->ia_ctime,
2937 vi->i_sb->s_time_gran);
2938 mark_inode_dirty(vi);
2939out:
2940 return err;
2941}
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961int __ntfs_write_inode(struct inode *vi, int sync)
2962{
2963 sle64 nt;
2964 ntfs_inode *ni = NTFS_I(vi);
2965 ntfs_attr_search_ctx *ctx;
2966 MFT_RECORD *m;
2967 STANDARD_INFORMATION *si;
2968 int err = 0;
2969 bool modified = false;
2970
2971 ntfs_debug("Entering for %sinode 0x%lx.", NInoAttr(ni) ? "attr " : "",
2972 vi->i_ino);
2973
2974
2975
2976
2977
2978 if (NInoAttr(ni)) {
2979 NInoClearDirty(ni);
2980 ntfs_debug("Done.");
2981 return 0;
2982 }
2983
2984 m = map_mft_record(ni);
2985 if (IS_ERR(m)) {
2986 err = PTR_ERR(m);
2987 goto err_out;
2988 }
2989
2990 ctx = ntfs_attr_get_search_ctx(ni, m);
2991 if (unlikely(!ctx)) {
2992 err = -ENOMEM;
2993 goto unm_err_out;
2994 }
2995 err = ntfs_attr_lookup(AT_STANDARD_INFORMATION, NULL, 0,
2996 CASE_SENSITIVE, 0, NULL, 0, ctx);
2997 if (unlikely(err)) {
2998 ntfs_attr_put_search_ctx(ctx);
2999 goto unm_err_out;
3000 }
3001 si = (STANDARD_INFORMATION*)((u8*)ctx->attr +
3002 le16_to_cpu(ctx->attr->data.resident.value_offset));
3003
3004 nt = utc2ntfs(vi->i_mtime);
3005 if (si->last_data_change_time != nt) {
3006 ntfs_debug("Updating mtime for inode 0x%lx: old = 0x%llx, "
3007 "new = 0x%llx", vi->i_ino, (long long)
3008 sle64_to_cpu(si->last_data_change_time),
3009 (long long)sle64_to_cpu(nt));
3010 si->last_data_change_time = nt;
3011 modified = true;
3012 }
3013 nt = utc2ntfs(vi->i_ctime);
3014 if (si->last_mft_change_time != nt) {
3015 ntfs_debug("Updating ctime for inode 0x%lx: old = 0x%llx, "
3016 "new = 0x%llx", vi->i_ino, (long long)
3017 sle64_to_cpu(si->last_mft_change_time),
3018 (long long)sle64_to_cpu(nt));
3019 si->last_mft_change_time = nt;
3020 modified = true;
3021 }
3022 nt = utc2ntfs(vi->i_atime);
3023 if (si->last_access_time != nt) {
3024 ntfs_debug("Updating atime for inode 0x%lx: old = 0x%llx, "
3025 "new = 0x%llx", vi->i_ino,
3026 (long long)sle64_to_cpu(si->last_access_time),
3027 (long long)sle64_to_cpu(nt));
3028 si->last_access_time = nt;
3029 modified = true;
3030 }
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047 if (modified) {
3048 flush_dcache_mft_record_page(ctx->ntfs_ino);
3049 if (!NInoTestSetDirty(ctx->ntfs_ino))
3050 mark_ntfs_record_dirty(ctx->ntfs_ino->page,
3051 ctx->ntfs_ino->page_ofs);
3052 }
3053 ntfs_attr_put_search_ctx(ctx);
3054
3055 if (NInoDirty(ni))
3056 err = write_mft_record(ni, m, sync);
3057
3058 mutex_lock(&ni->extent_lock);
3059 if (ni->nr_extents > 0) {
3060 ntfs_inode **extent_nis = ni->ext.extent_ntfs_inos;
3061 int i;
3062
3063 ntfs_debug("Writing %i extent inodes.", ni->nr_extents);
3064 for (i = 0; i < ni->nr_extents; i++) {
3065 ntfs_inode *tni = extent_nis[i];
3066
3067 if (NInoDirty(tni)) {
3068 MFT_RECORD *tm = map_mft_record(tni);
3069 int ret;
3070
3071 if (IS_ERR(tm)) {
3072 if (!err || err == -ENOMEM)
3073 err = PTR_ERR(tm);
3074 continue;
3075 }
3076 ret = write_mft_record(tni, tm, sync);
3077 unmap_mft_record(tni);
3078 if (unlikely(ret)) {
3079 if (!err || err == -ENOMEM)
3080 err = ret;
3081 }
3082 }
3083 }
3084 }
3085 mutex_unlock(&ni->extent_lock);
3086 unmap_mft_record(ni);
3087 if (unlikely(err))
3088 goto err_out;
3089 ntfs_debug("Done.");
3090 return 0;
3091unm_err_out:
3092 unmap_mft_record(ni);
3093err_out:
3094 if (err == -ENOMEM) {
3095 ntfs_warning(vi->i_sb, "Not enough memory to write inode. "
3096 "Marking the inode dirty again, so the VFS "
3097 "retries later.");
3098 mark_inode_dirty(vi);
3099 } else {
3100 ntfs_error(vi->i_sb, "Failed (error %i): Run chkdsk.", -err);
3101 NVolSetErrors(ni->vol);
3102 }
3103 return err;
3104}
3105
3106#endif
3107