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