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#include <linux/aio.h>
32
33#include "aops.h"
34#include "attrib.h"
35#include "bitmap.h"
36#include "dir.h"
37#include "debug.h"
38#include "inode.h"
39#include "lcnalloc.h"
40#include "malloc.h"
41#include "mft.h"
42#include "time.h"
43#include "ntfs.h"
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61int ntfs_test_inode(struct inode *vi, ntfs_attr *na)
62{
63 ntfs_inode *ni;
64
65 if (vi->i_ino != na->mft_no)
66 return 0;
67 ni = NTFS_I(vi);
68
69 if (likely(!NInoAttr(ni))) {
70
71 if (unlikely(na->type != AT_UNUSED))
72 return 0;
73 } else {
74
75 if (ni->type != na->type)
76 return 0;
77 if (ni->name_len != na->name_len)
78 return 0;
79 if (na->name_len && memcmp(ni->name, na->name,
80 na->name_len * sizeof(ntfschar)))
81 return 0;
82 }
83
84 return 1;
85}
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105static int ntfs_init_locked_inode(struct inode *vi, ntfs_attr *na)
106{
107 ntfs_inode *ni = NTFS_I(vi);
108
109 vi->i_ino = na->mft_no;
110
111 ni->type = na->type;
112 if (na->type == AT_INDEX_ALLOCATION)
113 NInoSetMstProtected(ni);
114
115 ni->name = na->name;
116 ni->name_len = na->name_len;
117
118
119 if (likely(na->type == AT_UNUSED)) {
120 BUG_ON(na->name);
121 BUG_ON(na->name_len);
122 return 0;
123 }
124
125
126 NInoSetAttr(ni);
127
128
129
130
131
132
133
134
135 if (na->name_len && na->name != I30) {
136 unsigned int i;
137
138 BUG_ON(!na->name);
139 i = na->name_len * sizeof(ntfschar);
140 ni->name = kmalloc(i + sizeof(ntfschar), GFP_ATOMIC);
141 if (!ni->name)
142 return -ENOMEM;
143 memcpy(ni->name, na->name, i);
144 ni->name[na->name_len] = 0;
145 }
146 return 0;
147}
148
149typedef int (*set_t)(struct inode *, void *);
150static int ntfs_read_locked_inode(struct inode *vi);
151static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi);
152static int ntfs_read_locked_index_inode(struct inode *base_vi,
153 struct inode *vi);
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171struct inode *ntfs_iget(struct super_block *sb, unsigned long mft_no)
172{
173 struct inode *vi;
174 int err;
175 ntfs_attr na;
176
177 na.mft_no = mft_no;
178 na.type = AT_UNUSED;
179 na.name = NULL;
180 na.name_len = 0;
181
182 vi = iget5_locked(sb, mft_no, (test_t)ntfs_test_inode,
183 (set_t)ntfs_init_locked_inode, &na);
184 if (unlikely(!vi))
185 return ERR_PTR(-ENOMEM);
186
187 err = 0;
188
189
190 if (vi->i_state & I_NEW) {
191 err = ntfs_read_locked_inode(vi);
192 unlock_new_inode(vi);
193 }
194
195
196
197
198 if (unlikely(err == -ENOMEM)) {
199 iput(vi);
200 vi = ERR_PTR(err);
201 }
202 return vi;
203}
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228struct inode *ntfs_attr_iget(struct inode *base_vi, ATTR_TYPE type,
229 ntfschar *name, u32 name_len)
230{
231 struct inode *vi;
232 int err;
233 ntfs_attr na;
234
235
236 BUG_ON(type == AT_INDEX_ALLOCATION);
237
238 na.mft_no = base_vi->i_ino;
239 na.type = type;
240 na.name = name;
241 na.name_len = name_len;
242
243 vi = iget5_locked(base_vi->i_sb, na.mft_no, (test_t)ntfs_test_inode,
244 (set_t)ntfs_init_locked_inode, &na);
245 if (unlikely(!vi))
246 return ERR_PTR(-ENOMEM);
247
248 err = 0;
249
250
251 if (vi->i_state & I_NEW) {
252 err = ntfs_read_locked_attr_inode(base_vi, vi);
253 unlock_new_inode(vi);
254 }
255
256
257
258
259
260 if (unlikely(err)) {
261 iput(vi);
262 vi = ERR_PTR(err);
263 }
264 return vi;
265}
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286struct inode *ntfs_index_iget(struct inode *base_vi, ntfschar *name,
287 u32 name_len)
288{
289 struct inode *vi;
290 int err;
291 ntfs_attr na;
292
293 na.mft_no = base_vi->i_ino;
294 na.type = AT_INDEX_ALLOCATION;
295 na.name = name;
296 na.name_len = name_len;
297
298 vi = iget5_locked(base_vi->i_sb, na.mft_no, (test_t)ntfs_test_inode,
299 (set_t)ntfs_init_locked_inode, &na);
300 if (unlikely(!vi))
301 return ERR_PTR(-ENOMEM);
302
303 err = 0;
304
305
306 if (vi->i_state & I_NEW) {
307 err = ntfs_read_locked_index_inode(base_vi, vi);
308 unlock_new_inode(vi);
309 }
310
311
312
313
314
315 if (unlikely(err)) {
316 iput(vi);
317 vi = ERR_PTR(err);
318 }
319 return vi;
320}
321
322struct inode *ntfs_alloc_big_inode(struct super_block *sb)
323{
324 ntfs_inode *ni;
325
326 ntfs_debug("Entering.");
327 ni = kmem_cache_alloc(ntfs_big_inode_cache, GFP_NOFS);
328 if (likely(ni != NULL)) {
329 ni->state = 0;
330 return VFS_I(ni);
331 }
332 ntfs_error(sb, "Allocation of NTFS big inode structure failed.");
333 return NULL;
334}
335
336static void ntfs_i_callback(struct rcu_head *head)
337{
338 struct inode *inode = container_of(head, struct inode, i_rcu);
339 kmem_cache_free(ntfs_big_inode_cache, NTFS_I(inode));
340}
341
342void ntfs_destroy_big_inode(struct inode *inode)
343{
344 ntfs_inode *ni = NTFS_I(inode);
345
346 ntfs_debug("Entering.");
347 BUG_ON(ni->page);
348 if (!atomic_dec_and_test(&ni->count))
349 BUG();
350 call_rcu(&inode->i_rcu, ntfs_i_callback);
351}
352
353static inline ntfs_inode *ntfs_alloc_extent_inode(void)
354{
355 ntfs_inode *ni;
356
357 ntfs_debug("Entering.");
358 ni = kmem_cache_alloc(ntfs_inode_cache, GFP_NOFS);
359 if (likely(ni != NULL)) {
360 ni->state = 0;
361 return ni;
362 }
363 ntfs_error(NULL, "Allocation of NTFS inode structure failed.");
364 return NULL;
365}
366
367static void ntfs_destroy_extent_inode(ntfs_inode *ni)
368{
369 ntfs_debug("Entering.");
370 BUG_ON(ni->page);
371 if (!atomic_dec_and_test(&ni->count))
372 BUG();
373 kmem_cache_free(ntfs_inode_cache, ni);
374}
375
376
377
378
379
380static struct lock_class_key attr_list_rl_lock_class;
381
382
383
384
385
386
387
388
389
390
391
392
393
394void __ntfs_init_inode(struct super_block *sb, ntfs_inode *ni)
395{
396 ntfs_debug("Entering.");
397 rwlock_init(&ni->size_lock);
398 ni->initialized_size = ni->allocated_size = 0;
399 ni->seq_no = 0;
400 atomic_set(&ni->count, 1);
401 ni->vol = NTFS_SB(sb);
402 ntfs_init_runlist(&ni->runlist);
403 mutex_init(&ni->mrec_lock);
404 ni->page = NULL;
405 ni->page_ofs = 0;
406 ni->attr_list_size = 0;
407 ni->attr_list = NULL;
408 ntfs_init_runlist(&ni->attr_list_rl);
409 lockdep_set_class(&ni->attr_list_rl.lock,
410 &attr_list_rl_lock_class);
411 ni->itype.index.block_size = 0;
412 ni->itype.index.vcn_size = 0;
413 ni->itype.index.collation_rule = 0;
414 ni->itype.index.block_size_bits = 0;
415 ni->itype.index.vcn_size_bits = 0;
416 mutex_init(&ni->extent_lock);
417 ni->nr_extents = 0;
418 ni->ext.base_ntfs_ino = NULL;
419}
420
421
422
423
424
425
426static struct lock_class_key extent_inode_mrec_lock_key;
427
428inline ntfs_inode *ntfs_new_extent_inode(struct super_block *sb,
429 unsigned long mft_no)
430{
431 ntfs_inode *ni = ntfs_alloc_extent_inode();
432
433 ntfs_debug("Entering.");
434 if (likely(ni != NULL)) {
435 __ntfs_init_inode(sb, ni);
436 lockdep_set_class(&ni->mrec_lock, &extent_inode_mrec_lock_key);
437 ni->mft_no = mft_no;
438 ni->type = AT_UNUSED;
439 ni->name = NULL;
440 ni->name_len = 0;
441 }
442 return ni;
443}
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458static int ntfs_is_extended_system_file(ntfs_attr_search_ctx *ctx)
459{
460 int nr_links, err;
461
462
463 ntfs_attr_reinit_search_ctx(ctx);
464
465
466 nr_links = le16_to_cpu(ctx->mrec->link_count);
467
468
469 while (!(err = ntfs_attr_lookup(AT_FILE_NAME, NULL, 0, 0, 0, NULL, 0,
470 ctx))) {
471 FILE_NAME_ATTR *file_name_attr;
472 ATTR_RECORD *attr = ctx->attr;
473 u8 *p, *p2;
474
475 nr_links--;
476
477
478
479
480 p = (u8*)attr + le32_to_cpu(attr->length);
481 if (p < (u8*)ctx->mrec || (u8*)p > (u8*)ctx->mrec +
482 le32_to_cpu(ctx->mrec->bytes_in_use)) {
483err_corrupt_attr:
484 ntfs_error(ctx->ntfs_ino->vol->sb, "Corrupt file name "
485 "attribute. You should run chkdsk.");
486 return -EIO;
487 }
488 if (attr->non_resident) {
489 ntfs_error(ctx->ntfs_ino->vol->sb, "Non-resident file "
490 "name. You should run chkdsk.");
491 return -EIO;
492 }
493 if (attr->flags) {
494 ntfs_error(ctx->ntfs_ino->vol->sb, "File name with "
495 "invalid flags. You should run "
496 "chkdsk.");
497 return -EIO;
498 }
499 if (!(attr->data.resident.flags & RESIDENT_ATTR_IS_INDEXED)) {
500 ntfs_error(ctx->ntfs_ino->vol->sb, "Unindexed file "
501 "name. You should run chkdsk.");
502 return -EIO;
503 }
504 file_name_attr = (FILE_NAME_ATTR*)((u8*)attr +
505 le16_to_cpu(attr->data.resident.value_offset));
506 p2 = (u8*)attr + le32_to_cpu(attr->data.resident.value_length);
507 if (p2 < (u8*)attr || p2 > p)
508 goto err_corrupt_attr;
509
510 if (MREF_LE(file_name_attr->parent_directory) == FILE_Extend)
511 return 1;
512 }
513 if (unlikely(err != -ENOENT))
514 return err;
515 if (unlikely(nr_links)) {
516 ntfs_error(ctx->ntfs_ino->vol->sb, "Inode hard link count "
517 "doesn't match number of name attributes. You "
518 "should run chkdsk.");
519 return -EIO;
520 }
521 return 0;
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
549
550static int ntfs_read_locked_inode(struct inode *vi)
551{
552 ntfs_volume *vol = NTFS_SB(vi->i_sb);
553 ntfs_inode *ni;
554 struct inode *bvi;
555 MFT_RECORD *m;
556 ATTR_RECORD *a;
557 STANDARD_INFORMATION *si;
558 ntfs_attr_search_ctx *ctx;
559 int err = 0;
560
561 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
562
563
564
565
566
567
568
569 vi->i_version = 1;
570
571 vi->i_uid = vol->uid;
572 vi->i_gid = vol->gid;
573 vi->i_mode = 0;
574
575
576
577
578
579 if (vi->i_ino != FILE_MFT)
580 ntfs_init_big_inode(vi);
581 ni = NTFS_I(vi);
582
583 m = map_mft_record(ni);
584 if (IS_ERR(m)) {
585 err = PTR_ERR(m);
586 goto err_out;
587 }
588 ctx = ntfs_attr_get_search_ctx(ni, m);
589 if (!ctx) {
590 err = -ENOMEM;
591 goto unm_err_out;
592 }
593
594 if (!(m->flags & MFT_RECORD_IN_USE)) {
595 ntfs_error(vi->i_sb, "Inode is not in use!");
596 goto unm_err_out;
597 }
598 if (m->base_mft_record) {
599 ntfs_error(vi->i_sb, "Inode is an extent inode!");
600 goto unm_err_out;
601 }
602
603
604 vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number);
605
606
607
608
609
610
611
612
613
614
615 set_nlink(vi, le16_to_cpu(m->link_count));
616
617
618
619
620
621
622
623
624 vi->i_mode |= S_IRWXUGO;
625
626 if (IS_RDONLY(vi))
627 vi->i_mode &= ~S_IWUGO;
628 if (m->flags & MFT_RECORD_IS_DIRECTORY) {
629 vi->i_mode |= S_IFDIR;
630
631
632
633
634 vi->i_mode &= ~vol->dmask;
635
636 if (vi->i_nlink > 1)
637 set_nlink(vi, 1);
638 } else {
639 vi->i_mode |= S_IFREG;
640
641 vi->i_mode &= ~vol->fmask;
642 }
643
644
645
646
647
648
649 err = ntfs_attr_lookup(AT_STANDARD_INFORMATION, NULL, 0, 0, 0, NULL, 0,
650 ctx);
651 if (unlikely(err)) {
652 if (err == -ENOENT) {
653
654
655
656
657
658 ntfs_error(vi->i_sb, "$STANDARD_INFORMATION attribute "
659 "is missing.");
660 }
661 goto unm_err_out;
662 }
663 a = ctx->attr;
664
665 si = (STANDARD_INFORMATION*)((u8*)a +
666 le16_to_cpu(a->data.resident.value_offset));
667
668
669
670
671
672
673
674
675
676
677
678 vi->i_mtime = ntfs2utc(si->last_data_change_time);
679
680
681
682
683
684 vi->i_ctime = ntfs2utc(si->last_mft_change_time);
685
686
687
688
689 vi->i_atime = ntfs2utc(si->last_access_time);
690
691
692 ntfs_attr_reinit_search_ctx(ctx);
693 err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx);
694 if (err) {
695 if (unlikely(err != -ENOENT)) {
696 ntfs_error(vi->i_sb, "Failed to lookup attribute list "
697 "attribute.");
698 goto unm_err_out;
699 }
700 } else {
701 if (vi->i_ino == FILE_MFT)
702 goto skip_attr_list_load;
703 ntfs_debug("Attribute list found in inode 0x%lx.", vi->i_ino);
704 NInoSetAttrList(ni);
705 a = ctx->attr;
706 if (a->flags & ATTR_COMPRESSION_MASK) {
707 ntfs_error(vi->i_sb, "Attribute list attribute is "
708 "compressed.");
709 goto unm_err_out;
710 }
711 if (a->flags & ATTR_IS_ENCRYPTED ||
712 a->flags & ATTR_IS_SPARSE) {
713 if (a->non_resident) {
714 ntfs_error(vi->i_sb, "Non-resident attribute "
715 "list attribute is encrypted/"
716 "sparse.");
717 goto unm_err_out;
718 }
719 ntfs_warning(vi->i_sb, "Resident attribute list "
720 "attribute in inode 0x%lx is marked "
721 "encrypted/sparse which is not true. "
722 "However, Windows allows this and "
723 "chkdsk does not detect or correct it "
724 "so we will just ignore the invalid "
725 "flags and pretend they are not set.",
726 vi->i_ino);
727 }
728
729 ni->attr_list_size = (u32)ntfs_attr_size(a);
730 ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size);
731 if (!ni->attr_list) {
732 ntfs_error(vi->i_sb, "Not enough memory to allocate "
733 "buffer for attribute list.");
734 err = -ENOMEM;
735 goto unm_err_out;
736 }
737 if (a->non_resident) {
738 NInoSetAttrListNonResident(ni);
739 if (a->data.non_resident.lowest_vcn) {
740 ntfs_error(vi->i_sb, "Attribute list has non "
741 "zero lowest_vcn.");
742 goto unm_err_out;
743 }
744
745
746
747
748 ni->attr_list_rl.rl = ntfs_mapping_pairs_decompress(vol,
749 a, NULL);
750 if (IS_ERR(ni->attr_list_rl.rl)) {
751 err = PTR_ERR(ni->attr_list_rl.rl);
752 ni->attr_list_rl.rl = NULL;
753 ntfs_error(vi->i_sb, "Mapping pairs "
754 "decompression failed.");
755 goto unm_err_out;
756 }
757
758 if ((err = load_attribute_list(vol, &ni->attr_list_rl,
759 ni->attr_list, ni->attr_list_size,
760 sle64_to_cpu(a->data.non_resident.
761 initialized_size)))) {
762 ntfs_error(vi->i_sb, "Failed to load "
763 "attribute list attribute.");
764 goto unm_err_out;
765 }
766 } else {
767 if ((u8*)a + le16_to_cpu(a->data.resident.value_offset)
768 + le32_to_cpu(
769 a->data.resident.value_length) >
770 (u8*)ctx->mrec + vol->mft_record_size) {
771 ntfs_error(vi->i_sb, "Corrupt attribute list "
772 "in inode.");
773 goto unm_err_out;
774 }
775
776 memcpy(ni->attr_list, (u8*)a + le16_to_cpu(
777 a->data.resident.value_offset),
778 le32_to_cpu(
779 a->data.resident.value_length));
780 }
781 }
782skip_attr_list_load:
783
784
785
786
787 if (S_ISDIR(vi->i_mode)) {
788 loff_t bvi_size;
789 ntfs_inode *bni;
790 INDEX_ROOT *ir;
791 u8 *ir_end, *index_end;
792
793
794 ntfs_attr_reinit_search_ctx(ctx);
795 err = ntfs_attr_lookup(AT_INDEX_ROOT, I30, 4, CASE_SENSITIVE,
796 0, NULL, 0, ctx);
797 if (unlikely(err)) {
798 if (err == -ENOENT) {
799
800
801
802 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute "
803 "is missing.");
804 }
805 goto unm_err_out;
806 }
807 a = ctx->attr;
808
809 if (unlikely(a->non_resident)) {
810 ntfs_error(vol->sb, "$INDEX_ROOT attribute is not "
811 "resident.");
812 goto unm_err_out;
813 }
814
815 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
816 le16_to_cpu(a->data.resident.value_offset)))) {
817 ntfs_error(vol->sb, "$INDEX_ROOT attribute name is "
818 "placed after the attribute value.");
819 goto unm_err_out;
820 }
821
822
823
824
825
826
827 if (a->flags & ATTR_COMPRESSION_MASK)
828 NInoSetCompressed(ni);
829 if (a->flags & ATTR_IS_ENCRYPTED) {
830 if (a->flags & ATTR_COMPRESSION_MASK) {
831 ntfs_error(vi->i_sb, "Found encrypted and "
832 "compressed attribute.");
833 goto unm_err_out;
834 }
835 NInoSetEncrypted(ni);
836 }
837 if (a->flags & ATTR_IS_SPARSE)
838 NInoSetSparse(ni);
839 ir = (INDEX_ROOT*)((u8*)a +
840 le16_to_cpu(a->data.resident.value_offset));
841 ir_end = (u8*)ir + le32_to_cpu(a->data.resident.value_length);
842 if (ir_end > (u8*)ctx->mrec + vol->mft_record_size) {
843 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is "
844 "corrupt.");
845 goto unm_err_out;
846 }
847 index_end = (u8*)&ir->index +
848 le32_to_cpu(ir->index.index_length);
849 if (index_end > ir_end) {
850 ntfs_error(vi->i_sb, "Directory index is corrupt.");
851 goto unm_err_out;
852 }
853 if (ir->type != AT_FILE_NAME) {
854 ntfs_error(vi->i_sb, "Indexed attribute is not "
855 "$FILE_NAME.");
856 goto unm_err_out;
857 }
858 if (ir->collation_rule != COLLATION_FILE_NAME) {
859 ntfs_error(vi->i_sb, "Index collation rule is not "
860 "COLLATION_FILE_NAME.");
861 goto unm_err_out;
862 }
863 ni->itype.index.collation_rule = ir->collation_rule;
864 ni->itype.index.block_size = le32_to_cpu(ir->index_block_size);
865 if (ni->itype.index.block_size &
866 (ni->itype.index.block_size - 1)) {
867 ntfs_error(vi->i_sb, "Index block size (%u) is not a "
868 "power of two.",
869 ni->itype.index.block_size);
870 goto unm_err_out;
871 }
872 if (ni->itype.index.block_size > PAGE_CACHE_SIZE) {
873 ntfs_error(vi->i_sb, "Index block size (%u) > "
874 "PAGE_CACHE_SIZE (%ld) is not "
875 "supported. Sorry.",
876 ni->itype.index.block_size,
877 PAGE_CACHE_SIZE);
878 err = -EOPNOTSUPP;
879 goto unm_err_out;
880 }
881 if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) {
882 ntfs_error(vi->i_sb, "Index block size (%u) < "
883 "NTFS_BLOCK_SIZE (%i) is not "
884 "supported. Sorry.",
885 ni->itype.index.block_size,
886 NTFS_BLOCK_SIZE);
887 err = -EOPNOTSUPP;
888 goto unm_err_out;
889 }
890 ni->itype.index.block_size_bits =
891 ffs(ni->itype.index.block_size) - 1;
892
893 if (vol->cluster_size <= ni->itype.index.block_size) {
894 ni->itype.index.vcn_size = vol->cluster_size;
895 ni->itype.index.vcn_size_bits = vol->cluster_size_bits;
896 } else {
897 ni->itype.index.vcn_size = vol->sector_size;
898 ni->itype.index.vcn_size_bits = vol->sector_size_bits;
899 }
900
901
902 NInoSetMstProtected(ni);
903 ni->type = AT_INDEX_ALLOCATION;
904 ni->name = I30;
905 ni->name_len = 4;
906
907 if (!(ir->index.flags & LARGE_INDEX)) {
908
909 vi->i_size = ni->initialized_size =
910 ni->allocated_size = 0;
911
912 ntfs_attr_put_search_ctx(ctx);
913 unmap_mft_record(ni);
914 m = NULL;
915 ctx = NULL;
916 goto skip_large_dir_stuff;
917 }
918 NInoSetIndexAllocPresent(ni);
919
920 ntfs_attr_reinit_search_ctx(ctx);
921 err = ntfs_attr_lookup(AT_INDEX_ALLOCATION, I30, 4,
922 CASE_SENSITIVE, 0, NULL, 0, ctx);
923 if (unlikely(err)) {
924 if (err == -ENOENT)
925 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION "
926 "attribute is not present but "
927 "$INDEX_ROOT indicated it is.");
928 else
929 ntfs_error(vi->i_sb, "Failed to lookup "
930 "$INDEX_ALLOCATION "
931 "attribute.");
932 goto unm_err_out;
933 }
934 a = ctx->attr;
935 if (!a->non_resident) {
936 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
937 "is resident.");
938 goto unm_err_out;
939 }
940
941
942
943
944 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
945 le16_to_cpu(
946 a->data.non_resident.mapping_pairs_offset)))) {
947 ntfs_error(vol->sb, "$INDEX_ALLOCATION attribute name "
948 "is placed after the mapping pairs "
949 "array.");
950 goto unm_err_out;
951 }
952 if (a->flags & ATTR_IS_ENCRYPTED) {
953 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
954 "is encrypted.");
955 goto unm_err_out;
956 }
957 if (a->flags & ATTR_IS_SPARSE) {
958 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
959 "is sparse.");
960 goto unm_err_out;
961 }
962 if (a->flags & ATTR_COMPRESSION_MASK) {
963 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
964 "is compressed.");
965 goto unm_err_out;
966 }
967 if (a->data.non_resident.lowest_vcn) {
968 ntfs_error(vi->i_sb, "First extent of "
969 "$INDEX_ALLOCATION attribute has non "
970 "zero lowest_vcn.");
971 goto unm_err_out;
972 }
973 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
974 ni->initialized_size = sle64_to_cpu(
975 a->data.non_resident.initialized_size);
976 ni->allocated_size = sle64_to_cpu(
977 a->data.non_resident.allocated_size);
978
979
980
981
982 ntfs_attr_put_search_ctx(ctx);
983 unmap_mft_record(ni);
984 m = NULL;
985 ctx = NULL;
986
987 bvi = ntfs_attr_iget(vi, AT_BITMAP, I30, 4);
988 if (IS_ERR(bvi)) {
989 ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
990 err = PTR_ERR(bvi);
991 goto unm_err_out;
992 }
993 bni = NTFS_I(bvi);
994 if (NInoCompressed(bni) || NInoEncrypted(bni) ||
995 NInoSparse(bni)) {
996 ntfs_error(vi->i_sb, "$BITMAP attribute is compressed "
997 "and/or encrypted and/or sparse.");
998 goto iput_unm_err_out;
999 }
1000
1001 bvi_size = i_size_read(bvi);
1002 if ((bvi_size << 3) < (vi->i_size >>
1003 ni->itype.index.block_size_bits)) {
1004 ntfs_error(vi->i_sb, "Index bitmap too small (0x%llx) "
1005 "for index allocation (0x%llx).",
1006 bvi_size << 3, vi->i_size);
1007 goto iput_unm_err_out;
1008 }
1009
1010 iput(bvi);
1011skip_large_dir_stuff:
1012
1013 vi->i_op = &ntfs_dir_inode_ops;
1014 vi->i_fop = &ntfs_dir_ops;
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 }
1164 if (NInoMstProtected(ni))
1165 vi->i_mapping->a_ops = &ntfs_mst_aops;
1166 else
1167 vi->i_mapping->a_ops = &ntfs_aops;
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179 if (S_ISREG(vi->i_mode) && (NInoCompressed(ni) || NInoSparse(ni)))
1180 vi->i_blocks = ni->itype.compressed.size >> 9;
1181 else
1182 vi->i_blocks = ni->allocated_size >> 9;
1183 ntfs_debug("Done.");
1184 return 0;
1185iput_unm_err_out:
1186 iput(bvi);
1187unm_err_out:
1188 if (!err)
1189 err = -EIO;
1190 if (ctx)
1191 ntfs_attr_put_search_ctx(ctx);
1192 if (m)
1193 unmap_mft_record(ni);
1194err_out:
1195 ntfs_error(vol->sb, "Failed with error code %i. Marking corrupt "
1196 "inode 0x%lx as bad. Run chkdsk.", err, vi->i_ino);
1197 make_bad_inode(vi);
1198 if (err != -EOPNOTSUPP && err != -ENOMEM)
1199 NVolSetErrors(vol);
1200 return err;
1201}
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi)
1226{
1227 ntfs_volume *vol = NTFS_SB(vi->i_sb);
1228 ntfs_inode *ni, *base_ni;
1229 MFT_RECORD *m;
1230 ATTR_RECORD *a;
1231 ntfs_attr_search_ctx *ctx;
1232 int err = 0;
1233
1234 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1235
1236 ntfs_init_big_inode(vi);
1237
1238 ni = NTFS_I(vi);
1239 base_ni = NTFS_I(base_vi);
1240
1241
1242 vi->i_version = base_vi->i_version;
1243 vi->i_uid = base_vi->i_uid;
1244 vi->i_gid = base_vi->i_gid;
1245 set_nlink(vi, base_vi->i_nlink);
1246 vi->i_mtime = base_vi->i_mtime;
1247 vi->i_ctime = base_vi->i_ctime;
1248 vi->i_atime = base_vi->i_atime;
1249 vi->i_generation = ni->seq_no = base_ni->seq_no;
1250
1251
1252 vi->i_mode = base_vi->i_mode & ~S_IFMT;
1253
1254 m = map_mft_record(base_ni);
1255 if (IS_ERR(m)) {
1256 err = PTR_ERR(m);
1257 goto err_out;
1258 }
1259 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1260 if (!ctx) {
1261 err = -ENOMEM;
1262 goto unm_err_out;
1263 }
1264
1265 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
1266 CASE_SENSITIVE, 0, NULL, 0, ctx);
1267 if (unlikely(err))
1268 goto unm_err_out;
1269 a = ctx->attr;
1270 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) {
1271 if (a->flags & ATTR_COMPRESSION_MASK) {
1272 NInoSetCompressed(ni);
1273 if ((ni->type != AT_DATA) || (ni->type == AT_DATA &&
1274 ni->name_len)) {
1275 ntfs_error(vi->i_sb, "Found compressed "
1276 "non-data or named data "
1277 "attribute. Please report "
1278 "you saw this message to "
1279 "linux-ntfs-dev@lists."
1280 "sourceforge.net");
1281 goto unm_err_out;
1282 }
1283 if (vol->cluster_size > 4096) {
1284 ntfs_error(vi->i_sb, "Found compressed "
1285 "attribute but compression is "
1286 "disabled due to cluster size "
1287 "(%i) > 4kiB.",
1288 vol->cluster_size);
1289 goto unm_err_out;
1290 }
1291 if ((a->flags & ATTR_COMPRESSION_MASK) !=
1292 ATTR_IS_COMPRESSED) {
1293 ntfs_error(vi->i_sb, "Found unknown "
1294 "compression method.");
1295 goto unm_err_out;
1296 }
1297 }
1298
1299
1300
1301
1302 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1303 ntfs_error(vi->i_sb, "Found mst protected attribute "
1304 "but the attribute is %s. Please "
1305 "report you saw this message to "
1306 "linux-ntfs-dev@lists.sourceforge.net",
1307 NInoCompressed(ni) ? "compressed" :
1308 "sparse");
1309 goto unm_err_out;
1310 }
1311 if (a->flags & ATTR_IS_SPARSE)
1312 NInoSetSparse(ni);
1313 }
1314 if (a->flags & ATTR_IS_ENCRYPTED) {
1315 if (NInoCompressed(ni)) {
1316 ntfs_error(vi->i_sb, "Found encrypted and compressed "
1317 "data.");
1318 goto unm_err_out;
1319 }
1320
1321
1322
1323
1324 if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1325 ntfs_error(vi->i_sb, "Found mst protected attribute "
1326 "but the attribute is encrypted. "
1327 "Please report you saw this message "
1328 "to linux-ntfs-dev@lists.sourceforge."
1329 "net");
1330 goto unm_err_out;
1331 }
1332 if (ni->type != AT_DATA) {
1333 ntfs_error(vi->i_sb, "Found encrypted non-data "
1334 "attribute.");
1335 goto unm_err_out;
1336 }
1337 NInoSetEncrypted(ni);
1338 }
1339 if (!a->non_resident) {
1340
1341 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1342 le16_to_cpu(a->data.resident.value_offset)))) {
1343 ntfs_error(vol->sb, "Attribute name is placed after "
1344 "the attribute value.");
1345 goto unm_err_out;
1346 }
1347 if (NInoMstProtected(ni)) {
1348 ntfs_error(vi->i_sb, "Found mst protected attribute "
1349 "but the attribute is resident. "
1350 "Please report you saw this message to "
1351 "linux-ntfs-dev@lists.sourceforge.net");
1352 goto unm_err_out;
1353 }
1354 vi->i_size = ni->initialized_size = le32_to_cpu(
1355 a->data.resident.value_length);
1356 ni->allocated_size = le32_to_cpu(a->length) -
1357 le16_to_cpu(a->data.resident.value_offset);
1358 if (vi->i_size > ni->allocated_size) {
1359 ntfs_error(vi->i_sb, "Resident attribute is corrupt "
1360 "(size exceeds allocation).");
1361 goto unm_err_out;
1362 }
1363 } else {
1364 NInoSetNonResident(ni);
1365
1366
1367
1368
1369 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1370 le16_to_cpu(
1371 a->data.non_resident.mapping_pairs_offset)))) {
1372 ntfs_error(vol->sb, "Attribute name is placed after "
1373 "the mapping pairs array.");
1374 goto unm_err_out;
1375 }
1376 if (NInoCompressed(ni) || NInoSparse(ni)) {
1377 if (NInoCompressed(ni) && a->data.non_resident.
1378 compression_unit != 4) {
1379 ntfs_error(vi->i_sb, "Found non-standard "
1380 "compression unit (%u instead "
1381 "of 4). Cannot handle this.",
1382 a->data.non_resident.
1383 compression_unit);
1384 err = -EOPNOTSUPP;
1385 goto unm_err_out;
1386 }
1387 if (a->data.non_resident.compression_unit) {
1388 ni->itype.compressed.block_size = 1U <<
1389 (a->data.non_resident.
1390 compression_unit +
1391 vol->cluster_size_bits);
1392 ni->itype.compressed.block_size_bits =
1393 ffs(ni->itype.compressed.
1394 block_size) - 1;
1395 ni->itype.compressed.block_clusters = 1U <<
1396 a->data.non_resident.
1397 compression_unit;
1398 } else {
1399 ni->itype.compressed.block_size = 0;
1400 ni->itype.compressed.block_size_bits = 0;
1401 ni->itype.compressed.block_clusters = 0;
1402 }
1403 ni->itype.compressed.size = sle64_to_cpu(
1404 a->data.non_resident.compressed_size);
1405 }
1406 if (a->data.non_resident.lowest_vcn) {
1407 ntfs_error(vi->i_sb, "First extent of attribute has "
1408 "non-zero lowest_vcn.");
1409 goto unm_err_out;
1410 }
1411 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1412 ni->initialized_size = sle64_to_cpu(
1413 a->data.non_resident.initialized_size);
1414 ni->allocated_size = sle64_to_cpu(
1415 a->data.non_resident.allocated_size);
1416 }
1417 if (NInoMstProtected(ni))
1418 vi->i_mapping->a_ops = &ntfs_mst_aops;
1419 else
1420 vi->i_mapping->a_ops = &ntfs_aops;
1421 if ((NInoCompressed(ni) || NInoSparse(ni)) && ni->type != AT_INDEX_ROOT)
1422 vi->i_blocks = ni->itype.compressed.size >> 9;
1423 else
1424 vi->i_blocks = ni->allocated_size >> 9;
1425
1426
1427
1428
1429 igrab(base_vi);
1430 ni->ext.base_ntfs_ino = base_ni;
1431 ni->nr_extents = -1;
1432
1433 ntfs_attr_put_search_ctx(ctx);
1434 unmap_mft_record(base_ni);
1435
1436 ntfs_debug("Done.");
1437 return 0;
1438
1439unm_err_out:
1440 if (!err)
1441 err = -EIO;
1442 if (ctx)
1443 ntfs_attr_put_search_ctx(ctx);
1444 unmap_mft_record(base_ni);
1445err_out:
1446 ntfs_error(vol->sb, "Failed with error code %i while reading attribute "
1447 "inode (mft_no 0x%lx, type 0x%x, name_len %i). "
1448 "Marking corrupt inode and base inode 0x%lx as bad. "
1449 "Run chkdsk.", err, vi->i_ino, ni->type, ni->name_len,
1450 base_vi->i_ino);
1451 make_bad_inode(vi);
1452 if (err != -ENOMEM)
1453 NVolSetErrors(vol);
1454 return err;
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
1489
1490static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi)
1491{
1492 loff_t bvi_size;
1493 ntfs_volume *vol = NTFS_SB(vi->i_sb);
1494 ntfs_inode *ni, *base_ni, *bni;
1495 struct inode *bvi;
1496 MFT_RECORD *m;
1497 ATTR_RECORD *a;
1498 ntfs_attr_search_ctx *ctx;
1499 INDEX_ROOT *ir;
1500 u8 *ir_end, *index_end;
1501 int err = 0;
1502
1503 ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1504 ntfs_init_big_inode(vi);
1505 ni = NTFS_I(vi);
1506 base_ni = NTFS_I(base_vi);
1507
1508 vi->i_version = base_vi->i_version;
1509 vi->i_uid = base_vi->i_uid;
1510 vi->i_gid = base_vi->i_gid;
1511 set_nlink(vi, base_vi->i_nlink);
1512 vi->i_mtime = base_vi->i_mtime;
1513 vi->i_ctime = base_vi->i_ctime;
1514 vi->i_atime = base_vi->i_atime;
1515 vi->i_generation = ni->seq_no = base_ni->seq_no;
1516
1517 vi->i_mode = base_vi->i_mode & ~S_IFMT;
1518
1519 m = map_mft_record(base_ni);
1520 if (IS_ERR(m)) {
1521 err = PTR_ERR(m);
1522 goto err_out;
1523 }
1524 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1525 if (!ctx) {
1526 err = -ENOMEM;
1527 goto unm_err_out;
1528 }
1529
1530 err = ntfs_attr_lookup(AT_INDEX_ROOT, ni->name, ni->name_len,
1531 CASE_SENSITIVE, 0, NULL, 0, ctx);
1532 if (unlikely(err)) {
1533 if (err == -ENOENT)
1534 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is "
1535 "missing.");
1536 goto unm_err_out;
1537 }
1538 a = ctx->attr;
1539
1540 if (unlikely(a->non_resident)) {
1541 ntfs_error(vol->sb, "$INDEX_ROOT attribute is not resident.");
1542 goto unm_err_out;
1543 }
1544
1545 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1546 le16_to_cpu(a->data.resident.value_offset)))) {
1547 ntfs_error(vol->sb, "$INDEX_ROOT attribute name is placed "
1548 "after the attribute value.");
1549 goto unm_err_out;
1550 }
1551
1552
1553
1554
1555 if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_ENCRYPTED |
1556 ATTR_IS_SPARSE)) {
1557 ntfs_error(vi->i_sb, "Found compressed/encrypted/sparse index "
1558 "root attribute.");
1559 goto unm_err_out;
1560 }
1561 ir = (INDEX_ROOT*)((u8*)a + le16_to_cpu(a->data.resident.value_offset));
1562 ir_end = (u8*)ir + le32_to_cpu(a->data.resident.value_length);
1563 if (ir_end > (u8*)ctx->mrec + vol->mft_record_size) {
1564 ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is corrupt.");
1565 goto unm_err_out;
1566 }
1567 index_end = (u8*)&ir->index + le32_to_cpu(ir->index.index_length);
1568 if (index_end > ir_end) {
1569 ntfs_error(vi->i_sb, "Index is corrupt.");
1570 goto unm_err_out;
1571 }
1572 if (ir->type) {
1573 ntfs_error(vi->i_sb, "Index type is not 0 (type is 0x%x).",
1574 le32_to_cpu(ir->type));
1575 goto unm_err_out;
1576 }
1577 ni->itype.index.collation_rule = ir->collation_rule;
1578 ntfs_debug("Index collation rule is 0x%x.",
1579 le32_to_cpu(ir->collation_rule));
1580 ni->itype.index.block_size = le32_to_cpu(ir->index_block_size);
1581 if (!is_power_of_2(ni->itype.index.block_size)) {
1582 ntfs_error(vi->i_sb, "Index block size (%u) is not a power of "
1583 "two.", ni->itype.index.block_size);
1584 goto unm_err_out;
1585 }
1586 if (ni->itype.index.block_size > PAGE_CACHE_SIZE) {
1587 ntfs_error(vi->i_sb, "Index block size (%u) > PAGE_CACHE_SIZE "
1588 "(%ld) is not supported. Sorry.",
1589 ni->itype.index.block_size, PAGE_CACHE_SIZE);
1590 err = -EOPNOTSUPP;
1591 goto unm_err_out;
1592 }
1593 if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) {
1594 ntfs_error(vi->i_sb, "Index block size (%u) < NTFS_BLOCK_SIZE "
1595 "(%i) is not supported. Sorry.",
1596 ni->itype.index.block_size, NTFS_BLOCK_SIZE);
1597 err = -EOPNOTSUPP;
1598 goto unm_err_out;
1599 }
1600 ni->itype.index.block_size_bits = ffs(ni->itype.index.block_size) - 1;
1601
1602 if (vol->cluster_size <= ni->itype.index.block_size) {
1603 ni->itype.index.vcn_size = vol->cluster_size;
1604 ni->itype.index.vcn_size_bits = vol->cluster_size_bits;
1605 } else {
1606 ni->itype.index.vcn_size = vol->sector_size;
1607 ni->itype.index.vcn_size_bits = vol->sector_size_bits;
1608 }
1609
1610 if (!(ir->index.flags & LARGE_INDEX)) {
1611
1612 vi->i_size = ni->initialized_size = ni->allocated_size = 0;
1613
1614 ntfs_attr_put_search_ctx(ctx);
1615 unmap_mft_record(base_ni);
1616 m = NULL;
1617 ctx = NULL;
1618 goto skip_large_index_stuff;
1619 }
1620 NInoSetIndexAllocPresent(ni);
1621
1622 ntfs_attr_reinit_search_ctx(ctx);
1623 err = ntfs_attr_lookup(AT_INDEX_ALLOCATION, ni->name, ni->name_len,
1624 CASE_SENSITIVE, 0, NULL, 0, ctx);
1625 if (unlikely(err)) {
1626 if (err == -ENOENT)
1627 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1628 "not present but $INDEX_ROOT "
1629 "indicated it is.");
1630 else
1631 ntfs_error(vi->i_sb, "Failed to lookup "
1632 "$INDEX_ALLOCATION attribute.");
1633 goto unm_err_out;
1634 }
1635 a = ctx->attr;
1636 if (!a->non_resident) {
1637 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1638 "resident.");
1639 goto unm_err_out;
1640 }
1641
1642
1643
1644 if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1645 le16_to_cpu(
1646 a->data.non_resident.mapping_pairs_offset)))) {
1647 ntfs_error(vol->sb, "$INDEX_ALLOCATION attribute name is "
1648 "placed after the mapping pairs array.");
1649 goto unm_err_out;
1650 }
1651 if (a->flags & ATTR_IS_ENCRYPTED) {
1652 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1653 "encrypted.");
1654 goto unm_err_out;
1655 }
1656 if (a->flags & ATTR_IS_SPARSE) {
1657 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is sparse.");
1658 goto unm_err_out;
1659 }
1660 if (a->flags & ATTR_COMPRESSION_MASK) {
1661 ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1662 "compressed.");
1663 goto unm_err_out;
1664 }
1665 if (a->data.non_resident.lowest_vcn) {
1666 ntfs_error(vi->i_sb, "First extent of $INDEX_ALLOCATION "
1667 "attribute has non zero lowest_vcn.");
1668 goto unm_err_out;
1669 }
1670 vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1671 ni->initialized_size = sle64_to_cpu(
1672 a->data.non_resident.initialized_size);
1673 ni->allocated_size = sle64_to_cpu(a->data.non_resident.allocated_size);
1674
1675
1676
1677
1678 ntfs_attr_put_search_ctx(ctx);
1679 unmap_mft_record(base_ni);
1680 m = NULL;
1681 ctx = NULL;
1682
1683 bvi = ntfs_attr_iget(base_vi, AT_BITMAP, ni->name, ni->name_len);
1684 if (IS_ERR(bvi)) {
1685 ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
1686 err = PTR_ERR(bvi);
1687 goto unm_err_out;
1688 }
1689 bni = NTFS_I(bvi);
1690 if (NInoCompressed(bni) || NInoEncrypted(bni) ||
1691 NInoSparse(bni)) {
1692 ntfs_error(vi->i_sb, "$BITMAP attribute is compressed and/or "
1693 "encrypted and/or sparse.");
1694 goto iput_unm_err_out;
1695 }
1696
1697 bvi_size = i_size_read(bvi);
1698 if ((bvi_size << 3) < (vi->i_size >> ni->itype.index.block_size_bits)) {
1699 ntfs_error(vi->i_sb, "Index bitmap too small (0x%llx) for "
1700 "index allocation (0x%llx).", bvi_size << 3,
1701 vi->i_size);
1702 goto iput_unm_err_out;
1703 }
1704 iput(bvi);
1705skip_large_index_stuff:
1706
1707 vi->i_op = NULL;
1708 vi->i_fop = NULL;
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 = dentry->d_inode;
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