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 = vi->i_gid = 0;
2128
2129 vi->i_mode = S_IFREG;
2130
2131 vi->i_op = &ntfs_empty_inode_ops;
2132 vi->i_fop = &ntfs_empty_file_ops;
2133 }
2134
2135
2136 highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2137 next_vcn = highest_vcn + 1;
2138
2139
2140 if (next_vcn <= 0)
2141 break;
2142
2143
2144 if (next_vcn < sle64_to_cpu(
2145 a->data.non_resident.lowest_vcn)) {
2146 ntfs_error(sb, "$MFT has corrupt attribute list "
2147 "attribute. Run chkdsk.");
2148 goto put_err_out;
2149 }
2150 }
2151 if (err != -ENOENT) {
2152 ntfs_error(sb, "Failed to lookup $MFT/$DATA attribute extent. "
2153 "$MFT is corrupt. Run chkdsk.");
2154 goto put_err_out;
2155 }
2156 if (!a) {
2157 ntfs_error(sb, "$MFT/$DATA attribute not found. $MFT is "
2158 "corrupt. Run chkdsk.");
2159 goto put_err_out;
2160 }
2161 if (highest_vcn && highest_vcn != last_vcn - 1) {
2162 ntfs_error(sb, "Failed to load the complete runlist for "
2163 "$MFT/$DATA. Driver bug or corrupt $MFT. "
2164 "Run chkdsk.");
2165 ntfs_debug("highest_vcn = 0x%llx, last_vcn - 1 = 0x%llx",
2166 (unsigned long long)highest_vcn,
2167 (unsigned long long)last_vcn - 1);
2168 goto put_err_out;
2169 }
2170 ntfs_attr_put_search_ctx(ctx);
2171 ntfs_debug("Done.");
2172 ntfs_free(m);
2173
2174
2175
2176
2177
2178 lockdep_set_class(&ni->runlist.lock, &mft_ni_runlist_lock_key);
2179 lockdep_set_class(&ni->mrec_lock, &mft_ni_mrec_lock_key);
2180
2181 return 0;
2182
2183em_put_err_out:
2184 ntfs_error(sb, "Couldn't find first extent of $DATA attribute in "
2185 "attribute list. $MFT is corrupt. Run chkdsk.");
2186put_err_out:
2187 ntfs_attr_put_search_ctx(ctx);
2188err_out:
2189 ntfs_error(sb, "Failed. Marking inode as bad.");
2190 make_bad_inode(vi);
2191 ntfs_free(m);
2192 return -1;
2193}
2194
2195static void __ntfs_clear_inode(ntfs_inode *ni)
2196{
2197
2198 down_write(&ni->runlist.lock);
2199 if (ni->runlist.rl) {
2200 ntfs_free(ni->runlist.rl);
2201 ni->runlist.rl = NULL;
2202 }
2203 up_write(&ni->runlist.lock);
2204
2205 if (ni->attr_list) {
2206 ntfs_free(ni->attr_list);
2207 ni->attr_list = NULL;
2208 }
2209
2210 down_write(&ni->attr_list_rl.lock);
2211 if (ni->attr_list_rl.rl) {
2212 ntfs_free(ni->attr_list_rl.rl);
2213 ni->attr_list_rl.rl = NULL;
2214 }
2215 up_write(&ni->attr_list_rl.lock);
2216
2217 if (ni->name_len && ni->name != I30) {
2218
2219 BUG_ON(!ni->name);
2220 kfree(ni->name);
2221 }
2222}
2223
2224void ntfs_clear_extent_inode(ntfs_inode *ni)
2225{
2226 ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
2227
2228 BUG_ON(NInoAttr(ni));
2229 BUG_ON(ni->nr_extents != -1);
2230
2231#ifdef NTFS_RW
2232 if (NInoDirty(ni)) {
2233 if (!is_bad_inode(VFS_I(ni->ext.base_ntfs_ino)))
2234 ntfs_error(ni->vol->sb, "Clearing dirty extent inode! "
2235 "Losing data! This is a BUG!!!");
2236
2237 }
2238#endif
2239
2240 __ntfs_clear_inode(ni);
2241
2242
2243 ntfs_destroy_extent_inode(ni);
2244}
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256void ntfs_evict_big_inode(struct inode *vi)
2257{
2258 ntfs_inode *ni = NTFS_I(vi);
2259
2260 truncate_inode_pages(&vi->i_data, 0);
2261 clear_inode(vi);
2262
2263#ifdef NTFS_RW
2264 if (NInoDirty(ni)) {
2265 bool was_bad = (is_bad_inode(vi));
2266
2267
2268 ntfs_commit_inode(vi);
2269
2270 if (!was_bad && (is_bad_inode(vi) || NInoDirty(ni))) {
2271 ntfs_error(vi->i_sb, "Failed to commit dirty inode "
2272 "0x%lx. Losing data!", vi->i_ino);
2273
2274 }
2275 }
2276#endif
2277
2278
2279 if (ni->nr_extents > 0) {
2280 int i;
2281
2282 for (i = 0; i < ni->nr_extents; i++)
2283 ntfs_clear_extent_inode(ni->ext.extent_ntfs_inos[i]);
2284 kfree(ni->ext.extent_ntfs_inos);
2285 }
2286
2287 __ntfs_clear_inode(ni);
2288
2289 if (NInoAttr(ni)) {
2290
2291 if (ni->nr_extents == -1) {
2292 iput(VFS_I(ni->ext.base_ntfs_ino));
2293 ni->nr_extents = 0;
2294 ni->ext.base_ntfs_ino = NULL;
2295 }
2296 }
2297 return;
2298}
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310int ntfs_show_options(struct seq_file *sf, struct dentry *root)
2311{
2312 ntfs_volume *vol = NTFS_SB(root->d_sb);
2313 int i;
2314
2315 seq_printf(sf, ",uid=%i", vol->uid);
2316 seq_printf(sf, ",gid=%i", vol->gid);
2317 if (vol->fmask == vol->dmask)
2318 seq_printf(sf, ",umask=0%o", vol->fmask);
2319 else {
2320 seq_printf(sf, ",fmask=0%o", vol->fmask);
2321 seq_printf(sf, ",dmask=0%o", vol->dmask);
2322 }
2323 seq_printf(sf, ",nls=%s", vol->nls_map->charset);
2324 if (NVolCaseSensitive(vol))
2325 seq_printf(sf, ",case_sensitive");
2326 if (NVolShowSystemFiles(vol))
2327 seq_printf(sf, ",show_sys_files");
2328 if (!NVolSparseEnabled(vol))
2329 seq_printf(sf, ",disable_sparse");
2330 for (i = 0; on_errors_arr[i].val; i++) {
2331 if (on_errors_arr[i].val & vol->on_errors)
2332 seq_printf(sf, ",errors=%s", on_errors_arr[i].str);
2333 }
2334 seq_printf(sf, ",mft_zone_multiplier=%i", vol->mft_zone_multiplier);
2335 return 0;
2336}
2337
2338#ifdef NTFS_RW
2339
2340static const char *es = " Leaving inconsistent metadata. Unmount and run "
2341 "chkdsk.";
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361int ntfs_truncate(struct inode *vi)
2362{
2363 s64 new_size, old_size, nr_freed, new_alloc_size, old_alloc_size;
2364 VCN highest_vcn;
2365 unsigned long flags;
2366 ntfs_inode *base_ni, *ni = NTFS_I(vi);
2367 ntfs_volume *vol = ni->vol;
2368 ntfs_attr_search_ctx *ctx;
2369 MFT_RECORD *m;
2370 ATTR_RECORD *a;
2371 const char *te = " Leaving file length out of sync with i_size.";
2372 int err, mp_size, size_change, alloc_change;
2373 u32 attr_len;
2374
2375 ntfs_debug("Entering for inode 0x%lx.", vi->i_ino);
2376 BUG_ON(NInoAttr(ni));
2377 BUG_ON(S_ISDIR(vi->i_mode));
2378 BUG_ON(NInoMstProtected(ni));
2379 BUG_ON(ni->nr_extents < 0);
2380retry_truncate:
2381
2382
2383
2384
2385 down_write(&ni->runlist.lock);
2386 if (!NInoAttr(ni))
2387 base_ni = ni;
2388 else
2389 base_ni = ni->ext.base_ntfs_ino;
2390 m = map_mft_record(base_ni);
2391 if (IS_ERR(m)) {
2392 err = PTR_ERR(m);
2393 ntfs_error(vi->i_sb, "Failed to map mft record for inode 0x%lx "
2394 "(error code %d).%s", vi->i_ino, err, te);
2395 ctx = NULL;
2396 m = NULL;
2397 goto old_bad_out;
2398 }
2399 ctx = ntfs_attr_get_search_ctx(base_ni, m);
2400 if (unlikely(!ctx)) {
2401 ntfs_error(vi->i_sb, "Failed to allocate a search context for "
2402 "inode 0x%lx (not enough memory).%s",
2403 vi->i_ino, te);
2404 err = -ENOMEM;
2405 goto old_bad_out;
2406 }
2407 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
2408 CASE_SENSITIVE, 0, NULL, 0, ctx);
2409 if (unlikely(err)) {
2410 if (err == -ENOENT) {
2411 ntfs_error(vi->i_sb, "Open attribute is missing from "
2412 "mft record. Inode 0x%lx is corrupt. "
2413 "Run chkdsk.%s", vi->i_ino, te);
2414 err = -EIO;
2415 } else
2416 ntfs_error(vi->i_sb, "Failed to lookup attribute in "
2417 "inode 0x%lx (error code %d).%s",
2418 vi->i_ino, err, te);
2419 goto old_bad_out;
2420 }
2421 m = ctx->mrec;
2422 a = ctx->attr;
2423
2424
2425
2426 new_size = i_size_read(vi);
2427
2428 old_size = ntfs_attr_size(a);
2429
2430 if (NInoNonResident(ni))
2431 new_alloc_size = (new_size + vol->cluster_size - 1) &
2432 ~(s64)vol->cluster_size_mask;
2433 else
2434 new_alloc_size = (new_size + 7) & ~7;
2435
2436 read_lock_irqsave(&ni->size_lock, flags);
2437 old_alloc_size = ni->allocated_size;
2438 read_unlock_irqrestore(&ni->size_lock, flags);
2439
2440
2441
2442
2443 size_change = -1;
2444 if (new_size - old_size >= 0) {
2445 size_change = 1;
2446 if (new_size == old_size)
2447 size_change = 0;
2448 }
2449
2450 alloc_change = -1;
2451 if (new_alloc_size - old_alloc_size >= 0) {
2452 alloc_change = 1;
2453 if (new_alloc_size == old_alloc_size)
2454 alloc_change = 0;
2455 }
2456
2457
2458
2459
2460 if (!size_change && !alloc_change)
2461 goto unm_done;
2462
2463 if (size_change) {
2464 err = ntfs_attr_size_bounds_check(vol, ni->type, new_size);
2465 if (unlikely(err)) {
2466 if (err == -ERANGE) {
2467 ntfs_error(vol->sb, "Truncate would cause the "
2468 "inode 0x%lx to %simum size "
2469 "for its attribute type "
2470 "(0x%x). Aborting truncate.",
2471 vi->i_ino,
2472 new_size > old_size ? "exceed "
2473 "the max" : "go under the min",
2474 le32_to_cpu(ni->type));
2475 err = -EFBIG;
2476 } else {
2477 ntfs_error(vol->sb, "Inode 0x%lx has unknown "
2478 "attribute type 0x%x. "
2479 "Aborting truncate.",
2480 vi->i_ino,
2481 le32_to_cpu(ni->type));
2482 err = -EIO;
2483 }
2484
2485 i_size_write(vi, old_size);
2486 goto err_out;
2487 }
2488 }
2489 if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2490 ntfs_warning(vi->i_sb, "Changes in inode size are not "
2491 "supported yet for %s files, ignoring.",
2492 NInoCompressed(ni) ? "compressed" :
2493 "encrypted");
2494 err = -EOPNOTSUPP;
2495 goto bad_out;
2496 }
2497 if (a->non_resident)
2498 goto do_non_resident_truncate;
2499 BUG_ON(NInoNonResident(ni));
2500
2501 if (new_size < vol->mft_record_size &&
2502 !ntfs_resident_attr_value_resize(m, a, new_size)) {
2503
2504 flush_dcache_mft_record_page(ctx->ntfs_ino);
2505 mark_mft_record_dirty(ctx->ntfs_ino);
2506 write_lock_irqsave(&ni->size_lock, flags);
2507
2508 ni->allocated_size = le32_to_cpu(a->length) -
2509 le16_to_cpu(a->data.resident.value_offset);
2510
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 ni->initialized_size = new_size;
2539 write_unlock_irqrestore(&ni->size_lock, flags);
2540 goto unm_done;
2541 }
2542
2543 BUG_ON(size_change < 0);
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553 ntfs_attr_put_search_ctx(ctx);
2554 unmap_mft_record(base_ni);
2555 up_write(&ni->runlist.lock);
2556
2557
2558
2559
2560 err = ntfs_attr_make_non_resident(ni, old_size);
2561 if (likely(!err))
2562 goto retry_truncate;
2563
2564
2565
2566
2567
2568 if (unlikely(err != -EPERM && err != -ENOSPC)) {
2569 ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, attribute "
2570 "type 0x%x, because the conversion from "
2571 "resident to non-resident attribute failed "
2572 "with error code %i.", vi->i_ino,
2573 (unsigned)le32_to_cpu(ni->type), err);
2574 if (err != -ENOMEM)
2575 err = -EIO;
2576 goto conv_err_out;
2577 }
2578
2579 if (err == -ENOSPC)
2580 ntfs_error(vol->sb, "Not enough space in the mft record/on "
2581 "disk for the non-resident attribute value. "
2582 "This case is not implemented yet.");
2583 else
2584 ntfs_error(vol->sb, "This attribute type may not be "
2585 "non-resident. This case is not implemented "
2586 "yet.");
2587 err = -EOPNOTSUPP;
2588 goto conv_err_out;
2589#if 0
2590
2591 if (!err)
2592 goto do_resident_extend;
2593
2594
2595
2596
2597
2598
2599 if (ni->type == AT_ATTRIBUTE_LIST ||
2600 ni->type == AT_STANDARD_INFORMATION) {
2601
2602
2603 err = -EOPNOTSUPP;
2604 if (!err)
2605 goto do_resident_extend;
2606 goto err_out;
2607 }
2608
2609
2610
2611 err = -EOPNOTSUPP;
2612 if (!err)
2613 goto do_resident_extend;
2614
2615 goto err_out;
2616#endif
2617do_non_resident_truncate:
2618 BUG_ON(!NInoNonResident(ni));
2619 if (alloc_change < 0) {
2620 highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2621 if (highest_vcn > 0 &&
2622 old_alloc_size >> vol->cluster_size_bits >
2623 highest_vcn + 1) {
2624
2625
2626
2627
2628 ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, "
2629 "attribute type 0x%x, because the "
2630 "attribute is highly fragmented (it "
2631 "consists of multiple extents) and "
2632 "this case is not implemented yet.",
2633 vi->i_ino,
2634 (unsigned)le32_to_cpu(ni->type));
2635 err = -EOPNOTSUPP;
2636 goto bad_out;
2637 }
2638 }
2639
2640
2641
2642
2643 if (size_change < 0) {
2644
2645
2646
2647 write_lock_irqsave(&ni->size_lock, flags);
2648 if (new_size < ni->initialized_size) {
2649 ni->initialized_size = new_size;
2650 a->data.non_resident.initialized_size =
2651 cpu_to_sle64(new_size);
2652 }
2653 a->data.non_resident.data_size = cpu_to_sle64(new_size);
2654 write_unlock_irqrestore(&ni->size_lock, flags);
2655 flush_dcache_mft_record_page(ctx->ntfs_ino);
2656 mark_mft_record_dirty(ctx->ntfs_ino);
2657
2658 if (!alloc_change)
2659 goto unm_done;
2660
2661
2662
2663
2664 BUG_ON(alloc_change > 0);
2665 } else {
2666
2667
2668
2669
2670 if (alloc_change > 0) {
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686 ntfs_attr_put_search_ctx(ctx);
2687 unmap_mft_record(base_ni);
2688 up_write(&ni->runlist.lock);
2689 err = ntfs_attr_extend_allocation(ni, new_size,
2690 size_change > 0 ? new_size : -1, -1);
2691
2692
2693
2694
2695 goto done;
2696 }
2697 if (!alloc_change)
2698 goto alloc_done;
2699 }
2700
2701
2702 nr_freed = ntfs_cluster_free(ni, new_alloc_size >>
2703 vol->cluster_size_bits, -1, ctx);
2704 m = ctx->mrec;
2705 a = ctx->attr;
2706 if (unlikely(nr_freed < 0)) {
2707 ntfs_error(vol->sb, "Failed to release cluster(s) (error code "
2708 "%lli). Unmount and run chkdsk to recover "
2709 "the lost cluster(s).", (long long)nr_freed);
2710 NVolSetErrors(vol);
2711 nr_freed = 0;
2712 }
2713
2714 err = ntfs_rl_truncate_nolock(vol, &ni->runlist,
2715 new_alloc_size >> vol->cluster_size_bits);
2716
2717
2718
2719
2720
2721
2722 if (unlikely(err || IS_ERR(m))) {
2723 ntfs_error(vol->sb, "Failed to %s (error code %li).%s",
2724 IS_ERR(m) ?
2725 "restore attribute search context" :
2726 "truncate attribute runlist",
2727 IS_ERR(m) ? PTR_ERR(m) : err, es);
2728 err = -EIO;
2729 goto bad_out;
2730 }
2731
2732 mp_size = ntfs_get_size_for_mapping_pairs(vol, ni->runlist.rl, 0, -1);
2733 if (unlikely(mp_size <= 0)) {
2734 ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2735 "attribute type 0x%x, because determining the "
2736 "size for the mapping pairs failed with error "
2737 "code %i.%s", vi->i_ino,
2738 (unsigned)le32_to_cpu(ni->type), mp_size, es);
2739 err = -EIO;
2740 goto bad_out;
2741 }
2742
2743
2744
2745
2746
2747 attr_len = le32_to_cpu(a->length);
2748 err = ntfs_attr_record_resize(m, a, mp_size +
2749 le16_to_cpu(a->data.non_resident.mapping_pairs_offset));
2750 BUG_ON(err);
2751
2752
2753
2754 err = ntfs_mapping_pairs_build(vol, (u8*)a +
2755 le16_to_cpu(a->data.non_resident.mapping_pairs_offset),
2756 mp_size, ni->runlist.rl, 0, -1, NULL);
2757 if (unlikely(err)) {
2758 ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2759 "attribute type 0x%x, because building the "
2760 "mapping pairs failed with error code %i.%s",
2761 vi->i_ino, (unsigned)le32_to_cpu(ni->type),
2762 err, es);
2763 err = -EIO;
2764 goto bad_out;
2765 }
2766
2767 a->data.non_resident.highest_vcn = cpu_to_sle64((new_alloc_size >>
2768 vol->cluster_size_bits) - 1);
2769 write_lock_irqsave(&ni->size_lock, flags);
2770 ni->allocated_size = new_alloc_size;
2771 a->data.non_resident.allocated_size = cpu_to_sle64(new_alloc_size);
2772 if (NInoSparse(ni) || NInoCompressed(ni)) {
2773 if (nr_freed) {
2774 ni->itype.compressed.size -= nr_freed <<
2775 vol->cluster_size_bits;
2776 BUG_ON(ni->itype.compressed.size < 0);
2777 a->data.non_resident.compressed_size = cpu_to_sle64(
2778 ni->itype.compressed.size);
2779 vi->i_blocks = ni->itype.compressed.size >> 9;
2780 }
2781 } else
2782 vi->i_blocks = new_alloc_size >> 9;
2783 write_unlock_irqrestore(&ni->size_lock, flags);
2784
2785
2786
2787
2788
2789
2790
2791
2792alloc_done:
2793
2794
2795
2796
2797 if (size_change > 0)
2798 a->data.non_resident.data_size = cpu_to_sle64(new_size);
2799
2800 flush_dcache_mft_record_page(ctx->ntfs_ino);
2801 mark_mft_record_dirty(ctx->ntfs_ino);
2802unm_done:
2803 ntfs_attr_put_search_ctx(ctx);
2804 unmap_mft_record(base_ni);
2805 up_write(&ni->runlist.lock);
2806done:
2807
2808
2809
2810
2811
2812
2813 if (!IS_NOCMTIME(VFS_I(base_ni)) && !IS_RDONLY(VFS_I(base_ni))) {
2814 struct timespec now = current_fs_time(VFS_I(base_ni)->i_sb);
2815 int sync_it = 0;
2816
2817 if (!timespec_equal(&VFS_I(base_ni)->i_mtime, &now) ||
2818 !timespec_equal(&VFS_I(base_ni)->i_ctime, &now))
2819 sync_it = 1;
2820 VFS_I(base_ni)->i_mtime = now;
2821 VFS_I(base_ni)->i_ctime = now;
2822
2823 if (sync_it)
2824 mark_inode_dirty_sync(VFS_I(base_ni));
2825 }
2826
2827 if (likely(!err)) {
2828 NInoClearTruncateFailed(ni);
2829 ntfs_debug("Done.");
2830 }
2831 return err;
2832old_bad_out:
2833 old_size = -1;
2834bad_out:
2835 if (err != -ENOMEM && err != -EOPNOTSUPP)
2836 NVolSetErrors(vol);
2837 if (err != -EOPNOTSUPP)
2838 NInoSetTruncateFailed(ni);
2839 else if (old_size >= 0)
2840 i_size_write(vi, old_size);
2841err_out:
2842 if (ctx)
2843 ntfs_attr_put_search_ctx(ctx);
2844 if (m)
2845 unmap_mft_record(base_ni);
2846 up_write(&ni->runlist.lock);
2847out:
2848 ntfs_debug("Failed. Returning error code %i.", err);
2849 return err;
2850conv_err_out:
2851 if (err != -ENOMEM && err != -EOPNOTSUPP)
2852 NVolSetErrors(vol);
2853 if (err != -EOPNOTSUPP)
2854 NInoSetTruncateFailed(ni);
2855 else
2856 i_size_write(vi, old_size);
2857 goto out;
2858}
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868void ntfs_truncate_vfs(struct inode *vi) {
2869 ntfs_truncate(vi);
2870}
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886int ntfs_setattr(struct dentry *dentry, struct iattr *attr)
2887{
2888 struct inode *vi = dentry->d_inode;
2889 int err;
2890 unsigned int ia_valid = attr->ia_valid;
2891
2892 err = inode_change_ok(vi, attr);
2893 if (err)
2894 goto out;
2895
2896 if (ia_valid & (ATTR_UID | ATTR_GID | ATTR_MODE)) {
2897 ntfs_warning(vi->i_sb, "Changes in user/group/mode are not "
2898 "supported yet, ignoring.");
2899 err = -EOPNOTSUPP;
2900 goto out;
2901 }
2902 if (ia_valid & ATTR_SIZE) {
2903 if (attr->ia_size != i_size_read(vi)) {
2904 ntfs_inode *ni = NTFS_I(vi);
2905
2906
2907
2908
2909 if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2910 ntfs_warning(vi->i_sb, "Changes in inode size "
2911 "are not supported yet for "
2912 "%s files, ignoring.",
2913 NInoCompressed(ni) ?
2914 "compressed" : "encrypted");
2915 err = -EOPNOTSUPP;
2916 } else
2917 err = vmtruncate(vi, attr->ia_size);
2918 if (err || ia_valid == ATTR_SIZE)
2919 goto out;
2920 } else {
2921
2922
2923
2924
2925 ia_valid |= ATTR_MTIME | ATTR_CTIME;
2926 }
2927 }
2928 if (ia_valid & ATTR_ATIME)
2929 vi->i_atime = timespec_trunc(attr->ia_atime,
2930 vi->i_sb->s_time_gran);
2931 if (ia_valid & ATTR_MTIME)
2932 vi->i_mtime = timespec_trunc(attr->ia_mtime,
2933 vi->i_sb->s_time_gran);
2934 if (ia_valid & ATTR_CTIME)
2935 vi->i_ctime = timespec_trunc(attr->ia_ctime,
2936 vi->i_sb->s_time_gran);
2937 mark_inode_dirty(vi);
2938out:
2939 return err;
2940}
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960int __ntfs_write_inode(struct inode *vi, int sync)
2961{
2962 sle64 nt;
2963 ntfs_inode *ni = NTFS_I(vi);
2964 ntfs_attr_search_ctx *ctx;
2965 MFT_RECORD *m;
2966 STANDARD_INFORMATION *si;
2967 int err = 0;
2968 bool modified = false;
2969
2970 ntfs_debug("Entering for %sinode 0x%lx.", NInoAttr(ni) ? "attr " : "",
2971 vi->i_ino);
2972
2973
2974
2975
2976
2977 if (NInoAttr(ni)) {
2978 NInoClearDirty(ni);
2979 ntfs_debug("Done.");
2980 return 0;
2981 }
2982
2983 m = map_mft_record(ni);
2984 if (IS_ERR(m)) {
2985 err = PTR_ERR(m);
2986 goto err_out;
2987 }
2988
2989 ctx = ntfs_attr_get_search_ctx(ni, m);
2990 if (unlikely(!ctx)) {
2991 err = -ENOMEM;
2992 goto unm_err_out;
2993 }
2994 err = ntfs_attr_lookup(AT_STANDARD_INFORMATION, NULL, 0,
2995 CASE_SENSITIVE, 0, NULL, 0, ctx);
2996 if (unlikely(err)) {
2997 ntfs_attr_put_search_ctx(ctx);
2998 goto unm_err_out;
2999 }
3000 si = (STANDARD_INFORMATION*)((u8*)ctx->attr +
3001 le16_to_cpu(ctx->attr->data.resident.value_offset));
3002
3003 nt = utc2ntfs(vi->i_mtime);
3004 if (si->last_data_change_time != nt) {
3005 ntfs_debug("Updating mtime for inode 0x%lx: old = 0x%llx, "
3006 "new = 0x%llx", vi->i_ino, (long long)
3007 sle64_to_cpu(si->last_data_change_time),
3008 (long long)sle64_to_cpu(nt));
3009 si->last_data_change_time = nt;
3010 modified = true;
3011 }
3012 nt = utc2ntfs(vi->i_ctime);
3013 if (si->last_mft_change_time != nt) {
3014 ntfs_debug("Updating ctime for inode 0x%lx: old = 0x%llx, "
3015 "new = 0x%llx", vi->i_ino, (long long)
3016 sle64_to_cpu(si->last_mft_change_time),
3017 (long long)sle64_to_cpu(nt));
3018 si->last_mft_change_time = nt;
3019 modified = true;
3020 }
3021 nt = utc2ntfs(vi->i_atime);
3022 if (si->last_access_time != nt) {
3023 ntfs_debug("Updating atime for inode 0x%lx: old = 0x%llx, "
3024 "new = 0x%llx", vi->i_ino,
3025 (long long)sle64_to_cpu(si->last_access_time),
3026 (long long)sle64_to_cpu(nt));
3027 si->last_access_time = nt;
3028 modified = true;
3029 }
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046 if (modified) {
3047 flush_dcache_mft_record_page(ctx->ntfs_ino);
3048 if (!NInoTestSetDirty(ctx->ntfs_ino))
3049 mark_ntfs_record_dirty(ctx->ntfs_ino->page,
3050 ctx->ntfs_ino->page_ofs);
3051 }
3052 ntfs_attr_put_search_ctx(ctx);
3053
3054 if (NInoDirty(ni))
3055 err = write_mft_record(ni, m, sync);
3056
3057 mutex_lock(&ni->extent_lock);
3058 if (ni->nr_extents > 0) {
3059 ntfs_inode **extent_nis = ni->ext.extent_ntfs_inos;
3060 int i;
3061
3062 ntfs_debug("Writing %i extent inodes.", ni->nr_extents);
3063 for (i = 0; i < ni->nr_extents; i++) {
3064 ntfs_inode *tni = extent_nis[i];
3065
3066 if (NInoDirty(tni)) {
3067 MFT_RECORD *tm = map_mft_record(tni);
3068 int ret;
3069
3070 if (IS_ERR(tm)) {
3071 if (!err || err == -ENOMEM)
3072 err = PTR_ERR(tm);
3073 continue;
3074 }
3075 ret = write_mft_record(tni, tm, sync);
3076 unmap_mft_record(tni);
3077 if (unlikely(ret)) {
3078 if (!err || err == -ENOMEM)
3079 err = ret;
3080 }
3081 }
3082 }
3083 }
3084 mutex_unlock(&ni->extent_lock);
3085 unmap_mft_record(ni);
3086 if (unlikely(err))
3087 goto err_out;
3088 ntfs_debug("Done.");
3089 return 0;
3090unm_err_out:
3091 unmap_mft_record(ni);
3092err_out:
3093 if (err == -ENOMEM) {
3094 ntfs_warning(vi->i_sb, "Not enough memory to write inode. "
3095 "Marking the inode dirty again, so the VFS "
3096 "retries later.");
3097 mark_inode_dirty(vi);
3098 } else {
3099 ntfs_error(vi->i_sb, "Failed (error %i): Run chkdsk.", -err);
3100 NVolSetErrors(ni->vol);
3101 }
3102 return err;
3103}
3104
3105#endif
3106