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_SIZE) {
872 ntfs_error(vi->i_sb, "Index block size (%u) > "
873 "PAGE_SIZE (%ld) is not "
874 "supported. Sorry.",
875 ni->itype.index.block_size,
876 PAGE_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 vi->i_mapping->a_ops = &ntfs_mst_aops;
1015 } else {
1016
1017 ntfs_attr_reinit_search_ctx(ctx);
1018
1019
1020 ni->type = AT_DATA;
1021 ni->name = NULL;
1022 ni->name_len = 0;
1023
1024
1025 err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, 0, NULL, 0, ctx);
1026 if (unlikely(err)) {
1027 vi->i_size = ni->initialized_size =
1028 ni->allocated_size = 0;
1029 if (err != -ENOENT) {
1030 ntfs_error(vi->i_sb, "Failed to lookup $DATA "
1031 "attribute.");
1032 goto unm_err_out;
1033 }
1034
1035
1036
1037
1038 if (vi->i_ino == FILE_Secure)
1039 goto no_data_attr_special_case;
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049 if (ntfs_is_extended_system_file(ctx) > 0)
1050 goto no_data_attr_special_case;
1051
1052
1053 ntfs_error(vi->i_sb, "$DATA attribute is missing.");
1054 goto unm_err_out;
1055 }
1056 a = ctx->attr;
1057
1058 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) {
1059 if (a->flags & ATTR_COMPRESSION_MASK) {
1060 NInoSetCompressed(ni);
1061 if (vol->cluster_size > 4096) {
1062 ntfs_error(vi->i_sb, "Found "
1063 "compressed data but "
1064 "compression is "
1065 "disabled due to "
1066 "cluster size (%i) > "
1067 "4kiB.",
1068 vol->cluster_size);
1069 goto unm_err_out;
1070 }
1071 if ((a->flags & ATTR_COMPRESSION_MASK)
1072 != ATTR_IS_COMPRESSED) {
1073 ntfs_error(vi->i_sb, "Found unknown "
1074 "compression method "
1075 "or corrupt file.");
1076 goto unm_err_out;
1077 }
1078 }
1079 if (a->flags & ATTR_IS_SPARSE)
1080 NInoSetSparse(ni);
1081 }
1082 if (a->flags & ATTR_IS_ENCRYPTED) {
1083 if (NInoCompressed(ni)) {
1084 ntfs_error(vi->i_sb, "Found encrypted and "
1085 "compressed data.");
1086 goto unm_err_out;
1087 }
1088 NInoSetEncrypted(ni);
1089 }
1090 if (a->non_resident) {
1091 NInoSetNonResident(ni);
1092 if (NInoCompressed(ni) || NInoSparse(ni)) {
1093 if (NInoCompressed(ni) && a->data.non_resident.
1094 compression_unit != 4) {
1095 ntfs_error(vi->i_sb, "Found "
1096 "non-standard "
1097 "compression unit (%u "
1098 "instead of 4). "
1099 "Cannot handle this.",
1100 a->data.non_resident.
1101 compression_unit);
1102 err = -EOPNOTSUPP;
1103 goto unm_err_out;
1104 }
1105 if (a->data.non_resident.compression_unit) {
1106 ni->itype.compressed.block_size = 1U <<
1107 (a->data.non_resident.
1108 compression_unit +
1109 vol->cluster_size_bits);
1110 ni->itype.compressed.block_size_bits =
1111 ffs(ni->itype.
1112 compressed.
1113 block_size) - 1;
1114 ni->itype.compressed.block_clusters =
1115 1U << a->data.
1116 non_resident.
1117 compression_unit;
1118 } else {
1119 ni->itype.compressed.block_size = 0;
1120 ni->itype.compressed.block_size_bits =
1121 0;
1122 ni->itype.compressed.block_clusters =
1123 0;
1124 }
1125 ni->itype.compressed.size = sle64_to_cpu(
1126 a->data.non_resident.
1127 compressed_size);
1128 }
1129 if (a->data.non_resident.lowest_vcn) {
1130 ntfs_error(vi->i_sb, "First extent of $DATA "
1131 "attribute has non zero "
1132 "lowest_vcn.");
1133 goto unm_err_out;
1134 }
1135 vi->i_size = sle64_to_cpu(
1136 a->data.non_resident.data_size);
1137 ni->initialized_size = sle64_to_cpu(
1138 a->data.non_resident.initialized_size);
1139 ni->allocated_size = sle64_to_cpu(
1140 a->data.non_resident.allocated_size);
1141 } else {
1142 vi->i_size = ni->initialized_size = le32_to_cpu(
1143 a->data.resident.value_length);
1144 ni->allocated_size = le32_to_cpu(a->length) -
1145 le16_to_cpu(
1146 a->data.resident.value_offset);
1147 if (vi->i_size > ni->allocated_size) {
1148 ntfs_error(vi->i_sb, "Resident data attribute "
1149 "is corrupt (size exceeds "
1150 "allocation).");
1151 goto unm_err_out;
1152 }
1153 }
1154no_data_attr_special_case:
1155
1156 ntfs_attr_put_search_ctx(ctx);
1157 unmap_mft_record(ni);
1158 m = NULL;
1159 ctx = NULL;
1160
1161 vi->i_op = &ntfs_file_inode_ops;
1162 vi->i_fop = &ntfs_file_ops;
1163 vi->i_mapping->a_ops = &ntfs_normal_aops;
1164 if (NInoMstProtected(ni))
1165 vi->i_mapping->a_ops = &ntfs_mst_aops;
1166 else if (NInoCompressed(ni))
1167 vi->i_mapping->a_ops = &ntfs_compressed_aops;
1168 }
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180 if (S_ISREG(vi->i_mode) && (NInoCompressed(ni) || NInoSparse(ni)))
1181 vi->i_blocks = ni->itype.compressed.size >> 9;
1182 else
1183 vi->i_blocks = ni->allocated_size >> 9;
1184 ntfs_debug("Done.");
1185 return 0;
1186iput_unm_err_out:
1187 iput(bvi);
1188unm_err_out:
1189 if (!err)
1190 err = -EIO;
1191 if (ctx)
1192 ntfs_attr_put_search_ctx(ctx);
1193 if (m)
1194 unmap_mft_record(ni);
1195err_out:
1196 ntfs_error(vol->sb, "Failed with error code %i. Marking corrupt "
1197 "inode 0x%lx as bad. Run chkdsk.", err, vi->i_ino);
1198 make_bad_inode(vi);
1199 if (err != -EOPNOTSUPP && err != -ENOMEM)
1200 NVolSetErrors(vol);
1201 return err;
1202}
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi)
1227{
1228 ntfs_volume *vol = NTFS_SB(vi->i_sb);
1229 ntfs_inode *ni, *base_ni;
1230 MFT_RECORD *m;
1231 ATTR_RECORD *a;
1232 ntfs_attr_search_ctx *ctx;
1233 int err = 0;
1234
1235 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1236
1237 ntfs_init_big_inode(vi);
1238
1239 ni = NTFS_I(vi);
1240 base_ni = NTFS_I(base_vi);
1241
1242
1243 vi->i_version = base_vi->i_version;
1244 vi->i_uid = base_vi->i_uid;
1245 vi->i_gid = base_vi->i_gid;
1246 set_nlink(vi, base_vi->i_nlink);
1247 vi->i_mtime = base_vi->i_mtime;
1248 vi->i_ctime = base_vi->i_ctime;
1249 vi->i_atime = base_vi->i_atime;
1250 vi->i_generation = ni->seq_no = base_ni->seq_no;
1251
1252
1253 vi->i_mode = base_vi->i_mode & ~S_IFMT;
1254
1255 m = map_mft_record(base_ni);
1256 if (IS_ERR(m)) {
1257 err = PTR_ERR(m);
1258 goto err_out;
1259 }
1260 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1261 if (!ctx) {
1262 err = -ENOMEM;
1263 goto unm_err_out;
1264 }
1265
1266 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
1267 CASE_SENSITIVE, 0, NULL, 0, ctx);
1268 if (unlikely(err))
1269 goto unm_err_out;
1270 a = ctx->attr;
1271 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) {
1272 if (a->flags & ATTR_COMPRESSION_MASK) {
1273 NInoSetCompressed(ni);
1274 if ((ni->type != AT_DATA) || (ni->type == AT_DATA &&
1275 ni->name_len)) {
1276 ntfs_error(vi->i_sb, "Found compressed "
1277 "non-data or named data "
1278 "attribute. Please report "
1279 "you saw this message to "
1280 "linux-ntfs-dev@lists."
1281 "sourceforge.net");
1282 goto unm_err_out;
1283 }
1284 if (vol->cluster_size > 4096) {
1285 ntfs_error(vi->i_sb, "Found compressed "
1286 "attribute but compression is "
1287 "disabled due to cluster size "
1288 "(%i) > 4kiB.",
1289 vol->cluster_size);
1290 goto unm_err_out;
1291 }
1292 if ((a->flags & ATTR_COMPRESSION_MASK) !=
1293 ATTR_IS_COMPRESSED) {
1294 ntfs_error(vi->i_sb, "Found unknown "
1295 "compression method.");
1296 goto unm_err_out;
1297 }
1298 }
1299
1300
1301
1302
1303 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1304 ntfs_error(vi->i_sb, "Found mst protected attribute "
1305 "but the attribute is %s. Please "
1306 "report you saw this message to "
1307 "linux-ntfs-dev@lists.sourceforge.net",
1308 NInoCompressed(ni) ? "compressed" :
1309 "sparse");
1310 goto unm_err_out;
1311 }
1312 if (a->flags & ATTR_IS_SPARSE)
1313 NInoSetSparse(ni);
1314 }
1315 if (a->flags & ATTR_IS_ENCRYPTED) {
1316 if (NInoCompressed(ni)) {
1317 ntfs_error(vi->i_sb, "Found encrypted and compressed "
1318 "data.");
1319 goto unm_err_out;
1320 }
1321
1322
1323
1324
1325 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1326 ntfs_error(vi->i_sb, "Found mst protected attribute "
1327 "but the attribute is encrypted. "
1328 "Please report you saw this message "
1329 "to linux-ntfs-dev@lists.sourceforge."
1330 "net");
1331 goto unm_err_out;
1332 }
1333 if (ni->type != AT_DATA) {
1334 ntfs_error(vi->i_sb, "Found encrypted non-data "
1335 "attribute.");
1336 goto unm_err_out;
1337 }
1338 NInoSetEncrypted(ni);
1339 }
1340 if (!a->non_resident) {
1341
1342 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1343 le16_to_cpu(a->data.resident.value_offset)))) {
1344 ntfs_error(vol->sb, "Attribute name is placed after "
1345 "the attribute value.");
1346 goto unm_err_out;
1347 }
1348 if (NInoMstProtected(ni)) {
1349 ntfs_error(vi->i_sb, "Found mst protected attribute "
1350 "but the attribute is resident. "
1351 "Please report you saw this message to "
1352 "linux-ntfs-dev@lists.sourceforge.net");
1353 goto unm_err_out;
1354 }
1355 vi->i_size = ni->initialized_size = le32_to_cpu(
1356 a->data.resident.value_length);
1357 ni->allocated_size = le32_to_cpu(a->length) -
1358 le16_to_cpu(a->data.resident.value_offset);
1359 if (vi->i_size > ni->allocated_size) {
1360 ntfs_error(vi->i_sb, "Resident attribute is corrupt "
1361 "(size exceeds allocation).");
1362 goto unm_err_out;
1363 }
1364 } else {
1365 NInoSetNonResident(ni);
1366
1367
1368
1369
1370 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1371 le16_to_cpu(
1372 a->data.non_resident.mapping_pairs_offset)))) {
1373 ntfs_error(vol->sb, "Attribute name is placed after "
1374 "the mapping pairs array.");
1375 goto unm_err_out;
1376 }
1377 if (NInoCompressed(ni) || NInoSparse(ni)) {
1378 if (NInoCompressed(ni) && a->data.non_resident.
1379 compression_unit != 4) {
1380 ntfs_error(vi->i_sb, "Found non-standard "
1381 "compression unit (%u instead "
1382 "of 4). Cannot handle this.",
1383 a->data.non_resident.
1384 compression_unit);
1385 err = -EOPNOTSUPP;
1386 goto unm_err_out;
1387 }
1388 if (a->data.non_resident.compression_unit) {
1389 ni->itype.compressed.block_size = 1U <<
1390 (a->data.non_resident.
1391 compression_unit +
1392 vol->cluster_size_bits);
1393 ni->itype.compressed.block_size_bits =
1394 ffs(ni->itype.compressed.
1395 block_size) - 1;
1396 ni->itype.compressed.block_clusters = 1U <<
1397 a->data.non_resident.
1398 compression_unit;
1399 } else {
1400 ni->itype.compressed.block_size = 0;
1401 ni->itype.compressed.block_size_bits = 0;
1402 ni->itype.compressed.block_clusters = 0;
1403 }
1404 ni->itype.compressed.size = sle64_to_cpu(
1405 a->data.non_resident.compressed_size);
1406 }
1407 if (a->data.non_resident.lowest_vcn) {
1408 ntfs_error(vi->i_sb, "First extent of attribute has "
1409 "non-zero lowest_vcn.");
1410 goto unm_err_out;
1411 }
1412 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1413 ni->initialized_size = sle64_to_cpu(
1414 a->data.non_resident.initialized_size);
1415 ni->allocated_size = sle64_to_cpu(
1416 a->data.non_resident.allocated_size);
1417 }
1418 vi->i_mapping->a_ops = &ntfs_normal_aops;
1419 if (NInoMstProtected(ni))
1420 vi->i_mapping->a_ops = &ntfs_mst_aops;
1421 else if (NInoCompressed(ni))
1422 vi->i_mapping->a_ops = &ntfs_compressed_aops;
1423 if ((NInoCompressed(ni) || NInoSparse(ni)) && ni->type != AT_INDEX_ROOT)
1424 vi->i_blocks = ni->itype.compressed.size >> 9;
1425 else
1426 vi->i_blocks = ni->allocated_size >> 9;
1427
1428
1429
1430
1431 igrab(base_vi);
1432 ni->ext.base_ntfs_ino = base_ni;
1433 ni->nr_extents = -1;
1434
1435 ntfs_attr_put_search_ctx(ctx);
1436 unmap_mft_record(base_ni);
1437
1438 ntfs_debug("Done.");
1439 return 0;
1440
1441unm_err_out:
1442 if (!err)
1443 err = -EIO;
1444 if (ctx)
1445 ntfs_attr_put_search_ctx(ctx);
1446 unmap_mft_record(base_ni);
1447err_out:
1448 ntfs_error(vol->sb, "Failed with error code %i while reading attribute "
1449 "inode (mft_no 0x%lx, type 0x%x, name_len %i). "
1450 "Marking corrupt inode and base inode 0x%lx as bad. "
1451 "Run chkdsk.", err, vi->i_ino, ni->type, ni->name_len,
1452 base_vi->i_ino);
1453 make_bad_inode(vi);
1454 if (err != -ENOMEM)
1455 NVolSetErrors(vol);
1456 return err;
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
1489
1490
1491
1492static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi)
1493{
1494 loff_t bvi_size;
1495 ntfs_volume *vol = NTFS_SB(vi->i_sb);
1496 ntfs_inode *ni, *base_ni, *bni;
1497 struct inode *bvi;
1498 MFT_RECORD *m;
1499 ATTR_RECORD *a;
1500 ntfs_attr_search_ctx *ctx;
1501 INDEX_ROOT *ir;
1502 u8 *ir_end, *index_end;
1503 int err = 0;
1504
1505 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1506 ntfs_init_big_inode(vi);
1507 ni = NTFS_I(vi);
1508 base_ni = NTFS_I(base_vi);
1509
1510 vi->i_version = base_vi->i_version;
1511 vi->i_uid = base_vi->i_uid;
1512 vi->i_gid = base_vi->i_gid;
1513 set_nlink(vi, base_vi->i_nlink);
1514 vi->i_mtime = base_vi->i_mtime;
1515 vi->i_ctime = base_vi->i_ctime;
1516 vi->i_atime = base_vi->i_atime;
1517 vi->i_generation = ni->seq_no = base_ni->seq_no;
1518
1519 vi->i_mode = base_vi->i_mode & ~S_IFMT;
1520
1521 m = map_mft_record(base_ni);
1522 if (IS_ERR(m)) {
1523 err = PTR_ERR(m);
1524 goto err_out;
1525 }
1526 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1527 if (!ctx) {
1528 err = -ENOMEM;
1529 goto unm_err_out;
1530 }
1531
1532 err = ntfs_attr_lookup(AT_INDEX_ROOT, ni->name, ni->name_len,
1533 CASE_SENSITIVE, 0, NULL, 0, ctx);
1534 if (unlikely(err)) {
1535 if (err == -ENOENT)
1536 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is "
1537 "missing.");
1538 goto unm_err_out;
1539 }
1540 a = ctx->attr;
1541
1542 if (unlikely(a->non_resident)) {
1543 ntfs_error(vol->sb, "$INDEX_ROOT attribute is not resident.");
1544 goto unm_err_out;
1545 }
1546
1547 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1548 le16_to_cpu(a->data.resident.value_offset)))) {
1549 ntfs_error(vol->sb, "$INDEX_ROOT attribute name is placed "
1550 "after the attribute value.");
1551 goto unm_err_out;
1552 }
1553
1554
1555
1556
1557 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_ENCRYPTED |
1558 ATTR_IS_SPARSE)) {
1559 ntfs_error(vi->i_sb, "Found compressed/encrypted/sparse index "
1560 "root attribute.");
1561 goto unm_err_out;
1562 }
1563 ir = (INDEX_ROOT*)((u8*)a + le16_to_cpu(a->data.resident.value_offset));
1564 ir_end = (u8*)ir + le32_to_cpu(a->data.resident.value_length);
1565 if (ir_end > (u8*)ctx->mrec + vol->mft_record_size) {
1566 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is corrupt.");
1567 goto unm_err_out;
1568 }
1569 index_end = (u8*)&ir->index + le32_to_cpu(ir->index.index_length);
1570 if (index_end > ir_end) {
1571 ntfs_error(vi->i_sb, "Index is corrupt.");
1572 goto unm_err_out;
1573 }
1574 if (ir->type) {
1575 ntfs_error(vi->i_sb, "Index type is not 0 (type is 0x%x).",
1576 le32_to_cpu(ir->type));
1577 goto unm_err_out;
1578 }
1579 ni->itype.index.collation_rule = ir->collation_rule;
1580 ntfs_debug("Index collation rule is 0x%x.",
1581 le32_to_cpu(ir->collation_rule));
1582 ni->itype.index.block_size = le32_to_cpu(ir->index_block_size);
1583 if (!is_power_of_2(ni->itype.index.block_size)) {
1584 ntfs_error(vi->i_sb, "Index block size (%u) is not a power of "
1585 "two.", ni->itype.index.block_size);
1586 goto unm_err_out;
1587 }
1588 if (ni->itype.index.block_size > PAGE_SIZE) {
1589 ntfs_error(vi->i_sb, "Index block size (%u) > PAGE_SIZE "
1590 "(%ld) is not supported. Sorry.",
1591 ni->itype.index.block_size, PAGE_SIZE);
1592 err = -EOPNOTSUPP;
1593 goto unm_err_out;
1594 }
1595 if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) {
1596 ntfs_error(vi->i_sb, "Index block size (%u) < NTFS_BLOCK_SIZE "
1597 "(%i) is not supported. Sorry.",
1598 ni->itype.index.block_size, NTFS_BLOCK_SIZE);
1599 err = -EOPNOTSUPP;
1600 goto unm_err_out;
1601 }
1602 ni->itype.index.block_size_bits = ffs(ni->itype.index.block_size) - 1;
1603
1604 if (vol->cluster_size <= ni->itype.index.block_size) {
1605 ni->itype.index.vcn_size = vol->cluster_size;
1606 ni->itype.index.vcn_size_bits = vol->cluster_size_bits;
1607 } else {
1608 ni->itype.index.vcn_size = vol->sector_size;
1609 ni->itype.index.vcn_size_bits = vol->sector_size_bits;
1610 }
1611
1612 if (!(ir->index.flags & LARGE_INDEX)) {
1613
1614 vi->i_size = ni->initialized_size = ni->allocated_size = 0;
1615
1616 ntfs_attr_put_search_ctx(ctx);
1617 unmap_mft_record(base_ni);
1618 m = NULL;
1619 ctx = NULL;
1620 goto skip_large_index_stuff;
1621 }
1622 NInoSetIndexAllocPresent(ni);
1623
1624 ntfs_attr_reinit_search_ctx(ctx);
1625 err = ntfs_attr_lookup(AT_INDEX_ALLOCATION, ni->name, ni->name_len,
1626 CASE_SENSITIVE, 0, NULL, 0, ctx);
1627 if (unlikely(err)) {
1628 if (err == -ENOENT)
1629 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1630 "not present but $INDEX_ROOT "
1631 "indicated it is.");
1632 else
1633 ntfs_error(vi->i_sb, "Failed to lookup "
1634 "$INDEX_ALLOCATION attribute.");
1635 goto unm_err_out;
1636 }
1637 a = ctx->attr;
1638 if (!a->non_resident) {
1639 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1640 "resident.");
1641 goto unm_err_out;
1642 }
1643
1644
1645
1646 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1647 le16_to_cpu(
1648 a->data.non_resident.mapping_pairs_offset)))) {
1649 ntfs_error(vol->sb, "$INDEX_ALLOCATION attribute name is "
1650 "placed after the mapping pairs array.");
1651 goto unm_err_out;
1652 }
1653 if (a->flags & ATTR_IS_ENCRYPTED) {
1654 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1655 "encrypted.");
1656 goto unm_err_out;
1657 }
1658 if (a->flags & ATTR_IS_SPARSE) {
1659 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is sparse.");
1660 goto unm_err_out;
1661 }
1662 if (a->flags & ATTR_COMPRESSION_MASK) {
1663 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1664 "compressed.");
1665 goto unm_err_out;
1666 }
1667 if (a->data.non_resident.lowest_vcn) {
1668 ntfs_error(vi->i_sb, "First extent of $INDEX_ALLOCATION "
1669 "attribute has non zero lowest_vcn.");
1670 goto unm_err_out;
1671 }
1672 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1673 ni->initialized_size = sle64_to_cpu(
1674 a->data.non_resident.initialized_size);
1675 ni->allocated_size = sle64_to_cpu(a->data.non_resident.allocated_size);
1676
1677
1678
1679
1680 ntfs_attr_put_search_ctx(ctx);
1681 unmap_mft_record(base_ni);
1682 m = NULL;
1683 ctx = NULL;
1684
1685 bvi = ntfs_attr_iget(base_vi, AT_BITMAP, ni->name, ni->name_len);
1686 if (IS_ERR(bvi)) {
1687 ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
1688 err = PTR_ERR(bvi);
1689 goto unm_err_out;
1690 }
1691 bni = NTFS_I(bvi);
1692 if (NInoCompressed(bni) || NInoEncrypted(bni) ||
1693 NInoSparse(bni)) {
1694 ntfs_error(vi->i_sb, "$BITMAP attribute is compressed and/or "
1695 "encrypted and/or sparse.");
1696 goto iput_unm_err_out;
1697 }
1698
1699 bvi_size = i_size_read(bvi);
1700 if ((bvi_size << 3) < (vi->i_size >> ni->itype.index.block_size_bits)) {
1701 ntfs_error(vi->i_sb, "Index bitmap too small (0x%llx) for "
1702 "index allocation (0x%llx).", bvi_size << 3,
1703 vi->i_size);
1704 goto iput_unm_err_out;
1705 }
1706 iput(bvi);
1707skip_large_index_stuff:
1708
1709 vi->i_mapping->a_ops = &ntfs_mst_aops;
1710 vi->i_blocks = ni->allocated_size >> 9;
1711
1712
1713
1714
1715 igrab(base_vi);
1716 ni->ext.base_ntfs_ino = base_ni;
1717 ni->nr_extents = -1;
1718
1719 ntfs_debug("Done.");
1720 return 0;
1721iput_unm_err_out:
1722 iput(bvi);
1723unm_err_out:
1724 if (!err)
1725 err = -EIO;
1726 if (ctx)
1727 ntfs_attr_put_search_ctx(ctx);
1728 if (m)
1729 unmap_mft_record(base_ni);
1730err_out:
1731 ntfs_error(vi->i_sb, "Failed with error code %i while reading index "
1732 "inode (mft_no 0x%lx, name_len %i.", err, vi->i_ino,
1733 ni->name_len);
1734 make_bad_inode(vi);
1735 if (err != -EOPNOTSUPP && err != -ENOMEM)
1736 NVolSetErrors(vol);
1737 return err;
1738}
1739
1740
1741
1742
1743
1744
1745
1746
1747static struct lock_class_key mft_ni_runlist_lock_key, mft_ni_mrec_lock_key;
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
1774
1775int ntfs_read_inode_mount(struct inode *vi)
1776{
1777 VCN next_vcn, last_vcn, highest_vcn;
1778 s64 block;
1779 struct super_block *sb = vi->i_sb;
1780 ntfs_volume *vol = NTFS_SB(sb);
1781 struct buffer_head *bh;
1782 ntfs_inode *ni;
1783 MFT_RECORD *m = NULL;
1784 ATTR_RECORD *a;
1785 ntfs_attr_search_ctx *ctx;
1786 unsigned int i, nr_blocks;
1787 int err;
1788
1789 ntfs_debug("Entering.");
1790
1791
1792 ntfs_init_big_inode(vi);
1793
1794 ni = NTFS_I(vi);
1795
1796
1797 NInoSetNonResident(ni);
1798 NInoSetMstProtected(ni);
1799 NInoSetSparseDisabled(ni);
1800 ni->type = AT_DATA;
1801 ni->name = NULL;
1802 ni->name_len = 0;
1803
1804
1805
1806
1807 ni->itype.index.block_size = vol->mft_record_size;
1808 ni->itype.index.block_size_bits = vol->mft_record_size_bits;
1809
1810
1811 vol->mft_ino = vi;
1812
1813
1814 if (vol->mft_record_size > 64 * 1024) {
1815 ntfs_error(sb, "Unsupported mft record size %i (max 64kiB).",
1816 vol->mft_record_size);
1817 goto err_out;
1818 }
1819 i = vol->mft_record_size;
1820 if (i < sb->s_blocksize)
1821 i = sb->s_blocksize;
1822 m = (MFT_RECORD*)ntfs_malloc_nofs(i);
1823 if (!m) {
1824 ntfs_error(sb, "Failed to allocate buffer for $MFT record 0.");
1825 goto err_out;
1826 }
1827
1828
1829 block = vol->mft_lcn << vol->cluster_size_bits >>
1830 sb->s_blocksize_bits;
1831 nr_blocks = vol->mft_record_size >> sb->s_blocksize_bits;
1832 if (!nr_blocks)
1833 nr_blocks = 1;
1834
1835
1836 for (i = 0; i < nr_blocks; i++) {
1837 bh = sb_bread(sb, block++);
1838 if (!bh) {
1839 ntfs_error(sb, "Device read failed.");
1840 goto err_out;
1841 }
1842 memcpy((char*)m + (i << sb->s_blocksize_bits), bh->b_data,
1843 sb->s_blocksize);
1844 brelse(bh);
1845 }
1846
1847
1848 if (post_read_mst_fixup((NTFS_RECORD*)m, vol->mft_record_size)) {
1849
1850 ntfs_error(sb, "MST fixup failed. $MFT is corrupt.");
1851 goto err_out;
1852 }
1853
1854
1855 vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number);
1856
1857
1858 vi->i_mapping->a_ops = &ntfs_mst_aops;
1859
1860 ctx = ntfs_attr_get_search_ctx(ni, m);
1861 if (!ctx) {
1862 err = -ENOMEM;
1863 goto err_out;
1864 }
1865
1866
1867 err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx);
1868 if (err) {
1869 if (unlikely(err != -ENOENT)) {
1870 ntfs_error(sb, "Failed to lookup attribute list "
1871 "attribute. You should run chkdsk.");
1872 goto put_err_out;
1873 }
1874 } else {
1875 ATTR_LIST_ENTRY *al_entry, *next_al_entry;
1876 u8 *al_end;
1877 static const char *es = " Not allowed. $MFT is corrupt. "
1878 "You should run chkdsk.";
1879
1880 ntfs_debug("Attribute list attribute found in $MFT.");
1881 NInoSetAttrList(ni);
1882 a = ctx->attr;
1883 if (a->flags & ATTR_COMPRESSION_MASK) {
1884 ntfs_error(sb, "Attribute list attribute is "
1885 "compressed.%s", es);
1886 goto put_err_out;
1887 }
1888 if (a->flags & ATTR_IS_ENCRYPTED ||
1889 a->flags & ATTR_IS_SPARSE) {
1890 if (a->non_resident) {
1891 ntfs_error(sb, "Non-resident attribute list "
1892 "attribute is encrypted/"
1893 "sparse.%s", es);
1894 goto put_err_out;
1895 }
1896 ntfs_warning(sb, "Resident attribute list attribute "
1897 "in $MFT system file is marked "
1898 "encrypted/sparse which is not true. "
1899 "However, Windows allows this and "
1900 "chkdsk does not detect or correct it "
1901 "so we will just ignore the invalid "
1902 "flags and pretend they are not set.");
1903 }
1904
1905 ni->attr_list_size = (u32)ntfs_attr_size(a);
1906 ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size);
1907 if (!ni->attr_list) {
1908 ntfs_error(sb, "Not enough memory to allocate buffer "
1909 "for attribute list.");
1910 goto put_err_out;
1911 }
1912 if (a->non_resident) {
1913 NInoSetAttrListNonResident(ni);
1914 if (a->data.non_resident.lowest_vcn) {
1915 ntfs_error(sb, "Attribute list has non zero "
1916 "lowest_vcn. $MFT is corrupt. "
1917 "You should run chkdsk.");
1918 goto put_err_out;
1919 }
1920
1921 ni->attr_list_rl.rl = ntfs_mapping_pairs_decompress(vol,
1922 a, NULL);
1923 if (IS_ERR(ni->attr_list_rl.rl)) {
1924 err = PTR_ERR(ni->attr_list_rl.rl);
1925 ni->attr_list_rl.rl = NULL;
1926 ntfs_error(sb, "Mapping pairs decompression "
1927 "failed with error code %i.",
1928 -err);
1929 goto put_err_out;
1930 }
1931
1932 if ((err = load_attribute_list(vol, &ni->attr_list_rl,
1933 ni->attr_list, ni->attr_list_size,
1934 sle64_to_cpu(a->data.
1935 non_resident.initialized_size)))) {
1936 ntfs_error(sb, "Failed to load attribute list "
1937 "attribute with error code %i.",
1938 -err);
1939 goto put_err_out;
1940 }
1941 } else {
1942 if ((u8*)a + le16_to_cpu(
1943 a->data.resident.value_offset) +
1944 le32_to_cpu(
1945 a->data.resident.value_length) >
1946 (u8*)ctx->mrec + vol->mft_record_size) {
1947 ntfs_error(sb, "Corrupt attribute list "
1948 "attribute.");
1949 goto put_err_out;
1950 }
1951
1952 memcpy(ni->attr_list, (u8*)a + le16_to_cpu(
1953 a->data.resident.value_offset),
1954 le32_to_cpu(
1955 a->data.resident.value_length));
1956 }
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969 al_entry = (ATTR_LIST_ENTRY*)ni->attr_list;
1970 al_end = (u8*)al_entry + ni->attr_list_size;
1971 for (;; al_entry = next_al_entry) {
1972
1973 if ((u8*)al_entry < ni->attr_list ||
1974 (u8*)al_entry > al_end)
1975 goto em_put_err_out;
1976
1977 if ((u8*)al_entry == al_end)
1978 goto em_put_err_out;
1979 if (!al_entry->length)
1980 goto em_put_err_out;
1981 if ((u8*)al_entry + 6 > al_end || (u8*)al_entry +
1982 le16_to_cpu(al_entry->length) > al_end)
1983 goto em_put_err_out;
1984 next_al_entry = (ATTR_LIST_ENTRY*)((u8*)al_entry +
1985 le16_to_cpu(al_entry->length));
1986 if (le32_to_cpu(al_entry->type) > le32_to_cpu(AT_DATA))
1987 goto em_put_err_out;
1988 if (AT_DATA != al_entry->type)
1989 continue;
1990
1991 if (al_entry->name_length)
1992 goto em_put_err_out;
1993
1994 if (al_entry->lowest_vcn)
1995 goto em_put_err_out;
1996
1997 if (MREF_LE(al_entry->mft_reference) != vi->i_ino) {
1998
1999 ntfs_error(sb, "BUG: The first $DATA extent "
2000 "of $MFT is not in the base "
2001 "mft record. Please report "
2002 "you saw this message to "
2003 "linux-ntfs-dev@lists."
2004 "sourceforge.net");
2005 goto put_err_out;
2006 } else {
2007
2008 if (MSEQNO_LE(al_entry->mft_reference) !=
2009 ni->seq_no)
2010 goto em_put_err_out;
2011
2012 break;
2013 }
2014 }
2015 }
2016
2017 ntfs_attr_reinit_search_ctx(ctx);
2018
2019
2020 a = NULL;
2021 next_vcn = last_vcn = highest_vcn = 0;
2022 while (!(err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, next_vcn, NULL, 0,
2023 ctx))) {
2024 runlist_element *nrl;
2025
2026
2027 a = ctx->attr;
2028
2029 if (!a->non_resident) {
2030 ntfs_error(sb, "$MFT must be non-resident but a "
2031 "resident extent was found. $MFT is "
2032 "corrupt. Run chkdsk.");
2033 goto put_err_out;
2034 }
2035
2036 if (a->flags & ATTR_COMPRESSION_MASK ||
2037 a->flags & ATTR_IS_ENCRYPTED ||
2038 a->flags & ATTR_IS_SPARSE) {
2039 ntfs_error(sb, "$MFT must be uncompressed, "
2040 "non-sparse, and unencrypted but a "
2041 "compressed/sparse/encrypted extent "
2042 "was found. $MFT is corrupt. Run "
2043 "chkdsk.");
2044 goto put_err_out;
2045 }
2046
2047
2048
2049
2050
2051
2052 nrl = ntfs_mapping_pairs_decompress(vol, a, ni->runlist.rl);
2053 if (IS_ERR(nrl)) {
2054 ntfs_error(sb, "ntfs_mapping_pairs_decompress() "
2055 "failed with error code %ld. $MFT is "
2056 "corrupt.", PTR_ERR(nrl));
2057 goto put_err_out;
2058 }
2059 ni->runlist.rl = nrl;
2060
2061
2062 if (!next_vcn) {
2063 if (a->data.non_resident.lowest_vcn) {
2064 ntfs_error(sb, "First extent of $DATA "
2065 "attribute has non zero "
2066 "lowest_vcn. $MFT is corrupt. "
2067 "You should run chkdsk.");
2068 goto put_err_out;
2069 }
2070
2071 last_vcn = sle64_to_cpu(
2072 a->data.non_resident.allocated_size)
2073 >> vol->cluster_size_bits;
2074
2075 vi->i_size = sle64_to_cpu(
2076 a->data.non_resident.data_size);
2077 ni->initialized_size = sle64_to_cpu(
2078 a->data.non_resident.initialized_size);
2079 ni->allocated_size = sle64_to_cpu(
2080 a->data.non_resident.allocated_size);
2081
2082
2083
2084
2085 if ((vi->i_size >> vol->mft_record_size_bits) >=
2086 (1ULL << 32)) {
2087 ntfs_error(sb, "$MFT is too big! Aborting.");
2088 goto put_err_out;
2089 }
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109 ntfs_read_locked_inode(vi);
2110 if (is_bad_inode(vi)) {
2111 ntfs_error(sb, "ntfs_read_inode() of $MFT "
2112 "failed. BUG or corrupt $MFT. "
2113 "Run chkdsk and if no errors "
2114 "are found, please report you "
2115 "saw this message to "
2116 "linux-ntfs-dev@lists."
2117 "sourceforge.net");
2118 ntfs_attr_put_search_ctx(ctx);
2119
2120 ntfs_free(m);
2121 return -1;
2122 }
2123
2124
2125
2126
2127
2128 vi->i_uid = GLOBAL_ROOT_UID;
2129 vi->i_gid = GLOBAL_ROOT_GID;
2130
2131 vi->i_mode = S_IFREG;
2132
2133 vi->i_op = &ntfs_empty_inode_ops;
2134 vi->i_fop = &ntfs_empty_file_ops;
2135 }
2136
2137
2138 highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2139 next_vcn = highest_vcn + 1;
2140
2141
2142 if (next_vcn <= 0)
2143 break;
2144
2145
2146 if (next_vcn < sle64_to_cpu(
2147 a->data.non_resident.lowest_vcn)) {
2148 ntfs_error(sb, "$MFT has corrupt attribute list "
2149 "attribute. Run chkdsk.");
2150 goto put_err_out;
2151 }
2152 }
2153 if (err != -ENOENT) {
2154 ntfs_error(sb, "Failed to lookup $MFT/$DATA attribute extent. "
2155 "$MFT is corrupt. Run chkdsk.");
2156 goto put_err_out;
2157 }
2158 if (!a) {
2159 ntfs_error(sb, "$MFT/$DATA attribute not found. $MFT is "
2160 "corrupt. Run chkdsk.");
2161 goto put_err_out;
2162 }
2163 if (highest_vcn && highest_vcn != last_vcn - 1) {
2164 ntfs_error(sb, "Failed to load the complete runlist for "
2165 "$MFT/$DATA. Driver bug or corrupt $MFT. "
2166 "Run chkdsk.");
2167 ntfs_debug("highest_vcn = 0x%llx, last_vcn - 1 = 0x%llx",
2168 (unsigned long long)highest_vcn,
2169 (unsigned long long)last_vcn - 1);
2170 goto put_err_out;
2171 }
2172 ntfs_attr_put_search_ctx(ctx);
2173 ntfs_debug("Done.");
2174 ntfs_free(m);
2175
2176
2177
2178
2179
2180 lockdep_set_class(&ni->runlist.lock, &mft_ni_runlist_lock_key);
2181 lockdep_set_class(&ni->mrec_lock, &mft_ni_mrec_lock_key);
2182
2183 return 0;
2184
2185em_put_err_out:
2186 ntfs_error(sb, "Couldn't find first extent of $DATA attribute in "
2187 "attribute list. $MFT is corrupt. Run chkdsk.");
2188put_err_out:
2189 ntfs_attr_put_search_ctx(ctx);
2190err_out:
2191 ntfs_error(sb, "Failed. Marking inode as bad.");
2192 make_bad_inode(vi);
2193 ntfs_free(m);
2194 return -1;
2195}
2196
2197static void __ntfs_clear_inode(ntfs_inode *ni)
2198{
2199
2200 down_write(&ni->runlist.lock);
2201 if (ni->runlist.rl) {
2202 ntfs_free(ni->runlist.rl);
2203 ni->runlist.rl = NULL;
2204 }
2205 up_write(&ni->runlist.lock);
2206
2207 if (ni->attr_list) {
2208 ntfs_free(ni->attr_list);
2209 ni->attr_list = NULL;
2210 }
2211
2212 down_write(&ni->attr_list_rl.lock);
2213 if (ni->attr_list_rl.rl) {
2214 ntfs_free(ni->attr_list_rl.rl);
2215 ni->attr_list_rl.rl = NULL;
2216 }
2217 up_write(&ni->attr_list_rl.lock);
2218
2219 if (ni->name_len && ni->name != I30) {
2220
2221 BUG_ON(!ni->name);
2222 kfree(ni->name);
2223 }
2224}
2225
2226void ntfs_clear_extent_inode(ntfs_inode *ni)
2227{
2228 ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
2229
2230 BUG_ON(NInoAttr(ni));
2231 BUG_ON(ni->nr_extents != -1);
2232
2233#ifdef NTFS_RW
2234 if (NInoDirty(ni)) {
2235 if (!is_bad_inode(VFS_I(ni->ext.base_ntfs_ino)))
2236 ntfs_error(ni->vol->sb, "Clearing dirty extent inode! "
2237 "Losing data! This is a BUG!!!");
2238
2239 }
2240#endif
2241
2242 __ntfs_clear_inode(ni);
2243
2244
2245 ntfs_destroy_extent_inode(ni);
2246}
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258void ntfs_evict_big_inode(struct inode *vi)
2259{
2260 ntfs_inode *ni = NTFS_I(vi);
2261
2262 truncate_inode_pages_final(&vi->i_data);
2263 clear_inode(vi);
2264
2265#ifdef NTFS_RW
2266 if (NInoDirty(ni)) {
2267 bool was_bad = (is_bad_inode(vi));
2268
2269
2270 ntfs_commit_inode(vi);
2271
2272 if (!was_bad && (is_bad_inode(vi) || NInoDirty(ni))) {
2273 ntfs_error(vi->i_sb, "Failed to commit dirty inode "
2274 "0x%lx. Losing data!", vi->i_ino);
2275
2276 }
2277 }
2278#endif
2279
2280
2281 if (ni->nr_extents > 0) {
2282 int i;
2283
2284 for (i = 0; i < ni->nr_extents; i++)
2285 ntfs_clear_extent_inode(ni->ext.extent_ntfs_inos[i]);
2286 kfree(ni->ext.extent_ntfs_inos);
2287 }
2288
2289 __ntfs_clear_inode(ni);
2290
2291 if (NInoAttr(ni)) {
2292
2293 if (ni->nr_extents == -1) {
2294 iput(VFS_I(ni->ext.base_ntfs_ino));
2295 ni->nr_extents = 0;
2296 ni->ext.base_ntfs_ino = NULL;
2297 }
2298 }
2299 return;
2300}
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312int ntfs_show_options(struct seq_file *sf, struct dentry *root)
2313{
2314 ntfs_volume *vol = NTFS_SB(root->d_sb);
2315 int i;
2316
2317 seq_printf(sf, ",uid=%i", from_kuid_munged(&init_user_ns, vol->uid));
2318 seq_printf(sf, ",gid=%i", from_kgid_munged(&init_user_ns, vol->gid));
2319 if (vol->fmask == vol->dmask)
2320 seq_printf(sf, ",umask=0%o", vol->fmask);
2321 else {
2322 seq_printf(sf, ",fmask=0%o", vol->fmask);
2323 seq_printf(sf, ",dmask=0%o", vol->dmask);
2324 }
2325 seq_printf(sf, ",nls=%s", vol->nls_map->charset);
2326 if (NVolCaseSensitive(vol))
2327 seq_printf(sf, ",case_sensitive");
2328 if (NVolShowSystemFiles(vol))
2329 seq_printf(sf, ",show_sys_files");
2330 if (!NVolSparseEnabled(vol))
2331 seq_printf(sf, ",disable_sparse");
2332 for (i = 0; on_errors_arr[i].val; i++) {
2333 if (on_errors_arr[i].val & vol->on_errors)
2334 seq_printf(sf, ",errors=%s", on_errors_arr[i].str);
2335 }
2336 seq_printf(sf, ",mft_zone_multiplier=%i", vol->mft_zone_multiplier);
2337 return 0;
2338}
2339
2340#ifdef NTFS_RW
2341
2342static const char *es = " Leaving inconsistent metadata. Unmount and run "
2343 "chkdsk.";
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363int ntfs_truncate(struct inode *vi)
2364{
2365 s64 new_size, old_size, nr_freed, new_alloc_size, old_alloc_size;
2366 VCN highest_vcn;
2367 unsigned long flags;
2368 ntfs_inode *base_ni, *ni = NTFS_I(vi);
2369 ntfs_volume *vol = ni->vol;
2370 ntfs_attr_search_ctx *ctx;
2371 MFT_RECORD *m;
2372 ATTR_RECORD *a;
2373 const char *te = " Leaving file length out of sync with i_size.";
2374 int err, mp_size, size_change, alloc_change;
2375 u32 attr_len;
2376
2377 ntfs_debug("Entering for inode 0x%lx.", vi->i_ino);
2378 BUG_ON(NInoAttr(ni));
2379 BUG_ON(S_ISDIR(vi->i_mode));
2380 BUG_ON(NInoMstProtected(ni));
2381 BUG_ON(ni->nr_extents < 0);
2382retry_truncate:
2383
2384
2385
2386
2387 down_write(&ni->runlist.lock);
2388 if (!NInoAttr(ni))
2389 base_ni = ni;
2390 else
2391 base_ni = ni->ext.base_ntfs_ino;
2392 m = map_mft_record(base_ni);
2393 if (IS_ERR(m)) {
2394 err = PTR_ERR(m);
2395 ntfs_error(vi->i_sb, "Failed to map mft record for inode 0x%lx "
2396 "(error code %d).%s", vi->i_ino, err, te);
2397 ctx = NULL;
2398 m = NULL;
2399 goto old_bad_out;
2400 }
2401 ctx = ntfs_attr_get_search_ctx(base_ni, m);
2402 if (unlikely(!ctx)) {
2403 ntfs_error(vi->i_sb, "Failed to allocate a search context for "
2404 "inode 0x%lx (not enough memory).%s",
2405 vi->i_ino, te);
2406 err = -ENOMEM;
2407 goto old_bad_out;
2408 }
2409 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
2410 CASE_SENSITIVE, 0, NULL, 0, ctx);
2411 if (unlikely(err)) {
2412 if (err == -ENOENT) {
2413 ntfs_error(vi->i_sb, "Open attribute is missing from "
2414 "mft record. Inode 0x%lx is corrupt. "
2415 "Run chkdsk.%s", vi->i_ino, te);
2416 err = -EIO;
2417 } else
2418 ntfs_error(vi->i_sb, "Failed to lookup attribute in "
2419 "inode 0x%lx (error code %d).%s",
2420 vi->i_ino, err, te);
2421 goto old_bad_out;
2422 }
2423 m = ctx->mrec;
2424 a = ctx->attr;
2425
2426
2427
2428 new_size = i_size_read(vi);
2429
2430 old_size = ntfs_attr_size(a);
2431
2432 if (NInoNonResident(ni))
2433 new_alloc_size = (new_size + vol->cluster_size - 1) &
2434 ~(s64)vol->cluster_size_mask;
2435 else
2436 new_alloc_size = (new_size + 7) & ~7;
2437
2438 read_lock_irqsave(&ni->size_lock, flags);
2439 old_alloc_size = ni->allocated_size;
2440 read_unlock_irqrestore(&ni->size_lock, flags);
2441
2442
2443
2444
2445 size_change = -1;
2446 if (new_size - old_size >= 0) {
2447 size_change = 1;
2448 if (new_size == old_size)
2449 size_change = 0;
2450 }
2451
2452 alloc_change = -1;
2453 if (new_alloc_size - old_alloc_size >= 0) {
2454 alloc_change = 1;
2455 if (new_alloc_size == old_alloc_size)
2456 alloc_change = 0;
2457 }
2458
2459
2460
2461
2462 if (!size_change && !alloc_change)
2463 goto unm_done;
2464
2465 if (size_change) {
2466 err = ntfs_attr_size_bounds_check(vol, ni->type, new_size);
2467 if (unlikely(err)) {
2468 if (err == -ERANGE) {
2469 ntfs_error(vol->sb, "Truncate would cause the "
2470 "inode 0x%lx to %simum size "
2471 "for its attribute type "
2472 "(0x%x). Aborting truncate.",
2473 vi->i_ino,
2474 new_size > old_size ? "exceed "
2475 "the max" : "go under the min",
2476 le32_to_cpu(ni->type));
2477 err = -EFBIG;
2478 } else {
2479 ntfs_error(vol->sb, "Inode 0x%lx has unknown "
2480 "attribute type 0x%x. "
2481 "Aborting truncate.",
2482 vi->i_ino,
2483 le32_to_cpu(ni->type));
2484 err = -EIO;
2485 }
2486
2487 i_size_write(vi, old_size);
2488 goto err_out;
2489 }
2490 }
2491 if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2492 ntfs_warning(vi->i_sb, "Changes in inode size are not "
2493 "supported yet for %s files, ignoring.",
2494 NInoCompressed(ni) ? "compressed" :
2495 "encrypted");
2496 err = -EOPNOTSUPP;
2497 goto bad_out;
2498 }
2499 if (a->non_resident)
2500 goto do_non_resident_truncate;
2501 BUG_ON(NInoNonResident(ni));
2502
2503 if (new_size < vol->mft_record_size &&
2504 !ntfs_resident_attr_value_resize(m, a, new_size)) {
2505
2506 flush_dcache_mft_record_page(ctx->ntfs_ino);
2507 mark_mft_record_dirty(ctx->ntfs_ino);
2508 write_lock_irqsave(&ni->size_lock, flags);
2509
2510 ni->allocated_size = le32_to_cpu(a->length) -
2511 le16_to_cpu(a->data.resident.value_offset);
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
2540 ni->initialized_size = new_size;
2541 write_unlock_irqrestore(&ni->size_lock, flags);
2542 goto unm_done;
2543 }
2544
2545 BUG_ON(size_change < 0);
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555 ntfs_attr_put_search_ctx(ctx);
2556 unmap_mft_record(base_ni);
2557 up_write(&ni->runlist.lock);
2558
2559
2560
2561
2562 err = ntfs_attr_make_non_resident(ni, old_size);
2563 if (likely(!err))
2564 goto retry_truncate;
2565
2566
2567
2568
2569
2570 if (unlikely(err != -EPERM && err != -ENOSPC)) {
2571 ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, attribute "
2572 "type 0x%x, because the conversion from "
2573 "resident to non-resident attribute failed "
2574 "with error code %i.", vi->i_ino,
2575 (unsigned)le32_to_cpu(ni->type), err);
2576 if (err != -ENOMEM)
2577 err = -EIO;
2578 goto conv_err_out;
2579 }
2580
2581 if (err == -ENOSPC)
2582 ntfs_error(vol->sb, "Not enough space in the mft record/on "
2583 "disk for the non-resident attribute value. "
2584 "This case is not implemented yet.");
2585 else
2586 ntfs_error(vol->sb, "This attribute type may not be "
2587 "non-resident. This case is not implemented "
2588 "yet.");
2589 err = -EOPNOTSUPP;
2590 goto conv_err_out;
2591#if 0
2592
2593 if (!err)
2594 goto do_resident_extend;
2595
2596
2597
2598
2599
2600
2601 if (ni->type == AT_ATTRIBUTE_LIST ||
2602 ni->type == AT_STANDARD_INFORMATION) {
2603
2604
2605 err = -EOPNOTSUPP;
2606 if (!err)
2607 goto do_resident_extend;
2608 goto err_out;
2609 }
2610
2611
2612
2613 err = -EOPNOTSUPP;
2614 if (!err)
2615 goto do_resident_extend;
2616
2617 goto err_out;
2618#endif
2619do_non_resident_truncate:
2620 BUG_ON(!NInoNonResident(ni));
2621 if (alloc_change < 0) {
2622 highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2623 if (highest_vcn > 0 &&
2624 old_alloc_size >> vol->cluster_size_bits >
2625 highest_vcn + 1) {
2626
2627
2628
2629
2630 ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, "
2631 "attribute type 0x%x, because the "
2632 "attribute is highly fragmented (it "
2633 "consists of multiple extents) and "
2634 "this case is not implemented yet.",
2635 vi->i_ino,
2636 (unsigned)le32_to_cpu(ni->type));
2637 err = -EOPNOTSUPP;
2638 goto bad_out;
2639 }
2640 }
2641
2642
2643
2644
2645 if (size_change < 0) {
2646
2647
2648
2649 write_lock_irqsave(&ni->size_lock, flags);
2650 if (new_size < ni->initialized_size) {
2651 ni->initialized_size = new_size;
2652 a->data.non_resident.initialized_size =
2653 cpu_to_sle64(new_size);
2654 }
2655 a->data.non_resident.data_size = cpu_to_sle64(new_size);
2656 write_unlock_irqrestore(&ni->size_lock, flags);
2657 flush_dcache_mft_record_page(ctx->ntfs_ino);
2658 mark_mft_record_dirty(ctx->ntfs_ino);
2659
2660 if (!alloc_change)
2661 goto unm_done;
2662
2663
2664
2665
2666 BUG_ON(alloc_change > 0);
2667 } else {
2668
2669
2670
2671
2672 if (alloc_change > 0) {
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688 ntfs_attr_put_search_ctx(ctx);
2689 unmap_mft_record(base_ni);
2690 up_write(&ni->runlist.lock);
2691 err = ntfs_attr_extend_allocation(ni, new_size,
2692 size_change > 0 ? new_size : -1, -1);
2693
2694
2695
2696
2697 goto done;
2698 }
2699 if (!alloc_change)
2700 goto alloc_done;
2701 }
2702
2703
2704 nr_freed = ntfs_cluster_free(ni, new_alloc_size >>
2705 vol->cluster_size_bits, -1, ctx);
2706 m = ctx->mrec;
2707 a = ctx->attr;
2708 if (unlikely(nr_freed < 0)) {
2709 ntfs_error(vol->sb, "Failed to release cluster(s) (error code "
2710 "%lli). Unmount and run chkdsk to recover "
2711 "the lost cluster(s).", (long long)nr_freed);
2712 NVolSetErrors(vol);
2713 nr_freed = 0;
2714 }
2715
2716 err = ntfs_rl_truncate_nolock(vol, &ni->runlist,
2717 new_alloc_size >> vol->cluster_size_bits);
2718
2719
2720
2721
2722
2723
2724 if (unlikely(err || IS_ERR(m))) {
2725 ntfs_error(vol->sb, "Failed to %s (error code %li).%s",
2726 IS_ERR(m) ?
2727 "restore attribute search context" :
2728 "truncate attribute runlist",
2729 IS_ERR(m) ? PTR_ERR(m) : err, es);
2730 err = -EIO;
2731 goto bad_out;
2732 }
2733
2734 mp_size = ntfs_get_size_for_mapping_pairs(vol, ni->runlist.rl, 0, -1);
2735 if (unlikely(mp_size <= 0)) {
2736 ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2737 "attribute type 0x%x, because determining the "
2738 "size for the mapping pairs failed with error "
2739 "code %i.%s", vi->i_ino,
2740 (unsigned)le32_to_cpu(ni->type), mp_size, es);
2741 err = -EIO;
2742 goto bad_out;
2743 }
2744
2745
2746
2747
2748
2749 attr_len = le32_to_cpu(a->length);
2750 err = ntfs_attr_record_resize(m, a, mp_size +
2751 le16_to_cpu(a->data.non_resident.mapping_pairs_offset));
2752 BUG_ON(err);
2753
2754
2755
2756 err = ntfs_mapping_pairs_build(vol, (u8*)a +
2757 le16_to_cpu(a->data.non_resident.mapping_pairs_offset),
2758 mp_size, ni->runlist.rl, 0, -1, NULL);
2759 if (unlikely(err)) {
2760 ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2761 "attribute type 0x%x, because building the "
2762 "mapping pairs failed with error code %i.%s",
2763 vi->i_ino, (unsigned)le32_to_cpu(ni->type),
2764 err, es);
2765 err = -EIO;
2766 goto bad_out;
2767 }
2768
2769 a->data.non_resident.highest_vcn = cpu_to_sle64((new_alloc_size >>
2770 vol->cluster_size_bits) - 1);
2771 write_lock_irqsave(&ni->size_lock, flags);
2772 ni->allocated_size = new_alloc_size;
2773 a->data.non_resident.allocated_size = cpu_to_sle64(new_alloc_size);
2774 if (NInoSparse(ni) || NInoCompressed(ni)) {
2775 if (nr_freed) {
2776 ni->itype.compressed.size -= nr_freed <<
2777 vol->cluster_size_bits;
2778 BUG_ON(ni->itype.compressed.size < 0);
2779 a->data.non_resident.compressed_size = cpu_to_sle64(
2780 ni->itype.compressed.size);
2781 vi->i_blocks = ni->itype.compressed.size >> 9;
2782 }
2783 } else
2784 vi->i_blocks = new_alloc_size >> 9;
2785 write_unlock_irqrestore(&ni->size_lock, flags);
2786
2787
2788
2789
2790
2791
2792
2793
2794alloc_done:
2795
2796
2797
2798
2799 if (size_change > 0)
2800 a->data.non_resident.data_size = cpu_to_sle64(new_size);
2801
2802 flush_dcache_mft_record_page(ctx->ntfs_ino);
2803 mark_mft_record_dirty(ctx->ntfs_ino);
2804unm_done:
2805 ntfs_attr_put_search_ctx(ctx);
2806 unmap_mft_record(base_ni);
2807 up_write(&ni->runlist.lock);
2808done:
2809
2810
2811
2812
2813
2814
2815 if (!IS_NOCMTIME(VFS_I(base_ni)) && !IS_RDONLY(VFS_I(base_ni))) {
2816 struct timespec now = current_fs_time(VFS_I(base_ni)->i_sb);
2817 int sync_it = 0;
2818
2819 if (!timespec_equal(&VFS_I(base_ni)->i_mtime, &now) ||
2820 !timespec_equal(&VFS_I(base_ni)->i_ctime, &now))
2821 sync_it = 1;
2822 VFS_I(base_ni)->i_mtime = now;
2823 VFS_I(base_ni)->i_ctime = now;
2824
2825 if (sync_it)
2826 mark_inode_dirty_sync(VFS_I(base_ni));
2827 }
2828
2829 if (likely(!err)) {
2830 NInoClearTruncateFailed(ni);
2831 ntfs_debug("Done.");
2832 }
2833 return err;
2834old_bad_out:
2835 old_size = -1;
2836bad_out:
2837 if (err != -ENOMEM && err != -EOPNOTSUPP)
2838 NVolSetErrors(vol);
2839 if (err != -EOPNOTSUPP)
2840 NInoSetTruncateFailed(ni);
2841 else if (old_size >= 0)
2842 i_size_write(vi, old_size);
2843err_out:
2844 if (ctx)
2845 ntfs_attr_put_search_ctx(ctx);
2846 if (m)
2847 unmap_mft_record(base_ni);
2848 up_write(&ni->runlist.lock);
2849out:
2850 ntfs_debug("Failed. Returning error code %i.", err);
2851 return err;
2852conv_err_out:
2853 if (err != -ENOMEM && err != -EOPNOTSUPP)
2854 NVolSetErrors(vol);
2855 if (err != -EOPNOTSUPP)
2856 NInoSetTruncateFailed(ni);
2857 else
2858 i_size_write(vi, old_size);
2859 goto out;
2860}
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870#ifdef NTFS_RW
2871void ntfs_truncate_vfs(struct inode *vi) {
2872 ntfs_truncate(vi);
2873}
2874#endif
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890int ntfs_setattr(struct dentry *dentry, struct iattr *attr)
2891{
2892 struct inode *vi = d_inode(dentry);
2893 int err;
2894 unsigned int ia_valid = attr->ia_valid;
2895
2896 err = inode_change_ok(vi, attr);
2897 if (err)
2898 goto out;
2899
2900 if (ia_valid & (ATTR_UID | ATTR_GID | ATTR_MODE)) {
2901 ntfs_warning(vi->i_sb, "Changes in user/group/mode are not "
2902 "supported yet, ignoring.");
2903 err = -EOPNOTSUPP;
2904 goto out;
2905 }
2906 if (ia_valid & ATTR_SIZE) {
2907 if (attr->ia_size != i_size_read(vi)) {
2908 ntfs_inode *ni = NTFS_I(vi);
2909
2910
2911
2912
2913 if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2914 ntfs_warning(vi->i_sb, "Changes in inode size "
2915 "are not supported yet for "
2916 "%s files, ignoring.",
2917 NInoCompressed(ni) ?
2918 "compressed" : "encrypted");
2919 err = -EOPNOTSUPP;
2920 } else {
2921 truncate_setsize(vi, attr->ia_size);
2922 ntfs_truncate_vfs(vi);
2923 }
2924 if (err || ia_valid == ATTR_SIZE)
2925 goto out;
2926 } else {
2927
2928
2929
2930
2931 ia_valid |= ATTR_MTIME | ATTR_CTIME;
2932 }
2933 }
2934 if (ia_valid & ATTR_ATIME)
2935 vi->i_atime = timespec_trunc(attr->ia_atime,
2936 vi->i_sb->s_time_gran);
2937 if (ia_valid & ATTR_MTIME)
2938 vi->i_mtime = timespec_trunc(attr->ia_mtime,
2939 vi->i_sb->s_time_gran);
2940 if (ia_valid & ATTR_CTIME)
2941 vi->i_ctime = timespec_trunc(attr->ia_ctime,
2942 vi->i_sb->s_time_gran);
2943 mark_inode_dirty(vi);
2944out:
2945 return err;
2946}
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966int __ntfs_write_inode(struct inode *vi, int sync)
2967{
2968 sle64 nt;
2969 ntfs_inode *ni = NTFS_I(vi);
2970 ntfs_attr_search_ctx *ctx;
2971 MFT_RECORD *m;
2972 STANDARD_INFORMATION *si;
2973 int err = 0;
2974 bool modified = false;
2975
2976 ntfs_debug("Entering for %sinode 0x%lx.", NInoAttr(ni) ? "attr " : "",
2977 vi->i_ino);
2978
2979
2980
2981
2982
2983 if (NInoAttr(ni)) {
2984 NInoClearDirty(ni);
2985 ntfs_debug("Done.");
2986 return 0;
2987 }
2988
2989 m = map_mft_record(ni);
2990 if (IS_ERR(m)) {
2991 err = PTR_ERR(m);
2992 goto err_out;
2993 }
2994
2995 ctx = ntfs_attr_get_search_ctx(ni, m);
2996 if (unlikely(!ctx)) {
2997 err = -ENOMEM;
2998 goto unm_err_out;
2999 }
3000 err = ntfs_attr_lookup(AT_STANDARD_INFORMATION, NULL, 0,
3001 CASE_SENSITIVE, 0, NULL, 0, ctx);
3002 if (unlikely(err)) {
3003 ntfs_attr_put_search_ctx(ctx);
3004 goto unm_err_out;
3005 }
3006 si = (STANDARD_INFORMATION*)((u8*)ctx->attr +
3007 le16_to_cpu(ctx->attr->data.resident.value_offset));
3008
3009 nt = utc2ntfs(vi->i_mtime);
3010 if (si->last_data_change_time != nt) {
3011 ntfs_debug("Updating mtime for inode 0x%lx: old = 0x%llx, "
3012 "new = 0x%llx", vi->i_ino, (long long)
3013 sle64_to_cpu(si->last_data_change_time),
3014 (long long)sle64_to_cpu(nt));
3015 si->last_data_change_time = nt;
3016 modified = true;
3017 }
3018 nt = utc2ntfs(vi->i_ctime);
3019 if (si->last_mft_change_time != nt) {
3020 ntfs_debug("Updating ctime for inode 0x%lx: old = 0x%llx, "
3021 "new = 0x%llx", vi->i_ino, (long long)
3022 sle64_to_cpu(si->last_mft_change_time),
3023 (long long)sle64_to_cpu(nt));
3024 si->last_mft_change_time = nt;
3025 modified = true;
3026 }
3027 nt = utc2ntfs(vi->i_atime);
3028 if (si->last_access_time != nt) {
3029 ntfs_debug("Updating atime for inode 0x%lx: old = 0x%llx, "
3030 "new = 0x%llx", vi->i_ino,
3031 (long long)sle64_to_cpu(si->last_access_time),
3032 (long long)sle64_to_cpu(nt));
3033 si->last_access_time = nt;
3034 modified = true;
3035 }
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052 if (modified) {
3053 flush_dcache_mft_record_page(ctx->ntfs_ino);
3054 if (!NInoTestSetDirty(ctx->ntfs_ino))
3055 mark_ntfs_record_dirty(ctx->ntfs_ino->page,
3056 ctx->ntfs_ino->page_ofs);
3057 }
3058 ntfs_attr_put_search_ctx(ctx);
3059
3060 if (NInoDirty(ni))
3061 err = write_mft_record(ni, m, sync);
3062
3063 mutex_lock(&ni->extent_lock);
3064 if (ni->nr_extents > 0) {
3065 ntfs_inode **extent_nis = ni->ext.extent_ntfs_inos;
3066 int i;
3067
3068 ntfs_debug("Writing %i extent inodes.", ni->nr_extents);
3069 for (i = 0; i < ni->nr_extents; i++) {
3070 ntfs_inode *tni = extent_nis[i];
3071
3072 if (NInoDirty(tni)) {
3073 MFT_RECORD *tm = map_mft_record(tni);
3074 int ret;
3075
3076 if (IS_ERR(tm)) {
3077 if (!err || err == -ENOMEM)
3078 err = PTR_ERR(tm);
3079 continue;
3080 }
3081 ret = write_mft_record(tni, tm, sync);
3082 unmap_mft_record(tni);
3083 if (unlikely(ret)) {
3084 if (!err || err == -ENOMEM)
3085 err = ret;
3086 }
3087 }
3088 }
3089 }
3090 mutex_unlock(&ni->extent_lock);
3091 unmap_mft_record(ni);
3092 if (unlikely(err))
3093 goto err_out;
3094 ntfs_debug("Done.");
3095 return 0;
3096unm_err_out:
3097 unmap_mft_record(ni);
3098err_out:
3099 if (err == -ENOMEM) {
3100 ntfs_warning(vi->i_sb, "Not enough memory to write inode. "
3101 "Marking the inode dirty again, so the VFS "
3102 "retries later.");
3103 mark_inode_dirty(vi);
3104 } else {
3105 ntfs_error(vi->i_sb, "Failed (error %i): Run chkdsk.", -err);
3106 NVolSetErrors(ni->vol);
3107 }
3108 return err;
3109}
3110
3111#endif
3112