Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
inode.c
Go to the documentation of this file.
1 
22 #include <linux/buffer_head.h>
23 #include <linux/fs.h>
24 #include <linux/mm.h>
25 #include <linux/mount.h>
26 #include <linux/mutex.h>
27 #include <linux/pagemap.h>
28 #include <linux/quotaops.h>
29 #include <linux/slab.h>
30 #include <linux/log2.h>
31 
32 #include "aops.h"
33 #include "attrib.h"
34 #include "bitmap.h"
35 #include "dir.h"
36 #include "debug.h"
37 #include "inode.h"
38 #include "lcnalloc.h"
39 #include "malloc.h"
40 #include "mft.h"
41 #include "time.h"
42 #include "ntfs.h"
43 
60 int ntfs_test_inode(struct inode *vi, ntfs_attr *na)
61 {
62  ntfs_inode *ni;
63 
64  if (vi->i_ino != na->mft_no)
65  return 0;
66  ni = NTFS_I(vi);
67  /* If !NInoAttr(ni), @vi is a normal file or directory inode. */
68  if (likely(!NInoAttr(ni))) {
69  /* If not looking for a normal inode this is a mismatch. */
70  if (unlikely(na->type != AT_UNUSED))
71  return 0;
72  } else {
73  /* A fake inode describing an attribute. */
74  if (ni->type != na->type)
75  return 0;
76  if (ni->name_len != na->name_len)
77  return 0;
78  if (na->name_len && memcmp(ni->name, na->name,
79  na->name_len * sizeof(ntfschar)))
80  return 0;
81  }
82  /* Match! */
83  return 1;
84 }
85 
104 static int ntfs_init_locked_inode(struct inode *vi, ntfs_attr *na)
105 {
106  ntfs_inode *ni = NTFS_I(vi);
107 
108  vi->i_ino = na->mft_no;
109 
110  ni->type = na->type;
111  if (na->type == AT_INDEX_ALLOCATION)
112  NInoSetMstProtected(ni);
113 
114  ni->name = na->name;
115  ni->name_len = na->name_len;
116 
117  /* If initializing a normal inode, we are done. */
118  if (likely(na->type == AT_UNUSED)) {
119  BUG_ON(na->name);
120  BUG_ON(na->name_len);
121  return 0;
122  }
123 
124  /* It is a fake inode. */
125  NInoSetAttr(ni);
126 
127  /*
128  * We have I30 global constant as an optimization as it is the name
129  * in >99.9% of named attributes! The other <0.1% incur a GFP_ATOMIC
130  * allocation but that is ok. And most attributes are unnamed anyway,
131  * thus the fraction of named attributes with name != I30 is actually
132  * absolutely tiny.
133  */
134  if (na->name_len && na->name != I30) {
135  unsigned int i;
136 
137  BUG_ON(!na->name);
138  i = na->name_len * sizeof(ntfschar);
139  ni->name = kmalloc(i + sizeof(ntfschar), GFP_ATOMIC);
140  if (!ni->name)
141  return -ENOMEM;
142  memcpy(ni->name, na->name, i);
143  ni->name[na->name_len] = 0;
144  }
145  return 0;
146 }
147 
148 typedef int (*set_t)(struct inode *, void *);
149 static int ntfs_read_locked_inode(struct inode *vi);
150 static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi);
151 static int ntfs_read_locked_index_inode(struct inode *base_vi,
152  struct inode *vi);
153 
170 struct inode *ntfs_iget(struct super_block *sb, unsigned long mft_no)
171 {
172  struct inode *vi;
173  int err;
174  ntfs_attr na;
175 
176  na.mft_no = mft_no;
177  na.type = AT_UNUSED;
178  na.name = NULL;
179  na.name_len = 0;
180 
181  vi = iget5_locked(sb, mft_no, (test_t)ntfs_test_inode,
182  (set_t)ntfs_init_locked_inode, &na);
183  if (unlikely(!vi))
184  return ERR_PTR(-ENOMEM);
185 
186  err = 0;
187 
188  /* If this is a freshly allocated inode, need to read it now. */
189  if (vi->i_state & I_NEW) {
190  err = ntfs_read_locked_inode(vi);
191  unlock_new_inode(vi);
192  }
193  /*
194  * There is no point in keeping bad inodes around if the failure was
195  * due to ENOMEM. We want to be able to retry again later.
196  */
197  if (unlikely(err == -ENOMEM)) {
198  iput(vi);
199  vi = ERR_PTR(err);
200  }
201  return vi;
202 }
203 
227 struct inode *ntfs_attr_iget(struct inode *base_vi, ATTR_TYPE type,
229 {
230  struct inode *vi;
231  int err;
232  ntfs_attr na;
233 
234  /* Make sure no one calls ntfs_attr_iget() for indices. */
235  BUG_ON(type == AT_INDEX_ALLOCATION);
236 
237  na.mft_no = base_vi->i_ino;
238  na.type = type;
239  na.name = name;
240  na.name_len = name_len;
241 
242  vi = iget5_locked(base_vi->i_sb, na.mft_no, (test_t)ntfs_test_inode,
243  (set_t)ntfs_init_locked_inode, &na);
244  if (unlikely(!vi))
245  return ERR_PTR(-ENOMEM);
246 
247  err = 0;
248 
249  /* If this is a freshly allocated inode, need to read it now. */
250  if (vi->i_state & I_NEW) {
251  err = ntfs_read_locked_attr_inode(base_vi, vi);
252  unlock_new_inode(vi);
253  }
254  /*
255  * There is no point in keeping bad attribute inodes around. This also
256  * simplifies things in that we never need to check for bad attribute
257  * inodes elsewhere.
258  */
259  if (unlikely(err)) {
260  iput(vi);
261  vi = ERR_PTR(err);
262  }
263  return vi;
264 }
265 
285 struct inode *ntfs_index_iget(struct inode *base_vi, ntfschar *name,
286  u32 name_len)
287 {
288  struct inode *vi;
289  int err;
290  ntfs_attr na;
291 
292  na.mft_no = base_vi->i_ino;
294  na.name = name;
295  na.name_len = name_len;
296 
297  vi = iget5_locked(base_vi->i_sb, na.mft_no, (test_t)ntfs_test_inode,
298  (set_t)ntfs_init_locked_inode, &na);
299  if (unlikely(!vi))
300  return ERR_PTR(-ENOMEM);
301 
302  err = 0;
303 
304  /* If this is a freshly allocated inode, need to read it now. */
305  if (vi->i_state & I_NEW) {
306  err = ntfs_read_locked_index_inode(base_vi, vi);
307  unlock_new_inode(vi);
308  }
309  /*
310  * There is no point in keeping bad index inodes around. This also
311  * simplifies things in that we never need to check for bad index
312  * inodes elsewhere.
313  */
314  if (unlikely(err)) {
315  iput(vi);
316  vi = ERR_PTR(err);
317  }
318  return vi;
319 }
320 
322 {
323  ntfs_inode *ni;
324 
325  ntfs_debug("Entering.");
327  if (likely(ni != NULL)) {
328  ni->state = 0;
329  return VFS_I(ni);
330  }
331  ntfs_error(sb, "Allocation of NTFS big inode structure failed.");
332  return NULL;
333 }
334 
335 static void ntfs_i_callback(struct rcu_head *head)
336 {
337  struct inode *inode = container_of(head, struct inode, i_rcu);
338  kmem_cache_free(ntfs_big_inode_cache, NTFS_I(inode));
339 }
340 
341 void ntfs_destroy_big_inode(struct inode *inode)
342 {
343  ntfs_inode *ni = NTFS_I(inode);
344 
345  ntfs_debug("Entering.");
346  BUG_ON(ni->page);
347  if (!atomic_dec_and_test(&ni->count))
348  BUG();
349  call_rcu(&inode->i_rcu, ntfs_i_callback);
350 }
351 
352 static inline ntfs_inode *ntfs_alloc_extent_inode(void)
353 {
354  ntfs_inode *ni;
355 
356  ntfs_debug("Entering.");
358  if (likely(ni != NULL)) {
359  ni->state = 0;
360  return ni;
361  }
362  ntfs_error(NULL, "Allocation of NTFS inode structure failed.");
363  return NULL;
364 }
365 
366 static void ntfs_destroy_extent_inode(ntfs_inode *ni)
367 {
368  ntfs_debug("Entering.");
369  BUG_ON(ni->page);
370  if (!atomic_dec_and_test(&ni->count))
371  BUG();
373 }
374 
375 /*
376  * The attribute runlist lock has separate locking rules from the
377  * normal runlist lock, so split the two lock-classes:
378  */
379 static struct lock_class_key attr_list_rl_lock_class;
380 
394 {
395  ntfs_debug("Entering.");
396  rwlock_init(&ni->size_lock);
397  ni->initialized_size = ni->allocated_size = 0;
398  ni->seq_no = 0;
399  atomic_set(&ni->count, 1);
400  ni->vol = NTFS_SB(sb);
401  ntfs_init_runlist(&ni->runlist);
402  mutex_init(&ni->mrec_lock);
403  ni->page = NULL;
404  ni->page_ofs = 0;
405  ni->attr_list_size = 0;
406  ni->attr_list = NULL;
407  ntfs_init_runlist(&ni->attr_list_rl);
409  &attr_list_rl_lock_class);
410  ni->itype.index.block_size = 0;
411  ni->itype.index.vcn_size = 0;
412  ni->itype.index.collation_rule = 0;
413  ni->itype.index.block_size_bits = 0;
414  ni->itype.index.vcn_size_bits = 0;
415  mutex_init(&ni->extent_lock);
416  ni->nr_extents = 0;
417  ni->ext.base_ntfs_ino = NULL;
418 }
419 
420 /*
421  * Extent inodes get MFT-mapped in a nested way, while the base inode
422  * is still mapped. Teach this nesting to the lock validator by creating
423  * a separate class for nested inode's mrec_lock's:
424  */
425 static struct lock_class_key extent_inode_mrec_lock_key;
426 
428  unsigned long mft_no)
429 {
430  ntfs_inode *ni = ntfs_alloc_extent_inode();
431 
432  ntfs_debug("Entering.");
433  if (likely(ni != NULL)) {
434  __ntfs_init_inode(sb, ni);
435  lockdep_set_class(&ni->mrec_lock, &extent_inode_mrec_lock_key);
436  ni->mft_no = mft_no;
437  ni->type = AT_UNUSED;
438  ni->name = NULL;
439  ni->name_len = 0;
440  }
441  return ni;
442 }
443 
457 static int ntfs_is_extended_system_file(ntfs_attr_search_ctx *ctx)
458 {
459  int nr_links, err;
460 
461  /* Restart search. */
463 
464  /* Get number of hard links. */
465  nr_links = le16_to_cpu(ctx->mrec->link_count);
466 
467  /* Loop through all hard links. */
468  while (!(err = ntfs_attr_lookup(AT_FILE_NAME, NULL, 0, 0, 0, NULL, 0,
469  ctx))) {
470  FILE_NAME_ATTR *file_name_attr;
471  ATTR_RECORD *attr = ctx->attr;
472  u8 *p, *p2;
473 
474  nr_links--;
475  /*
476  * Maximum sanity checking as we are called on an inode that
477  * we suspect might be corrupt.
478  */
479  p = (u8*)attr + le32_to_cpu(attr->length);
480  if (p < (u8*)ctx->mrec || (u8*)p > (u8*)ctx->mrec +
481  le32_to_cpu(ctx->mrec->bytes_in_use)) {
482 err_corrupt_attr:
483  ntfs_error(ctx->ntfs_ino->vol->sb, "Corrupt file name "
484  "attribute. You should run chkdsk.");
485  return -EIO;
486  }
487  if (attr->non_resident) {
488  ntfs_error(ctx->ntfs_ino->vol->sb, "Non-resident file "
489  "name. You should run chkdsk.");
490  return -EIO;
491  }
492  if (attr->flags) {
493  ntfs_error(ctx->ntfs_ino->vol->sb, "File name with "
494  "invalid flags. You should run "
495  "chkdsk.");
496  return -EIO;
497  }
498  if (!(attr->data.resident.flags & RESIDENT_ATTR_IS_INDEXED)) {
499  ntfs_error(ctx->ntfs_ino->vol->sb, "Unindexed file "
500  "name. You should run chkdsk.");
501  return -EIO;
502  }
503  file_name_attr = (FILE_NAME_ATTR*)((u8*)attr +
504  le16_to_cpu(attr->data.resident.value_offset));
505  p2 = (u8*)attr + le32_to_cpu(attr->data.resident.value_length);
506  if (p2 < (u8*)attr || p2 > p)
507  goto err_corrupt_attr;
508  /* This attribute is ok, but is it in the $Extend directory? */
509  if (MREF_LE(file_name_attr->parent_directory) == FILE_Extend)
510  return 1; /* YES, it's an extended system file. */
511  }
512  if (unlikely(err != -ENOENT))
513  return err;
514  if (unlikely(nr_links)) {
515  ntfs_error(ctx->ntfs_ino->vol->sb, "Inode hard link count "
516  "doesn't match number of name attributes. You "
517  "should run chkdsk.");
518  return -EIO;
519  }
520  return 0; /* NO, it is not an extended system file. */
521 }
522 
549 static int ntfs_read_locked_inode(struct inode *vi)
550 {
551  ntfs_volume *vol = NTFS_SB(vi->i_sb);
552  ntfs_inode *ni;
553  struct inode *bvi;
554  MFT_RECORD *m;
555  ATTR_RECORD *a;
556  STANDARD_INFORMATION *si;
558  int err = 0;
559 
560  ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
561 
562  /* Setup the generic vfs inode parts now. */
563 
564  /*
565  * This is for checking whether an inode has changed w.r.t. a file so
566  * that the file can be updated if necessary (compare with f_version).
567  */
568  vi->i_version = 1;
569 
570  vi->i_uid = vol->uid;
571  vi->i_gid = vol->gid;
572  vi->i_mode = 0;
573 
574  /*
575  * Initialize the ntfs specific part of @vi special casing
576  * FILE_MFT which we need to do at mount time.
577  */
578  if (vi->i_ino != FILE_MFT)
579  ntfs_init_big_inode(vi);
580  ni = NTFS_I(vi);
581 
582  m = map_mft_record(ni);
583  if (IS_ERR(m)) {
584  err = PTR_ERR(m);
585  goto err_out;
586  }
587  ctx = ntfs_attr_get_search_ctx(ni, m);
588  if (!ctx) {
589  err = -ENOMEM;
590  goto unm_err_out;
591  }
592 
593  if (!(m->flags & MFT_RECORD_IN_USE)) {
594  ntfs_error(vi->i_sb, "Inode is not in use!");
595  goto unm_err_out;
596  }
597  if (m->base_mft_record) {
598  ntfs_error(vi->i_sb, "Inode is an extent inode!");
599  goto unm_err_out;
600  }
601 
602  /* Transfer information from mft record into vfs and ntfs inodes. */
603  vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number);
604 
605  /*
606  * FIXME: Keep in mind that link_count is two for files which have both
607  * a long file name and a short file name as separate entries, so if
608  * we are hiding short file names this will be too high. Either we need
609  * to account for the short file names by subtracting them or we need
610  * to make sure we delete files even though i_nlink is not zero which
611  * might be tricky due to vfs interactions. Need to think about this
612  * some more when implementing the unlink command.
613  */
614  set_nlink(vi, le16_to_cpu(m->link_count));
615  /*
616  * FIXME: Reparse points can have the directory bit set even though
617  * they would be S_IFLNK. Need to deal with this further below when we
618  * implement reparse points / symbolic links but it will do for now.
619  * Also if not a directory, it could be something else, rather than
620  * a regular file. But again, will do for now.
621  */
622  /* Everyone gets all permissions. */
623  vi->i_mode |= S_IRWXUGO;
624  /* If read-only, no one gets write permissions. */
625  if (IS_RDONLY(vi))
626  vi->i_mode &= ~S_IWUGO;
627  if (m->flags & MFT_RECORD_IS_DIRECTORY) {
628  vi->i_mode |= S_IFDIR;
629  /*
630  * Apply the directory permissions mask set in the mount
631  * options.
632  */
633  vi->i_mode &= ~vol->dmask;
634  /* Things break without this kludge! */
635  if (vi->i_nlink > 1)
636  set_nlink(vi, 1);
637  } else {
638  vi->i_mode |= S_IFREG;
639  /* Apply the file permissions mask set in the mount options. */
640  vi->i_mode &= ~vol->fmask;
641  }
642  /*
643  * Find the standard information attribute in the mft record. At this
644  * stage we haven't setup the attribute list stuff yet, so this could
645  * in fact fail if the standard information is in an extent record, but
646  * I don't think this actually ever happens.
647  */
649  ctx);
650  if (unlikely(err)) {
651  if (err == -ENOENT) {
652  /*
653  * TODO: We should be performing a hot fix here (if the
654  * recover mount option is set) by creating a new
655  * attribute.
656  */
657  ntfs_error(vi->i_sb, "$STANDARD_INFORMATION attribute "
658  "is missing.");
659  }
660  goto unm_err_out;
661  }
662  a = ctx->attr;
663  /* Get the standard information attribute value. */
664  si = (STANDARD_INFORMATION*)((u8*)a +
665  le16_to_cpu(a->data.resident.value_offset));
666 
667  /* Transfer information from the standard information into vi. */
668  /*
669  * Note: The i_?times do not quite map perfectly onto the NTFS times,
670  * but they are close enough, and in the end it doesn't really matter
671  * that much...
672  */
673  /*
674  * mtime is the last change of the data within the file. Not changed
675  * when only metadata is changed, e.g. a rename doesn't affect mtime.
676  */
677  vi->i_mtime = ntfs2utc(si->last_data_change_time);
678  /*
679  * ctime is the last change of the metadata of the file. This obviously
680  * always changes, when mtime is changed. ctime can be changed on its
681  * own, mtime is then not changed, e.g. when a file is renamed.
682  */
683  vi->i_ctime = ntfs2utc(si->last_mft_change_time);
684  /*
685  * Last access to the data within the file. Not changed during a rename
686  * for example but changed whenever the file is written to.
687  */
688  vi->i_atime = ntfs2utc(si->last_access_time);
689 
690  /* Find the attribute list attribute if present. */
692  err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx);
693  if (err) {
694  if (unlikely(err != -ENOENT)) {
695  ntfs_error(vi->i_sb, "Failed to lookup attribute list "
696  "attribute.");
697  goto unm_err_out;
698  }
699  } else /* if (!err) */ {
700  if (vi->i_ino == FILE_MFT)
701  goto skip_attr_list_load;
702  ntfs_debug("Attribute list found in inode 0x%lx.", vi->i_ino);
703  NInoSetAttrList(ni);
704  a = ctx->attr;
705  if (a->flags & ATTR_COMPRESSION_MASK) {
706  ntfs_error(vi->i_sb, "Attribute list attribute is "
707  "compressed.");
708  goto unm_err_out;
709  }
710  if (a->flags & ATTR_IS_ENCRYPTED ||
711  a->flags & ATTR_IS_SPARSE) {
712  if (a->non_resident) {
713  ntfs_error(vi->i_sb, "Non-resident attribute "
714  "list attribute is encrypted/"
715  "sparse.");
716  goto unm_err_out;
717  }
718  ntfs_warning(vi->i_sb, "Resident attribute list "
719  "attribute in inode 0x%lx is marked "
720  "encrypted/sparse which is not true. "
721  "However, Windows allows this and "
722  "chkdsk does not detect or correct it "
723  "so we will just ignore the invalid "
724  "flags and pretend they are not set.",
725  vi->i_ino);
726  }
727  /* Now allocate memory for the attribute list. */
728  ni->attr_list_size = (u32)ntfs_attr_size(a);
729  ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size);
730  if (!ni->attr_list) {
731  ntfs_error(vi->i_sb, "Not enough memory to allocate "
732  "buffer for attribute list.");
733  err = -ENOMEM;
734  goto unm_err_out;
735  }
736  if (a->non_resident) {
737  NInoSetAttrListNonResident(ni);
738  if (a->data.non_resident.lowest_vcn) {
739  ntfs_error(vi->i_sb, "Attribute list has non "
740  "zero lowest_vcn.");
741  goto unm_err_out;
742  }
743  /*
744  * Setup the runlist. No need for locking as we have
745  * exclusive access to the inode at this time.
746  */
748  a, NULL);
749  if (IS_ERR(ni->attr_list_rl.rl)) {
750  err = PTR_ERR(ni->attr_list_rl.rl);
751  ni->attr_list_rl.rl = NULL;
752  ntfs_error(vi->i_sb, "Mapping pairs "
753  "decompression failed.");
754  goto unm_err_out;
755  }
756  /* Now load the attribute list. */
757  if ((err = load_attribute_list(vol, &ni->attr_list_rl,
758  ni->attr_list, ni->attr_list_size,
759  sle64_to_cpu(a->data.non_resident.
760  initialized_size)))) {
761  ntfs_error(vi->i_sb, "Failed to load "
762  "attribute list attribute.");
763  goto unm_err_out;
764  }
765  } else /* if (!a->non_resident) */ {
766  if ((u8*)a + le16_to_cpu(a->data.resident.value_offset)
767  + le32_to_cpu(
768  a->data.resident.value_length) >
769  (u8*)ctx->mrec + vol->mft_record_size) {
770  ntfs_error(vi->i_sb, "Corrupt attribute list "
771  "in inode.");
772  goto unm_err_out;
773  }
774  /* Now copy the attribute list. */
775  memcpy(ni->attr_list, (u8*)a + le16_to_cpu(
776  a->data.resident.value_offset),
777  le32_to_cpu(
778  a->data.resident.value_length));
779  }
780  }
781 skip_attr_list_load:
782  /*
783  * If an attribute list is present we now have the attribute list value
784  * in ntfs_ino->attr_list and it is ntfs_ino->attr_list_size bytes.
785  */
786  if (S_ISDIR(vi->i_mode)) {
787  loff_t bvi_size;
788  ntfs_inode *bni;
789  INDEX_ROOT *ir;
790  u8 *ir_end, *index_end;
791 
792  /* It is a directory, find index root attribute. */
795  0, NULL, 0, ctx);
796  if (unlikely(err)) {
797  if (err == -ENOENT) {
798  // FIXME: File is corrupt! Hot-fix with empty
799  // index root attribute if recovery option is
800  // set.
801  ntfs_error(vi->i_sb, "$INDEX_ROOT attribute "
802  "is missing.");
803  }
804  goto unm_err_out;
805  }
806  a = ctx->attr;
807  /* Set up the state. */
808  if (unlikely(a->non_resident)) {
809  ntfs_error(vol->sb, "$INDEX_ROOT attribute is not "
810  "resident.");
811  goto unm_err_out;
812  }
813  /* Ensure the attribute name is placed before the value. */
814  if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
815  le16_to_cpu(a->data.resident.value_offset)))) {
816  ntfs_error(vol->sb, "$INDEX_ROOT attribute name is "
817  "placed after the attribute value.");
818  goto unm_err_out;
819  }
820  /*
821  * Compressed/encrypted index root just means that the newly
822  * created files in that directory should be created compressed/
823  * encrypted. However index root cannot be both compressed and
824  * encrypted.
825  */
826  if (a->flags & ATTR_COMPRESSION_MASK)
827  NInoSetCompressed(ni);
828  if (a->flags & ATTR_IS_ENCRYPTED) {
829  if (a->flags & ATTR_COMPRESSION_MASK) {
830  ntfs_error(vi->i_sb, "Found encrypted and "
831  "compressed attribute.");
832  goto unm_err_out;
833  }
834  NInoSetEncrypted(ni);
835  }
836  if (a->flags & ATTR_IS_SPARSE)
837  NInoSetSparse(ni);
838  ir = (INDEX_ROOT*)((u8*)a +
839  le16_to_cpu(a->data.resident.value_offset));
840  ir_end = (u8*)ir + le32_to_cpu(a->data.resident.value_length);
841  if (ir_end > (u8*)ctx->mrec + vol->mft_record_size) {
842  ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is "
843  "corrupt.");
844  goto unm_err_out;
845  }
846  index_end = (u8*)&ir->index +
847  le32_to_cpu(ir->index.index_length);
848  if (index_end > ir_end) {
849  ntfs_error(vi->i_sb, "Directory index is corrupt.");
850  goto unm_err_out;
851  }
852  if (ir->type != AT_FILE_NAME) {
853  ntfs_error(vi->i_sb, "Indexed attribute is not "
854  "$FILE_NAME.");
855  goto unm_err_out;
856  }
857  if (ir->collation_rule != COLLATION_FILE_NAME) {
858  ntfs_error(vi->i_sb, "Index collation rule is not "
859  "COLLATION_FILE_NAME.");
860  goto unm_err_out;
861  }
862  ni->itype.index.collation_rule = ir->collation_rule;
863  ni->itype.index.block_size = le32_to_cpu(ir->index_block_size);
864  if (ni->itype.index.block_size &
865  (ni->itype.index.block_size - 1)) {
866  ntfs_error(vi->i_sb, "Index block size (%u) is not a "
867  "power of two.",
868  ni->itype.index.block_size);
869  goto unm_err_out;
870  }
871  if (ni->itype.index.block_size > PAGE_CACHE_SIZE) {
872  ntfs_error(vi->i_sb, "Index block size (%u) > "
873  "PAGE_CACHE_SIZE (%ld) is not "
874  "supported. Sorry.",
875  ni->itype.index.block_size,
877  err = -EOPNOTSUPP;
878  goto unm_err_out;
879  }
880  if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) {
881  ntfs_error(vi->i_sb, "Index block size (%u) < "
882  "NTFS_BLOCK_SIZE (%i) is not "
883  "supported. Sorry.",
884  ni->itype.index.block_size,
886  err = -EOPNOTSUPP;
887  goto unm_err_out;
888  }
889  ni->itype.index.block_size_bits =
890  ffs(ni->itype.index.block_size) - 1;
891  /* Determine the size of a vcn in the directory index. */
892  if (vol->cluster_size <= ni->itype.index.block_size) {
893  ni->itype.index.vcn_size = vol->cluster_size;
894  ni->itype.index.vcn_size_bits = vol->cluster_size_bits;
895  } else {
896  ni->itype.index.vcn_size = vol->sector_size;
897  ni->itype.index.vcn_size_bits = vol->sector_size_bits;
898  }
899 
900  /* Setup the index allocation attribute, even if not present. */
901  NInoSetMstProtected(ni);
903  ni->name = I30;
904  ni->name_len = 4;
905 
906  if (!(ir->index.flags & LARGE_INDEX)) {
907  /* No index allocation. */
908  vi->i_size = ni->initialized_size =
909  ni->allocated_size = 0;
910  /* We are done with the mft record, so we release it. */
912  unmap_mft_record(ni);
913  m = NULL;
914  ctx = NULL;
915  goto skip_large_dir_stuff;
916  } /* LARGE_INDEX: Index allocation present. Setup state. */
917  NInoSetIndexAllocPresent(ni);
918  /* Find index allocation attribute. */
921  CASE_SENSITIVE, 0, NULL, 0, ctx);
922  if (unlikely(err)) {
923  if (err == -ENOENT)
924  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION "
925  "attribute is not present but "
926  "$INDEX_ROOT indicated it is.");
927  else
928  ntfs_error(vi->i_sb, "Failed to lookup "
929  "$INDEX_ALLOCATION "
930  "attribute.");
931  goto unm_err_out;
932  }
933  a = ctx->attr;
934  if (!a->non_resident) {
935  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
936  "is resident.");
937  goto unm_err_out;
938  }
939  /*
940  * Ensure the attribute name is placed before the mapping pairs
941  * array.
942  */
943  if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
944  le16_to_cpu(
945  a->data.non_resident.mapping_pairs_offset)))) {
946  ntfs_error(vol->sb, "$INDEX_ALLOCATION attribute name "
947  "is placed after the mapping pairs "
948  "array.");
949  goto unm_err_out;
950  }
951  if (a->flags & ATTR_IS_ENCRYPTED) {
952  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
953  "is encrypted.");
954  goto unm_err_out;
955  }
956  if (a->flags & ATTR_IS_SPARSE) {
957  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
958  "is sparse.");
959  goto unm_err_out;
960  }
961  if (a->flags & ATTR_COMPRESSION_MASK) {
962  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute "
963  "is compressed.");
964  goto unm_err_out;
965  }
966  if (a->data.non_resident.lowest_vcn) {
967  ntfs_error(vi->i_sb, "First extent of "
968  "$INDEX_ALLOCATION attribute has non "
969  "zero lowest_vcn.");
970  goto unm_err_out;
971  }
972  vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
973  ni->initialized_size = sle64_to_cpu(
974  a->data.non_resident.initialized_size);
975  ni->allocated_size = sle64_to_cpu(
976  a->data.non_resident.allocated_size);
977  /*
978  * We are done with the mft record, so we release it. Otherwise
979  * we would deadlock in ntfs_attr_iget().
980  */
982  unmap_mft_record(ni);
983  m = NULL;
984  ctx = NULL;
985  /* Get the index bitmap attribute inode. */
986  bvi = ntfs_attr_iget(vi, AT_BITMAP, I30, 4);
987  if (IS_ERR(bvi)) {
988  ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
989  err = PTR_ERR(bvi);
990  goto unm_err_out;
991  }
992  bni = NTFS_I(bvi);
993  if (NInoCompressed(bni) || NInoEncrypted(bni) ||
994  NInoSparse(bni)) {
995  ntfs_error(vi->i_sb, "$BITMAP attribute is compressed "
996  "and/or encrypted and/or sparse.");
997  goto iput_unm_err_out;
998  }
999  /* Consistency check bitmap size vs. index allocation size. */
1000  bvi_size = i_size_read(bvi);
1001  if ((bvi_size << 3) < (vi->i_size >>
1002  ni->itype.index.block_size_bits)) {
1003  ntfs_error(vi->i_sb, "Index bitmap too small (0x%llx) "
1004  "for index allocation (0x%llx).",
1005  bvi_size << 3, vi->i_size);
1006  goto iput_unm_err_out;
1007  }
1008  /* No longer need the bitmap attribute inode. */
1009  iput(bvi);
1010 skip_large_dir_stuff:
1011  /* Setup the operations for this inode. */
1012  vi->i_op = &ntfs_dir_inode_ops;
1013  vi->i_fop = &ntfs_dir_ops;
1014  } else {
1015  /* It is a file. */
1017 
1018  /* Setup the data attribute, even if not present. */
1019  ni->type = AT_DATA;
1020  ni->name = NULL;
1021  ni->name_len = 0;
1022 
1023  /* Find first extent of the unnamed data attribute. */
1024  err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, 0, NULL, 0, ctx);
1025  if (unlikely(err)) {
1026  vi->i_size = ni->initialized_size =
1027  ni->allocated_size = 0;
1028  if (err != -ENOENT) {
1029  ntfs_error(vi->i_sb, "Failed to lookup $DATA "
1030  "attribute.");
1031  goto unm_err_out;
1032  }
1033  /*
1034  * FILE_Secure does not have an unnamed $DATA
1035  * attribute, so we special case it here.
1036  */
1037  if (vi->i_ino == FILE_Secure)
1038  goto no_data_attr_special_case;
1039  /*
1040  * Most if not all the system files in the $Extend
1041  * system directory do not have unnamed data
1042  * attributes so we need to check if the parent
1043  * directory of the file is FILE_Extend and if it is
1044  * ignore this error. To do this we need to get the
1045  * name of this inode from the mft record as the name
1046  * contains the back reference to the parent directory.
1047  */
1048  if (ntfs_is_extended_system_file(ctx) > 0)
1049  goto no_data_attr_special_case;
1050  // FIXME: File is corrupt! Hot-fix with empty data
1051  // attribute if recovery option is set.
1052  ntfs_error(vi->i_sb, "$DATA attribute is missing.");
1053  goto unm_err_out;
1054  }
1055  a = ctx->attr;
1056  /* Setup the state. */
1057  if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) {
1058  if (a->flags & ATTR_COMPRESSION_MASK) {
1059  NInoSetCompressed(ni);
1060  if (vol->cluster_size > 4096) {
1061  ntfs_error(vi->i_sb, "Found "
1062  "compressed data but "
1063  "compression is "
1064  "disabled due to "
1065  "cluster size (%i) > "
1066  "4kiB.",
1067  vol->cluster_size);
1068  goto unm_err_out;
1069  }
1070  if ((a->flags & ATTR_COMPRESSION_MASK)
1071  != ATTR_IS_COMPRESSED) {
1072  ntfs_error(vi->i_sb, "Found unknown "
1073  "compression method "
1074  "or corrupt file.");
1075  goto unm_err_out;
1076  }
1077  }
1078  if (a->flags & ATTR_IS_SPARSE)
1079  NInoSetSparse(ni);
1080  }
1081  if (a->flags & ATTR_IS_ENCRYPTED) {
1082  if (NInoCompressed(ni)) {
1083  ntfs_error(vi->i_sb, "Found encrypted and "
1084  "compressed data.");
1085  goto unm_err_out;
1086  }
1087  NInoSetEncrypted(ni);
1088  }
1089  if (a->non_resident) {
1090  NInoSetNonResident(ni);
1091  if (NInoCompressed(ni) || NInoSparse(ni)) {
1092  if (NInoCompressed(ni) && a->data.non_resident.
1093  compression_unit != 4) {
1094  ntfs_error(vi->i_sb, "Found "
1095  "non-standard "
1096  "compression unit (%u "
1097  "instead of 4). "
1098  "Cannot handle this.",
1099  a->data.non_resident.
1101  err = -EOPNOTSUPP;
1102  goto unm_err_out;
1103  }
1104  if (a->data.non_resident.compression_unit) {
1105  ni->itype.compressed.block_size = 1U <<
1106  (a->data.non_resident.
1108  vol->cluster_size_bits);
1109  ni->itype.compressed.block_size_bits =
1110  ffs(ni->itype.
1111  compressed.
1112  block_size) - 1;
1113  ni->itype.compressed.block_clusters =
1114  1U << a->data.
1115  non_resident.
1117  } else {
1118  ni->itype.compressed.block_size = 0;
1119  ni->itype.compressed.block_size_bits =
1120  0;
1121  ni->itype.compressed.block_clusters =
1122  0;
1123  }
1124  ni->itype.compressed.size = sle64_to_cpu(
1125  a->data.non_resident.
1126  compressed_size);
1127  }
1128  if (a->data.non_resident.lowest_vcn) {
1129  ntfs_error(vi->i_sb, "First extent of $DATA "
1130  "attribute has non zero "
1131  "lowest_vcn.");
1132  goto unm_err_out;
1133  }
1134  vi->i_size = sle64_to_cpu(
1135  a->data.non_resident.data_size);
1136  ni->initialized_size = sle64_to_cpu(
1137  a->data.non_resident.initialized_size);
1138  ni->allocated_size = sle64_to_cpu(
1139  a->data.non_resident.allocated_size);
1140  } else { /* Resident attribute. */
1141  vi->i_size = ni->initialized_size = le32_to_cpu(
1142  a->data.resident.value_length);
1143  ni->allocated_size = le32_to_cpu(a->length) -
1144  le16_to_cpu(
1145  a->data.resident.value_offset);
1146  if (vi->i_size > ni->allocated_size) {
1147  ntfs_error(vi->i_sb, "Resident data attribute "
1148  "is corrupt (size exceeds "
1149  "allocation).");
1150  goto unm_err_out;
1151  }
1152  }
1153 no_data_attr_special_case:
1154  /* We are done with the mft record, so we release it. */
1156  unmap_mft_record(ni);
1157  m = NULL;
1158  ctx = NULL;
1159  /* Setup the operations for this inode. */
1160  vi->i_op = &ntfs_file_inode_ops;
1161  vi->i_fop = &ntfs_file_ops;
1162  }
1163  if (NInoMstProtected(ni))
1164  vi->i_mapping->a_ops = &ntfs_mst_aops;
1165  else
1166  vi->i_mapping->a_ops = &ntfs_aops;
1167  /*
1168  * The number of 512-byte blocks used on disk (for stat). This is in so
1169  * far inaccurate as it doesn't account for any named streams or other
1170  * special non-resident attributes, but that is how Windows works, too,
1171  * so we are at least consistent with Windows, if not entirely
1172  * consistent with the Linux Way. Doing it the Linux Way would cause a
1173  * significant slowdown as it would involve iterating over all
1174  * attributes in the mft record and adding the allocated/compressed
1175  * sizes of all non-resident attributes present to give us the Linux
1176  * correct size that should go into i_blocks (after division by 512).
1177  */
1178  if (S_ISREG(vi->i_mode) && (NInoCompressed(ni) || NInoSparse(ni)))
1179  vi->i_blocks = ni->itype.compressed.size >> 9;
1180  else
1181  vi->i_blocks = ni->allocated_size >> 9;
1182  ntfs_debug("Done.");
1183  return 0;
1184 iput_unm_err_out:
1185  iput(bvi);
1186 unm_err_out:
1187  if (!err)
1188  err = -EIO;
1189  if (ctx)
1191  if (m)
1192  unmap_mft_record(ni);
1193 err_out:
1194  ntfs_error(vol->sb, "Failed with error code %i. Marking corrupt "
1195  "inode 0x%lx as bad. Run chkdsk.", err, vi->i_ino);
1196  make_bad_inode(vi);
1197  if (err != -EOPNOTSUPP && err != -ENOMEM)
1198  NVolSetErrors(vol);
1199  return err;
1200 }
1201 
1224 static int ntfs_read_locked_attr_inode(struct inode *base_vi, struct inode *vi)
1225 {
1226  ntfs_volume *vol = NTFS_SB(vi->i_sb);
1227  ntfs_inode *ni, *base_ni;
1228  MFT_RECORD *m;
1229  ATTR_RECORD *a;
1231  int err = 0;
1232 
1233  ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1234 
1235  ntfs_init_big_inode(vi);
1236 
1237  ni = NTFS_I(vi);
1238  base_ni = NTFS_I(base_vi);
1239 
1240  /* Just mirror the values from the base inode. */
1241  vi->i_version = base_vi->i_version;
1242  vi->i_uid = base_vi->i_uid;
1243  vi->i_gid = base_vi->i_gid;
1244  set_nlink(vi, base_vi->i_nlink);
1245  vi->i_mtime = base_vi->i_mtime;
1246  vi->i_ctime = base_vi->i_ctime;
1247  vi->i_atime = base_vi->i_atime;
1248  vi->i_generation = ni->seq_no = base_ni->seq_no;
1249 
1250  /* Set inode type to zero but preserve permissions. */
1251  vi->i_mode = base_vi->i_mode & ~S_IFMT;
1252 
1253  m = map_mft_record(base_ni);
1254  if (IS_ERR(m)) {
1255  err = PTR_ERR(m);
1256  goto err_out;
1257  }
1258  ctx = ntfs_attr_get_search_ctx(base_ni, m);
1259  if (!ctx) {
1260  err = -ENOMEM;
1261  goto unm_err_out;
1262  }
1263  /* Find the attribute. */
1264  err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
1265  CASE_SENSITIVE, 0, NULL, 0, ctx);
1266  if (unlikely(err))
1267  goto unm_err_out;
1268  a = ctx->attr;
1269  if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_SPARSE)) {
1270  if (a->flags & ATTR_COMPRESSION_MASK) {
1271  NInoSetCompressed(ni);
1272  if ((ni->type != AT_DATA) || (ni->type == AT_DATA &&
1273  ni->name_len)) {
1274  ntfs_error(vi->i_sb, "Found compressed "
1275  "non-data or named data "
1276  "attribute. Please report "
1277  "you saw this message to "
1278  "linux-ntfs-dev@lists."
1279  "sourceforge.net");
1280  goto unm_err_out;
1281  }
1282  if (vol->cluster_size > 4096) {
1283  ntfs_error(vi->i_sb, "Found compressed "
1284  "attribute but compression is "
1285  "disabled due to cluster size "
1286  "(%i) > 4kiB.",
1287  vol->cluster_size);
1288  goto unm_err_out;
1289  }
1290  if ((a->flags & ATTR_COMPRESSION_MASK) !=
1292  ntfs_error(vi->i_sb, "Found unknown "
1293  "compression method.");
1294  goto unm_err_out;
1295  }
1296  }
1297  /*
1298  * The compressed/sparse flag set in an index root just means
1299  * to compress all files.
1300  */
1301  if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1302  ntfs_error(vi->i_sb, "Found mst protected attribute "
1303  "but the attribute is %s. Please "
1304  "report you saw this message to "
1306  NInoCompressed(ni) ? "compressed" :
1307  "sparse");
1308  goto unm_err_out;
1309  }
1310  if (a->flags & ATTR_IS_SPARSE)
1311  NInoSetSparse(ni);
1312  }
1313  if (a->flags & ATTR_IS_ENCRYPTED) {
1314  if (NInoCompressed(ni)) {
1315  ntfs_error(vi->i_sb, "Found encrypted and compressed "
1316  "data.");
1317  goto unm_err_out;
1318  }
1319  /*
1320  * The encryption flag set in an index root just means to
1321  * encrypt all files.
1322  */
1323  if (NInoMstProtected(ni) && ni->type != AT_INDEX_ROOT) {
1324  ntfs_error(vi->i_sb, "Found mst protected attribute "
1325  "but the attribute is encrypted. "
1326  "Please report you saw this message "
1327  "to [email protected]."
1328  "net");
1329  goto unm_err_out;
1330  }
1331  if (ni->type != AT_DATA) {
1332  ntfs_error(vi->i_sb, "Found encrypted non-data "
1333  "attribute.");
1334  goto unm_err_out;
1335  }
1336  NInoSetEncrypted(ni);
1337  }
1338  if (!a->non_resident) {
1339  /* Ensure the attribute name is placed before the value. */
1340  if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1341  le16_to_cpu(a->data.resident.value_offset)))) {
1342  ntfs_error(vol->sb, "Attribute name is placed after "
1343  "the attribute value.");
1344  goto unm_err_out;
1345  }
1346  if (NInoMstProtected(ni)) {
1347  ntfs_error(vi->i_sb, "Found mst protected attribute "
1348  "but the attribute is resident. "
1349  "Please report you saw this message to "
1350  "[email protected]");
1351  goto unm_err_out;
1352  }
1353  vi->i_size = ni->initialized_size = le32_to_cpu(
1354  a->data.resident.value_length);
1355  ni->allocated_size = le32_to_cpu(a->length) -
1356  le16_to_cpu(a->data.resident.value_offset);
1357  if (vi->i_size > ni->allocated_size) {
1358  ntfs_error(vi->i_sb, "Resident attribute is corrupt "
1359  "(size exceeds allocation).");
1360  goto unm_err_out;
1361  }
1362  } else {
1363  NInoSetNonResident(ni);
1364  /*
1365  * Ensure the attribute name is placed before the mapping pairs
1366  * array.
1367  */
1368  if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1369  le16_to_cpu(
1370  a->data.non_resident.mapping_pairs_offset)))) {
1371  ntfs_error(vol->sb, "Attribute name is placed after "
1372  "the mapping pairs array.");
1373  goto unm_err_out;
1374  }
1375  if (NInoCompressed(ni) || NInoSparse(ni)) {
1376  if (NInoCompressed(ni) && a->data.non_resident.
1377  compression_unit != 4) {
1378  ntfs_error(vi->i_sb, "Found non-standard "
1379  "compression unit (%u instead "
1380  "of 4). Cannot handle this.",
1381  a->data.non_resident.
1383  err = -EOPNOTSUPP;
1384  goto unm_err_out;
1385  }
1386  if (a->data.non_resident.compression_unit) {
1387  ni->itype.compressed.block_size = 1U <<
1388  (a->data.non_resident.
1390  vol->cluster_size_bits);
1391  ni->itype.compressed.block_size_bits =
1392  ffs(ni->itype.compressed.
1393  block_size) - 1;
1394  ni->itype.compressed.block_clusters = 1U <<
1395  a->data.non_resident.
1397  } else {
1398  ni->itype.compressed.block_size = 0;
1399  ni->itype.compressed.block_size_bits = 0;
1400  ni->itype.compressed.block_clusters = 0;
1401  }
1402  ni->itype.compressed.size = sle64_to_cpu(
1403  a->data.non_resident.compressed_size);
1404  }
1405  if (a->data.non_resident.lowest_vcn) {
1406  ntfs_error(vi->i_sb, "First extent of attribute has "
1407  "non-zero lowest_vcn.");
1408  goto unm_err_out;
1409  }
1410  vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1411  ni->initialized_size = sle64_to_cpu(
1412  a->data.non_resident.initialized_size);
1413  ni->allocated_size = sle64_to_cpu(
1414  a->data.non_resident.allocated_size);
1415  }
1416  if (NInoMstProtected(ni))
1417  vi->i_mapping->a_ops = &ntfs_mst_aops;
1418  else
1419  vi->i_mapping->a_ops = &ntfs_aops;
1420  if ((NInoCompressed(ni) || NInoSparse(ni)) && ni->type != AT_INDEX_ROOT)
1421  vi->i_blocks = ni->itype.compressed.size >> 9;
1422  else
1423  vi->i_blocks = ni->allocated_size >> 9;
1424  /*
1425  * Make sure the base inode does not go away and attach it to the
1426  * attribute inode.
1427  */
1428  igrab(base_vi);
1429  ni->ext.base_ntfs_ino = base_ni;
1430  ni->nr_extents = -1;
1431 
1433  unmap_mft_record(base_ni);
1434 
1435  ntfs_debug("Done.");
1436  return 0;
1437 
1438 unm_err_out:
1439  if (!err)
1440  err = -EIO;
1441  if (ctx)
1443  unmap_mft_record(base_ni);
1444 err_out:
1445  ntfs_error(vol->sb, "Failed with error code %i while reading attribute "
1446  "inode (mft_no 0x%lx, type 0x%x, name_len %i). "
1447  "Marking corrupt inode and base inode 0x%lx as bad. "
1448  "Run chkdsk.", err, vi->i_ino, ni->type, ni->name_len,
1449  base_vi->i_ino);
1450  make_bad_inode(vi);
1451  if (err != -ENOMEM)
1452  NVolSetErrors(vol);
1453  return err;
1454 }
1455 
1489 static int ntfs_read_locked_index_inode(struct inode *base_vi, struct inode *vi)
1490 {
1491  loff_t bvi_size;
1492  ntfs_volume *vol = NTFS_SB(vi->i_sb);
1493  ntfs_inode *ni, *base_ni, *bni;
1494  struct inode *bvi;
1495  MFT_RECORD *m;
1496  ATTR_RECORD *a;
1498  INDEX_ROOT *ir;
1499  u8 *ir_end, *index_end;
1500  int err = 0;
1501 
1502  ntfs_debug("Entering for i_ino 0x%lx.", vi->i_ino);
1503  ntfs_init_big_inode(vi);
1504  ni = NTFS_I(vi);
1505  base_ni = NTFS_I(base_vi);
1506  /* Just mirror the values from the base inode. */
1507  vi->i_version = base_vi->i_version;
1508  vi->i_uid = base_vi->i_uid;
1509  vi->i_gid = base_vi->i_gid;
1510  set_nlink(vi, base_vi->i_nlink);
1511  vi->i_mtime = base_vi->i_mtime;
1512  vi->i_ctime = base_vi->i_ctime;
1513  vi->i_atime = base_vi->i_atime;
1514  vi->i_generation = ni->seq_no = base_ni->seq_no;
1515  /* Set inode type to zero but preserve permissions. */
1516  vi->i_mode = base_vi->i_mode & ~S_IFMT;
1517  /* Map the mft record for the base inode. */
1518  m = map_mft_record(base_ni);
1519  if (IS_ERR(m)) {
1520  err = PTR_ERR(m);
1521  goto err_out;
1522  }
1523  ctx = ntfs_attr_get_search_ctx(base_ni, m);
1524  if (!ctx) {
1525  err = -ENOMEM;
1526  goto unm_err_out;
1527  }
1528  /* Find the index root attribute. */
1529  err = ntfs_attr_lookup(AT_INDEX_ROOT, ni->name, ni->name_len,
1530  CASE_SENSITIVE, 0, NULL, 0, ctx);
1531  if (unlikely(err)) {
1532  if (err == -ENOENT)
1533  ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is "
1534  "missing.");
1535  goto unm_err_out;
1536  }
1537  a = ctx->attr;
1538  /* Set up the state. */
1539  if (unlikely(a->non_resident)) {
1540  ntfs_error(vol->sb, "$INDEX_ROOT attribute is not resident.");
1541  goto unm_err_out;
1542  }
1543  /* Ensure the attribute name is placed before the value. */
1544  if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1545  le16_to_cpu(a->data.resident.value_offset)))) {
1546  ntfs_error(vol->sb, "$INDEX_ROOT attribute name is placed "
1547  "after the attribute value.");
1548  goto unm_err_out;
1549  }
1550  /*
1551  * Compressed/encrypted/sparse index root is not allowed, except for
1552  * directories of course but those are not dealt with here.
1553  */
1554  if (a->flags & (ATTR_COMPRESSION_MASK | ATTR_IS_ENCRYPTED |
1555  ATTR_IS_SPARSE)) {
1556  ntfs_error(vi->i_sb, "Found compressed/encrypted/sparse index "
1557  "root attribute.");
1558  goto unm_err_out;
1559  }
1560  ir = (INDEX_ROOT*)((u8*)a + le16_to_cpu(a->data.resident.value_offset));
1561  ir_end = (u8*)ir + le32_to_cpu(a->data.resident.value_length);
1562  if (ir_end > (u8*)ctx->mrec + vol->mft_record_size) {
1563  ntfs_error(vi->i_sb, "$INDEX_ROOT attribute is corrupt.");
1564  goto unm_err_out;
1565  }
1566  index_end = (u8*)&ir->index + le32_to_cpu(ir->index.index_length);
1567  if (index_end > ir_end) {
1568  ntfs_error(vi->i_sb, "Index is corrupt.");
1569  goto unm_err_out;
1570  }
1571  if (ir->type) {
1572  ntfs_error(vi->i_sb, "Index type is not 0 (type is 0x%x).",
1573  le32_to_cpu(ir->type));
1574  goto unm_err_out;
1575  }
1576  ni->itype.index.collation_rule = ir->collation_rule;
1577  ntfs_debug("Index collation rule is 0x%x.",
1578  le32_to_cpu(ir->collation_rule));
1579  ni->itype.index.block_size = le32_to_cpu(ir->index_block_size);
1580  if (!is_power_of_2(ni->itype.index.block_size)) {
1581  ntfs_error(vi->i_sb, "Index block size (%u) is not a power of "
1582  "two.", ni->itype.index.block_size);
1583  goto unm_err_out;
1584  }
1585  if (ni->itype.index.block_size > PAGE_CACHE_SIZE) {
1586  ntfs_error(vi->i_sb, "Index block size (%u) > PAGE_CACHE_SIZE "
1587  "(%ld) is not supported. Sorry.",
1588  ni->itype.index.block_size, PAGE_CACHE_SIZE);
1589  err = -EOPNOTSUPP;
1590  goto unm_err_out;
1591  }
1592  if (ni->itype.index.block_size < NTFS_BLOCK_SIZE) {
1593  ntfs_error(vi->i_sb, "Index block size (%u) < NTFS_BLOCK_SIZE "
1594  "(%i) is not supported. Sorry.",
1595  ni->itype.index.block_size, NTFS_BLOCK_SIZE);
1596  err = -EOPNOTSUPP;
1597  goto unm_err_out;
1598  }
1599  ni->itype.index.block_size_bits = ffs(ni->itype.index.block_size) - 1;
1600  /* Determine the size of a vcn in the index. */
1601  if (vol->cluster_size <= ni->itype.index.block_size) {
1602  ni->itype.index.vcn_size = vol->cluster_size;
1603  ni->itype.index.vcn_size_bits = vol->cluster_size_bits;
1604  } else {
1605  ni->itype.index.vcn_size = vol->sector_size;
1606  ni->itype.index.vcn_size_bits = vol->sector_size_bits;
1607  }
1608  /* Check for presence of index allocation attribute. */
1609  if (!(ir->index.flags & LARGE_INDEX)) {
1610  /* No index allocation. */
1611  vi->i_size = ni->initialized_size = ni->allocated_size = 0;
1612  /* We are done with the mft record, so we release it. */
1614  unmap_mft_record(base_ni);
1615  m = NULL;
1616  ctx = NULL;
1617  goto skip_large_index_stuff;
1618  } /* LARGE_INDEX: Index allocation present. Setup state. */
1619  NInoSetIndexAllocPresent(ni);
1620  /* Find index allocation attribute. */
1623  CASE_SENSITIVE, 0, NULL, 0, ctx);
1624  if (unlikely(err)) {
1625  if (err == -ENOENT)
1626  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1627  "not present but $INDEX_ROOT "
1628  "indicated it is.");
1629  else
1630  ntfs_error(vi->i_sb, "Failed to lookup "
1631  "$INDEX_ALLOCATION attribute.");
1632  goto unm_err_out;
1633  }
1634  a = ctx->attr;
1635  if (!a->non_resident) {
1636  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1637  "resident.");
1638  goto unm_err_out;
1639  }
1640  /*
1641  * Ensure the attribute name is placed before the mapping pairs array.
1642  */
1643  if (unlikely(a->name_length && (le16_to_cpu(a->name_offset) >=
1644  le16_to_cpu(
1645  a->data.non_resident.mapping_pairs_offset)))) {
1646  ntfs_error(vol->sb, "$INDEX_ALLOCATION attribute name is "
1647  "placed after the mapping pairs array.");
1648  goto unm_err_out;
1649  }
1650  if (a->flags & ATTR_IS_ENCRYPTED) {
1651  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1652  "encrypted.");
1653  goto unm_err_out;
1654  }
1655  if (a->flags & ATTR_IS_SPARSE) {
1656  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is sparse.");
1657  goto unm_err_out;
1658  }
1659  if (a->flags & ATTR_COMPRESSION_MASK) {
1660  ntfs_error(vi->i_sb, "$INDEX_ALLOCATION attribute is "
1661  "compressed.");
1662  goto unm_err_out;
1663  }
1664  if (a->data.non_resident.lowest_vcn) {
1665  ntfs_error(vi->i_sb, "First extent of $INDEX_ALLOCATION "
1666  "attribute has non zero lowest_vcn.");
1667  goto unm_err_out;
1668  }
1669  vi->i_size = sle64_to_cpu(a->data.non_resident.data_size);
1670  ni->initialized_size = sle64_to_cpu(
1671  a->data.non_resident.initialized_size);
1672  ni->allocated_size = sle64_to_cpu(a->data.non_resident.allocated_size);
1673  /*
1674  * We are done with the mft record, so we release it. Otherwise
1675  * we would deadlock in ntfs_attr_iget().
1676  */
1678  unmap_mft_record(base_ni);
1679  m = NULL;
1680  ctx = NULL;
1681  /* Get the index bitmap attribute inode. */
1682  bvi = ntfs_attr_iget(base_vi, AT_BITMAP, ni->name, ni->name_len);
1683  if (IS_ERR(bvi)) {
1684  ntfs_error(vi->i_sb, "Failed to get bitmap attribute.");
1685  err = PTR_ERR(bvi);
1686  goto unm_err_out;
1687  }
1688  bni = NTFS_I(bvi);
1689  if (NInoCompressed(bni) || NInoEncrypted(bni) ||
1690  NInoSparse(bni)) {
1691  ntfs_error(vi->i_sb, "$BITMAP attribute is compressed and/or "
1692  "encrypted and/or sparse.");
1693  goto iput_unm_err_out;
1694  }
1695  /* Consistency check bitmap size vs. index allocation size. */
1696  bvi_size = i_size_read(bvi);
1697  if ((bvi_size << 3) < (vi->i_size >> ni->itype.index.block_size_bits)) {
1698  ntfs_error(vi->i_sb, "Index bitmap too small (0x%llx) for "
1699  "index allocation (0x%llx).", bvi_size << 3,
1700  vi->i_size);
1701  goto iput_unm_err_out;
1702  }
1703  iput(bvi);
1704 skip_large_index_stuff:
1705  /* Setup the operations for this index inode. */
1706  vi->i_op = NULL;
1707  vi->i_fop = NULL;
1708  vi->i_mapping->a_ops = &ntfs_mst_aops;
1709  vi->i_blocks = ni->allocated_size >> 9;
1710  /*
1711  * Make sure the base inode doesn't go away and attach it to the
1712  * index inode.
1713  */
1714  igrab(base_vi);
1715  ni->ext.base_ntfs_ino = base_ni;
1716  ni->nr_extents = -1;
1717 
1718  ntfs_debug("Done.");
1719  return 0;
1720 iput_unm_err_out:
1721  iput(bvi);
1722 unm_err_out:
1723  if (!err)
1724  err = -EIO;
1725  if (ctx)
1727  if (m)
1728  unmap_mft_record(base_ni);
1729 err_out:
1730  ntfs_error(vi->i_sb, "Failed with error code %i while reading index "
1731  "inode (mft_no 0x%lx, name_len %i.", err, vi->i_ino,
1732  ni->name_len);
1733  make_bad_inode(vi);
1734  if (err != -EOPNOTSUPP && err != -ENOMEM)
1735  NVolSetErrors(vol);
1736  return err;
1737 }
1738 
1739 /*
1740  * The MFT inode has special locking, so teach the lock validator
1741  * about this by splitting off the locking rules of the MFT from
1742  * the locking rules of other inodes. The MFT inode can never be
1743  * accessed from the VFS side (or even internally), only by the
1744  * map_mft functions.
1745  */
1746 static struct lock_class_key mft_ni_runlist_lock_key, mft_ni_mrec_lock_key;
1747 
1774 int ntfs_read_inode_mount(struct inode *vi)
1775 {
1776  VCN next_vcn, last_vcn, highest_vcn;
1777  s64 block;
1778  struct super_block *sb = vi->i_sb;
1779  ntfs_volume *vol = NTFS_SB(sb);
1780  struct buffer_head *bh;
1781  ntfs_inode *ni;
1782  MFT_RECORD *m = NULL;
1783  ATTR_RECORD *a;
1785  unsigned int i, nr_blocks;
1786  int err;
1787 
1788  ntfs_debug("Entering.");
1789 
1790  /* Initialize the ntfs specific part of @vi. */
1791  ntfs_init_big_inode(vi);
1792 
1793  ni = NTFS_I(vi);
1794 
1795  /* Setup the data attribute. It is special as it is mst protected. */
1796  NInoSetNonResident(ni);
1797  NInoSetMstProtected(ni);
1798  NInoSetSparseDisabled(ni);
1799  ni->type = AT_DATA;
1800  ni->name = NULL;
1801  ni->name_len = 0;
1802  /*
1803  * This sets up our little cheat allowing us to reuse the async read io
1804  * completion handler for directories.
1805  */
1806  ni->itype.index.block_size = vol->mft_record_size;
1807  ni->itype.index.block_size_bits = vol->mft_record_size_bits;
1808 
1809  /* Very important! Needed to be able to call map_mft_record*(). */
1810  vol->mft_ino = vi;
1811 
1812  /* Allocate enough memory to read the first mft record. */
1813  if (vol->mft_record_size > 64 * 1024) {
1814  ntfs_error(sb, "Unsupported mft record size %i (max 64kiB).",
1815  vol->mft_record_size);
1816  goto err_out;
1817  }
1818  i = vol->mft_record_size;
1819  if (i < sb->s_blocksize)
1820  i = sb->s_blocksize;
1821  m = (MFT_RECORD*)ntfs_malloc_nofs(i);
1822  if (!m) {
1823  ntfs_error(sb, "Failed to allocate buffer for $MFT record 0.");
1824  goto err_out;
1825  }
1826 
1827  /* Determine the first block of the $MFT/$DATA attribute. */
1828  block = vol->mft_lcn << vol->cluster_size_bits >>
1829  sb->s_blocksize_bits;
1830  nr_blocks = vol->mft_record_size >> sb->s_blocksize_bits;
1831  if (!nr_blocks)
1832  nr_blocks = 1;
1833 
1834  /* Load $MFT/$DATA's first mft record. */
1835  for (i = 0; i < nr_blocks; i++) {
1836  bh = sb_bread(sb, block++);
1837  if (!bh) {
1838  ntfs_error(sb, "Device read failed.");
1839  goto err_out;
1840  }
1841  memcpy((char*)m + (i << sb->s_blocksize_bits), bh->b_data,
1842  sb->s_blocksize);
1843  brelse(bh);
1844  }
1845 
1846  /* Apply the mst fixups. */
1847  if (post_read_mst_fixup((NTFS_RECORD*)m, vol->mft_record_size)) {
1848  /* FIXME: Try to use the $MFTMirr now. */
1849  ntfs_error(sb, "MST fixup failed. $MFT is corrupt.");
1850  goto err_out;
1851  }
1852 
1853  /* Need this to sanity check attribute list references to $MFT. */
1854  vi->i_generation = ni->seq_no = le16_to_cpu(m->sequence_number);
1855 
1856  /* Provides readpage() and sync_page() for map_mft_record(). */
1857  vi->i_mapping->a_ops = &ntfs_mst_aops;
1858 
1859  ctx = ntfs_attr_get_search_ctx(ni, m);
1860  if (!ctx) {
1861  err = -ENOMEM;
1862  goto err_out;
1863  }
1864 
1865  /* Find the attribute list attribute if present. */
1866  err = ntfs_attr_lookup(AT_ATTRIBUTE_LIST, NULL, 0, 0, 0, NULL, 0, ctx);
1867  if (err) {
1868  if (unlikely(err != -ENOENT)) {
1869  ntfs_error(sb, "Failed to lookup attribute list "
1870  "attribute. You should run chkdsk.");
1871  goto put_err_out;
1872  }
1873  } else /* if (!err) */ {
1874  ATTR_LIST_ENTRY *al_entry, *next_al_entry;
1875  u8 *al_end;
1876  static const char *es = " Not allowed. $MFT is corrupt. "
1877  "You should run chkdsk.";
1878 
1879  ntfs_debug("Attribute list attribute found in $MFT.");
1880  NInoSetAttrList(ni);
1881  a = ctx->attr;
1882  if (a->flags & ATTR_COMPRESSION_MASK) {
1883  ntfs_error(sb, "Attribute list attribute is "
1884  "compressed.%s", es);
1885  goto put_err_out;
1886  }
1887  if (a->flags & ATTR_IS_ENCRYPTED ||
1888  a->flags & ATTR_IS_SPARSE) {
1889  if (a->non_resident) {
1890  ntfs_error(sb, "Non-resident attribute list "
1891  "attribute is encrypted/"
1892  "sparse.%s", es);
1893  goto put_err_out;
1894  }
1895  ntfs_warning(sb, "Resident attribute list attribute "
1896  "in $MFT system file is marked "
1897  "encrypted/sparse which is not true. "
1898  "However, Windows allows this and "
1899  "chkdsk does not detect or correct it "
1900  "so we will just ignore the invalid "
1901  "flags and pretend they are not set.");
1902  }
1903  /* Now allocate memory for the attribute list. */
1904  ni->attr_list_size = (u32)ntfs_attr_size(a);
1905  ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size);
1906  if (!ni->attr_list) {
1907  ntfs_error(sb, "Not enough memory to allocate buffer "
1908  "for attribute list.");
1909  goto put_err_out;
1910  }
1911  if (a->non_resident) {
1912  NInoSetAttrListNonResident(ni);
1913  if (a->data.non_resident.lowest_vcn) {
1914  ntfs_error(sb, "Attribute list has non zero "
1915  "lowest_vcn. $MFT is corrupt. "
1916  "You should run chkdsk.");
1917  goto put_err_out;
1918  }
1919  /* Setup the runlist. */
1921  a, NULL);
1922  if (IS_ERR(ni->attr_list_rl.rl)) {
1923  err = PTR_ERR(ni->attr_list_rl.rl);
1924  ni->attr_list_rl.rl = NULL;
1925  ntfs_error(sb, "Mapping pairs decompression "
1926  "failed with error code %i.",
1927  -err);
1928  goto put_err_out;
1929  }
1930  /* Now load the attribute list. */
1931  if ((err = load_attribute_list(vol, &ni->attr_list_rl,
1932  ni->attr_list, ni->attr_list_size,
1933  sle64_to_cpu(a->data.
1934  non_resident.initialized_size)))) {
1935  ntfs_error(sb, "Failed to load attribute list "
1936  "attribute with error code %i.",
1937  -err);
1938  goto put_err_out;
1939  }
1940  } else /* if (!ctx.attr->non_resident) */ {
1941  if ((u8*)a + le16_to_cpu(
1942  a->data.resident.value_offset) +
1943  le32_to_cpu(
1944  a->data.resident.value_length) >
1945  (u8*)ctx->mrec + vol->mft_record_size) {
1946  ntfs_error(sb, "Corrupt attribute list "
1947  "attribute.");
1948  goto put_err_out;
1949  }
1950  /* Now copy the attribute list. */
1951  memcpy(ni->attr_list, (u8*)a + le16_to_cpu(
1952  a->data.resident.value_offset),
1953  le32_to_cpu(
1954  a->data.resident.value_length));
1955  }
1956  /* The attribute list is now setup in memory. */
1957  /*
1958  * FIXME: I don't know if this case is actually possible.
1959  * According to logic it is not possible but I have seen too
1960  * many weird things in MS software to rely on logic... Thus we
1961  * perform a manual search and make sure the first $MFT/$DATA
1962  * extent is in the base inode. If it is not we abort with an
1963  * error and if we ever see a report of this error we will need
1964  * to do some magic in order to have the necessary mft record
1965  * loaded and in the right place in the page cache. But
1966  * hopefully logic will prevail and this never happens...
1967  */
1968  al_entry = (ATTR_LIST_ENTRY*)ni->attr_list;
1969  al_end = (u8*)al_entry + ni->attr_list_size;
1970  for (;; al_entry = next_al_entry) {
1971  /* Out of bounds check. */
1972  if ((u8*)al_entry < ni->attr_list ||
1973  (u8*)al_entry > al_end)
1974  goto em_put_err_out;
1975  /* Catch the end of the attribute list. */
1976  if ((u8*)al_entry == al_end)
1977  goto em_put_err_out;
1978  if (!al_entry->length)
1979  goto em_put_err_out;
1980  if ((u8*)al_entry + 6 > al_end || (u8*)al_entry +
1981  le16_to_cpu(al_entry->length) > al_end)
1982  goto em_put_err_out;
1983  next_al_entry = (ATTR_LIST_ENTRY*)((u8*)al_entry +
1984  le16_to_cpu(al_entry->length));
1985  if (le32_to_cpu(al_entry->type) > le32_to_cpu(AT_DATA))
1986  goto em_put_err_out;
1987  if (AT_DATA != al_entry->type)
1988  continue;
1989  /* We want an unnamed attribute. */
1990  if (al_entry->name_length)
1991  goto em_put_err_out;
1992  /* Want the first entry, i.e. lowest_vcn == 0. */
1993  if (al_entry->lowest_vcn)
1994  goto em_put_err_out;
1995  /* First entry has to be in the base mft record. */
1996  if (MREF_LE(al_entry->mft_reference) != vi->i_ino) {
1997  /* MFT references do not match, logic fails. */
1998  ntfs_error(sb, "BUG: The first $DATA extent "
1999  "of $MFT is not in the base "
2000  "mft record. Please report "
2001  "you saw this message to "
2002  "linux-ntfs-dev@lists."
2003  "sourceforge.net");
2004  goto put_err_out;
2005  } else {
2006  /* Sequence numbers must match. */
2007  if (MSEQNO_LE(al_entry->mft_reference) !=
2008  ni->seq_no)
2009  goto em_put_err_out;
2010  /* Got it. All is ok. We can stop now. */
2011  break;
2012  }
2013  }
2014  }
2015 
2017 
2018  /* Now load all attribute extents. */
2019  a = NULL;
2020  next_vcn = last_vcn = highest_vcn = 0;
2021  while (!(err = ntfs_attr_lookup(AT_DATA, NULL, 0, 0, next_vcn, NULL, 0,
2022  ctx))) {
2023  runlist_element *nrl;
2024 
2025  /* Cache the current attribute. */
2026  a = ctx->attr;
2027  /* $MFT must be non-resident. */
2028  if (!a->non_resident) {
2029  ntfs_error(sb, "$MFT must be non-resident but a "
2030  "resident extent was found. $MFT is "
2031  "corrupt. Run chkdsk.");
2032  goto put_err_out;
2033  }
2034  /* $MFT must be uncompressed and unencrypted. */
2035  if (a->flags & ATTR_COMPRESSION_MASK ||
2036  a->flags & ATTR_IS_ENCRYPTED ||
2037  a->flags & ATTR_IS_SPARSE) {
2038  ntfs_error(sb, "$MFT must be uncompressed, "
2039  "non-sparse, and unencrypted but a "
2040  "compressed/sparse/encrypted extent "
2041  "was found. $MFT is corrupt. Run "
2042  "chkdsk.");
2043  goto put_err_out;
2044  }
2045  /*
2046  * Decompress the mapping pairs array of this extent and merge
2047  * the result into the existing runlist. No need for locking
2048  * as we have exclusive access to the inode at this time and we
2049  * are a mount in progress task, too.
2050  */
2051  nrl = ntfs_mapping_pairs_decompress(vol, a, ni->runlist.rl);
2052  if (IS_ERR(nrl)) {
2053  ntfs_error(sb, "ntfs_mapping_pairs_decompress() "
2054  "failed with error code %ld. $MFT is "
2055  "corrupt.", PTR_ERR(nrl));
2056  goto put_err_out;
2057  }
2058  ni->runlist.rl = nrl;
2059 
2060  /* Are we in the first extent? */
2061  if (!next_vcn) {
2062  if (a->data.non_resident.lowest_vcn) {
2063  ntfs_error(sb, "First extent of $DATA "
2064  "attribute has non zero "
2065  "lowest_vcn. $MFT is corrupt. "
2066  "You should run chkdsk.");
2067  goto put_err_out;
2068  }
2069  /* Get the last vcn in the $DATA attribute. */
2070  last_vcn = sle64_to_cpu(
2071  a->data.non_resident.allocated_size)
2072  >> vol->cluster_size_bits;
2073  /* Fill in the inode size. */
2074  vi->i_size = sle64_to_cpu(
2075  a->data.non_resident.data_size);
2076  ni->initialized_size = sle64_to_cpu(
2077  a->data.non_resident.initialized_size);
2078  ni->allocated_size = sle64_to_cpu(
2079  a->data.non_resident.allocated_size);
2080  /*
2081  * Verify the number of mft records does not exceed
2082  * 2^32 - 1.
2083  */
2084  if ((vi->i_size >> vol->mft_record_size_bits) >=
2085  (1ULL << 32)) {
2086  ntfs_error(sb, "$MFT is too big! Aborting.");
2087  goto put_err_out;
2088  }
2089  /*
2090  * We have got the first extent of the runlist for
2091  * $MFT which means it is now relatively safe to call
2092  * the normal ntfs_read_inode() function.
2093  * Complete reading the inode, this will actually
2094  * re-read the mft record for $MFT, this time entering
2095  * it into the page cache with which we complete the
2096  * kick start of the volume. It should be safe to do
2097  * this now as the first extent of $MFT/$DATA is
2098  * already known and we would hope that we don't need
2099  * further extents in order to find the other
2100  * attributes belonging to $MFT. Only time will tell if
2101  * this is really the case. If not we will have to play
2102  * magic at this point, possibly duplicating a lot of
2103  * ntfs_read_inode() at this point. We will need to
2104  * ensure we do enough of its work to be able to call
2105  * ntfs_read_inode() on extents of $MFT/$DATA. But lets
2106  * hope this never happens...
2107  */
2108  ntfs_read_locked_inode(vi);
2109  if (is_bad_inode(vi)) {
2110  ntfs_error(sb, "ntfs_read_inode() of $MFT "
2111  "failed. BUG or corrupt $MFT. "
2112  "Run chkdsk and if no errors "
2113  "are found, please report you "
2114  "saw this message to "
2115  "linux-ntfs-dev@lists."
2116  "sourceforge.net");
2118  /* Revert to the safe super operations. */
2119  ntfs_free(m);
2120  return -1;
2121  }
2122  /*
2123  * Re-initialize some specifics about $MFT's inode as
2124  * ntfs_read_inode() will have set up the default ones.
2125  */
2126  /* Set uid and gid to root. */
2127  vi->i_uid = GLOBAL_ROOT_UID;
2128  vi->i_gid = GLOBAL_ROOT_GID;
2129  /* Regular file. No access for anyone. */
2130  vi->i_mode = S_IFREG;
2131  /* No VFS initiated operations allowed for $MFT. */
2132  vi->i_op = &ntfs_empty_inode_ops;
2133  vi->i_fop = &ntfs_empty_file_ops;
2134  }
2135 
2136  /* Get the lowest vcn for the next extent. */
2137  highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2138  next_vcn = highest_vcn + 1;
2139 
2140  /* Only one extent or error, which we catch below. */
2141  if (next_vcn <= 0)
2142  break;
2143 
2144  /* Avoid endless loops due to corruption. */
2145  if (next_vcn < sle64_to_cpu(
2146  a->data.non_resident.lowest_vcn)) {
2147  ntfs_error(sb, "$MFT has corrupt attribute list "
2148  "attribute. Run chkdsk.");
2149  goto put_err_out;
2150  }
2151  }
2152  if (err != -ENOENT) {
2153  ntfs_error(sb, "Failed to lookup $MFT/$DATA attribute extent. "
2154  "$MFT is corrupt. Run chkdsk.");
2155  goto put_err_out;
2156  }
2157  if (!a) {
2158  ntfs_error(sb, "$MFT/$DATA attribute not found. $MFT is "
2159  "corrupt. Run chkdsk.");
2160  goto put_err_out;
2161  }
2162  if (highest_vcn && highest_vcn != last_vcn - 1) {
2163  ntfs_error(sb, "Failed to load the complete runlist for "
2164  "$MFT/$DATA. Driver bug or corrupt $MFT. "
2165  "Run chkdsk.");
2166  ntfs_debug("highest_vcn = 0x%llx, last_vcn - 1 = 0x%llx",
2167  (unsigned long long)highest_vcn,
2168  (unsigned long long)last_vcn - 1);
2169  goto put_err_out;
2170  }
2172  ntfs_debug("Done.");
2173  ntfs_free(m);
2174 
2175  /*
2176  * Split the locking rules of the MFT inode from the
2177  * locking rules of other inodes:
2178  */
2179  lockdep_set_class(&ni->runlist.lock, &mft_ni_runlist_lock_key);
2180  lockdep_set_class(&ni->mrec_lock, &mft_ni_mrec_lock_key);
2181 
2182  return 0;
2183 
2184 em_put_err_out:
2185  ntfs_error(sb, "Couldn't find first extent of $DATA attribute in "
2186  "attribute list. $MFT is corrupt. Run chkdsk.");
2187 put_err_out:
2189 err_out:
2190  ntfs_error(sb, "Failed. Marking inode as bad.");
2191  make_bad_inode(vi);
2192  ntfs_free(m);
2193  return -1;
2194 }
2195 
2196 static void __ntfs_clear_inode(ntfs_inode *ni)
2197 {
2198  /* Free all alocated memory. */
2199  down_write(&ni->runlist.lock);
2200  if (ni->runlist.rl) {
2201  ntfs_free(ni->runlist.rl);
2202  ni->runlist.rl = NULL;
2203  }
2204  up_write(&ni->runlist.lock);
2205 
2206  if (ni->attr_list) {
2207  ntfs_free(ni->attr_list);
2208  ni->attr_list = NULL;
2209  }
2210 
2212  if (ni->attr_list_rl.rl) {
2213  ntfs_free(ni->attr_list_rl.rl);
2214  ni->attr_list_rl.rl = NULL;
2215  }
2216  up_write(&ni->attr_list_rl.lock);
2217 
2218  if (ni->name_len && ni->name != I30) {
2219  /* Catch bugs... */
2220  BUG_ON(!ni->name);
2221  kfree(ni->name);
2222  }
2223 }
2224 
2226 {
2227  ntfs_debug("Entering for inode 0x%lx.", ni->mft_no);
2228 
2229  BUG_ON(NInoAttr(ni));
2230  BUG_ON(ni->nr_extents != -1);
2231 
2232 #ifdef NTFS_RW
2233  if (NInoDirty(ni)) {
2234  if (!is_bad_inode(VFS_I(ni->ext.base_ntfs_ino)))
2235  ntfs_error(ni->vol->sb, "Clearing dirty extent inode! "
2236  "Losing data! This is a BUG!!!");
2237  // FIXME: Do something!!!
2238  }
2239 #endif /* NTFS_RW */
2240 
2241  __ntfs_clear_inode(ni);
2242 
2243  /* Bye, bye... */
2244  ntfs_destroy_extent_inode(ni);
2245 }
2246 
2257 void ntfs_evict_big_inode(struct inode *vi)
2258 {
2259  ntfs_inode *ni = NTFS_I(vi);
2260 
2261  truncate_inode_pages(&vi->i_data, 0);
2262  clear_inode(vi);
2263 
2264 #ifdef NTFS_RW
2265  if (NInoDirty(ni)) {
2266  bool was_bad = (is_bad_inode(vi));
2267 
2268  /* Committing the inode also commits all extent inodes. */
2269  ntfs_commit_inode(vi);
2270 
2271  if (!was_bad && (is_bad_inode(vi) || NInoDirty(ni))) {
2272  ntfs_error(vi->i_sb, "Failed to commit dirty inode "
2273  "0x%lx. Losing data!", vi->i_ino);
2274  // FIXME: Do something!!!
2275  }
2276  }
2277 #endif /* NTFS_RW */
2278 
2279  /* No need to lock at this stage as no one else has a reference. */
2280  if (ni->nr_extents > 0) {
2281  int i;
2282 
2283  for (i = 0; i < ni->nr_extents; i++)
2285  kfree(ni->ext.extent_ntfs_inos);
2286  }
2287 
2288  __ntfs_clear_inode(ni);
2289 
2290  if (NInoAttr(ni)) {
2291  /* Release the base inode if we are holding it. */
2292  if (ni->nr_extents == -1) {
2293  iput(VFS_I(ni->ext.base_ntfs_ino));
2294  ni->nr_extents = 0;
2295  ni->ext.base_ntfs_ino = NULL;
2296  }
2297  }
2298  return;
2299 }
2300 
2311 int ntfs_show_options(struct seq_file *sf, struct dentry *root)
2312 {
2313  ntfs_volume *vol = NTFS_SB(root->d_sb);
2314  int i;
2315 
2316  seq_printf(sf, ",uid=%i", from_kuid_munged(&init_user_ns, vol->uid));
2317  seq_printf(sf, ",gid=%i", from_kgid_munged(&init_user_ns, vol->gid));
2318  if (vol->fmask == vol->dmask)
2319  seq_printf(sf, ",umask=0%o", vol->fmask);
2320  else {
2321  seq_printf(sf, ",fmask=0%o", vol->fmask);
2322  seq_printf(sf, ",dmask=0%o", vol->dmask);
2323  }
2324  seq_printf(sf, ",nls=%s", vol->nls_map->charset);
2325  if (NVolCaseSensitive(vol))
2326  seq_printf(sf, ",case_sensitive");
2327  if (NVolShowSystemFiles(vol))
2328  seq_printf(sf, ",show_sys_files");
2329  if (!NVolSparseEnabled(vol))
2330  seq_printf(sf, ",disable_sparse");
2331  for (i = 0; on_errors_arr[i].val; i++) {
2332  if (on_errors_arr[i].val & vol->on_errors)
2333  seq_printf(sf, ",errors=%s", on_errors_arr[i].str);
2334  }
2335  seq_printf(sf, ",mft_zone_multiplier=%i", vol->mft_zone_multiplier);
2336  return 0;
2337 }
2338 
2339 #ifdef NTFS_RW
2340 
2341 static const char *es = " Leaving inconsistent metadata. Unmount and run "
2342  "chkdsk.";
2343 
2362 int ntfs_truncate(struct inode *vi)
2363 {
2364  s64 new_size, old_size, nr_freed, new_alloc_size, old_alloc_size;
2365  VCN highest_vcn;
2366  unsigned long flags;
2367  ntfs_inode *base_ni, *ni = NTFS_I(vi);
2368  ntfs_volume *vol = ni->vol;
2370  MFT_RECORD *m;
2371  ATTR_RECORD *a;
2372  const char *te = " Leaving file length out of sync with i_size.";
2373  int err, mp_size, size_change, alloc_change;
2374  u32 attr_len;
2375 
2376  ntfs_debug("Entering for inode 0x%lx.", vi->i_ino);
2377  BUG_ON(NInoAttr(ni));
2378  BUG_ON(S_ISDIR(vi->i_mode));
2379  BUG_ON(NInoMstProtected(ni));
2380  BUG_ON(ni->nr_extents < 0);
2381 retry_truncate:
2382  /*
2383  * Lock the runlist for writing and map the mft record to ensure it is
2384  * safe to mess with the attribute runlist and sizes.
2385  */
2386  down_write(&ni->runlist.lock);
2387  if (!NInoAttr(ni))
2388  base_ni = ni;
2389  else
2390  base_ni = ni->ext.base_ntfs_ino;
2391  m = map_mft_record(base_ni);
2392  if (IS_ERR(m)) {
2393  err = PTR_ERR(m);
2394  ntfs_error(vi->i_sb, "Failed to map mft record for inode 0x%lx "
2395  "(error code %d).%s", vi->i_ino, err, te);
2396  ctx = NULL;
2397  m = NULL;
2398  goto old_bad_out;
2399  }
2400  ctx = ntfs_attr_get_search_ctx(base_ni, m);
2401  if (unlikely(!ctx)) {
2402  ntfs_error(vi->i_sb, "Failed to allocate a search context for "
2403  "inode 0x%lx (not enough memory).%s",
2404  vi->i_ino, te);
2405  err = -ENOMEM;
2406  goto old_bad_out;
2407  }
2408  err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
2409  CASE_SENSITIVE, 0, NULL, 0, ctx);
2410  if (unlikely(err)) {
2411  if (err == -ENOENT) {
2412  ntfs_error(vi->i_sb, "Open attribute is missing from "
2413  "mft record. Inode 0x%lx is corrupt. "
2414  "Run chkdsk.%s", vi->i_ino, te);
2415  err = -EIO;
2416  } else
2417  ntfs_error(vi->i_sb, "Failed to lookup attribute in "
2418  "inode 0x%lx (error code %d).%s",
2419  vi->i_ino, err, te);
2420  goto old_bad_out;
2421  }
2422  m = ctx->mrec;
2423  a = ctx->attr;
2424  /*
2425  * The i_size of the vfs inode is the new size for the attribute value.
2426  */
2427  new_size = i_size_read(vi);
2428  /* The current size of the attribute value is the old size. */
2429  old_size = ntfs_attr_size(a);
2430  /* Calculate the new allocated size. */
2431  if (NInoNonResident(ni))
2432  new_alloc_size = (new_size + vol->cluster_size - 1) &
2433  ~(s64)vol->cluster_size_mask;
2434  else
2435  new_alloc_size = (new_size + 7) & ~7;
2436  /* The current allocated size is the old allocated size. */
2437  read_lock_irqsave(&ni->size_lock, flags);
2438  old_alloc_size = ni->allocated_size;
2439  read_unlock_irqrestore(&ni->size_lock, flags);
2440  /*
2441  * The change in the file size. This will be 0 if no change, >0 if the
2442  * size is growing, and <0 if the size is shrinking.
2443  */
2444  size_change = -1;
2445  if (new_size - old_size >= 0) {
2446  size_change = 1;
2447  if (new_size == old_size)
2448  size_change = 0;
2449  }
2450  /* As above for the allocated size. */
2451  alloc_change = -1;
2452  if (new_alloc_size - old_alloc_size >= 0) {
2453  alloc_change = 1;
2454  if (new_alloc_size == old_alloc_size)
2455  alloc_change = 0;
2456  }
2457  /*
2458  * If neither the size nor the allocation are being changed there is
2459  * nothing to do.
2460  */
2461  if (!size_change && !alloc_change)
2462  goto unm_done;
2463  /* If the size is changing, check if new size is allowed in $AttrDef. */
2464  if (size_change) {
2465  err = ntfs_attr_size_bounds_check(vol, ni->type, new_size);
2466  if (unlikely(err)) {
2467  if (err == -ERANGE) {
2468  ntfs_error(vol->sb, "Truncate would cause the "
2469  "inode 0x%lx to %simum size "
2470  "for its attribute type "
2471  "(0x%x). Aborting truncate.",
2472  vi->i_ino,
2473  new_size > old_size ? "exceed "
2474  "the max" : "go under the min",
2475  le32_to_cpu(ni->type));
2476  err = -EFBIG;
2477  } else {
2478  ntfs_error(vol->sb, "Inode 0x%lx has unknown "
2479  "attribute type 0x%x. "
2480  "Aborting truncate.",
2481  vi->i_ino,
2482  le32_to_cpu(ni->type));
2483  err = -EIO;
2484  }
2485  /* Reset the vfs inode size to the old size. */
2486  i_size_write(vi, old_size);
2487  goto err_out;
2488  }
2489  }
2490  if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2491  ntfs_warning(vi->i_sb, "Changes in inode size are not "
2492  "supported yet for %s files, ignoring.",
2493  NInoCompressed(ni) ? "compressed" :
2494  "encrypted");
2495  err = -EOPNOTSUPP;
2496  goto bad_out;
2497  }
2498  if (a->non_resident)
2499  goto do_non_resident_truncate;
2500  BUG_ON(NInoNonResident(ni));
2501  /* Resize the attribute record to best fit the new attribute size. */
2502  if (new_size < vol->mft_record_size &&
2503  !ntfs_resident_attr_value_resize(m, a, new_size)) {
2504  /* The resize succeeded! */
2505  flush_dcache_mft_record_page(ctx->ntfs_ino);
2506  mark_mft_record_dirty(ctx->ntfs_ino);
2507  write_lock_irqsave(&ni->size_lock, flags);
2508  /* Update the sizes in the ntfs inode and all is done. */
2509  ni->allocated_size = le32_to_cpu(a->length) -
2510  le16_to_cpu(a->data.resident.value_offset);
2511  /*
2512  * Note ntfs_resident_attr_value_resize() has already done any
2513  * necessary data clearing in the attribute record. When the
2514  * file is being shrunk vmtruncate() will already have cleared
2515  * the top part of the last partial page, i.e. since this is
2516  * the resident case this is the page with index 0. However,
2517  * when the file is being expanded, the page cache page data
2518  * between the old data_size, i.e. old_size, and the new_size
2519  * has not been zeroed. Fortunately, we do not need to zero it
2520  * either since on one hand it will either already be zero due
2521  * to both readpage and writepage clearing partial page data
2522  * beyond i_size in which case there is nothing to do or in the
2523  * case of the file being mmap()ped at the same time, POSIX
2524  * specifies that the behaviour is unspecified thus we do not
2525  * have to do anything. This means that in our implementation
2526  * in the rare case that the file is mmap()ped and a write
2527  * occurred into the mmap()ped region just beyond the file size
2528  * and writepage has not yet been called to write out the page
2529  * (which would clear the area beyond the file size) and we now
2530  * extend the file size to incorporate this dirty region
2531  * outside the file size, a write of the page would result in
2532  * this data being written to disk instead of being cleared.
2533  * Given both POSIX and the Linux mmap(2) man page specify that
2534  * this corner case is undefined, we choose to leave it like
2535  * that as this is much simpler for us as we cannot lock the
2536  * relevant page now since we are holding too many ntfs locks
2537  * which would result in a lock reversal deadlock.
2538  */
2539  ni->initialized_size = new_size;
2540  write_unlock_irqrestore(&ni->size_lock, flags);
2541  goto unm_done;
2542  }
2543  /* If the above resize failed, this must be an attribute extension. */
2544  BUG_ON(size_change < 0);
2545  /*
2546  * We have to drop all the locks so we can call
2547  * ntfs_attr_make_non_resident(). This could be optimised by try-
2548  * locking the first page cache page and only if that fails dropping
2549  * the locks, locking the page, and redoing all the locking and
2550  * lookups. While this would be a huge optimisation, it is not worth
2551  * it as this is definitely a slow code path as it only ever can happen
2552  * once for any given file.
2553  */
2555  unmap_mft_record(base_ni);
2556  up_write(&ni->runlist.lock);
2557  /*
2558  * Not enough space in the mft record, try to make the attribute
2559  * non-resident and if successful restart the truncation process.
2560  */
2561  err = ntfs_attr_make_non_resident(ni, old_size);
2562  if (likely(!err))
2563  goto retry_truncate;
2564  /*
2565  * Could not make non-resident. If this is due to this not being
2566  * permitted for this attribute type or there not being enough space,
2567  * try to make other attributes non-resident. Otherwise fail.
2568  */
2569  if (unlikely(err != -EPERM && err != -ENOSPC)) {
2570  ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, attribute "
2571  "type 0x%x, because the conversion from "
2572  "resident to non-resident attribute failed "
2573  "with error code %i.", vi->i_ino,
2574  (unsigned)le32_to_cpu(ni->type), err);
2575  if (err != -ENOMEM)
2576  err = -EIO;
2577  goto conv_err_out;
2578  }
2579  /* TODO: Not implemented from here, abort. */
2580  if (err == -ENOSPC)
2581  ntfs_error(vol->sb, "Not enough space in the mft record/on "
2582  "disk for the non-resident attribute value. "
2583  "This case is not implemented yet.");
2584  else /* if (err == -EPERM) */
2585  ntfs_error(vol->sb, "This attribute type may not be "
2586  "non-resident. This case is not implemented "
2587  "yet.");
2588  err = -EOPNOTSUPP;
2589  goto conv_err_out;
2590 #if 0
2591  // TODO: Attempt to make other attributes non-resident.
2592  if (!err)
2593  goto do_resident_extend;
2594  /*
2595  * Both the attribute list attribute and the standard information
2596  * attribute must remain in the base inode. Thus, if this is one of
2597  * these attributes, we have to try to move other attributes out into
2598  * extent mft records instead.
2599  */
2600  if (ni->type == AT_ATTRIBUTE_LIST ||
2601  ni->type == AT_STANDARD_INFORMATION) {
2602  // TODO: Attempt to move other attributes into extent mft
2603  // records.
2604  err = -EOPNOTSUPP;
2605  if (!err)
2606  goto do_resident_extend;
2607  goto err_out;
2608  }
2609  // TODO: Attempt to move this attribute to an extent mft record, but
2610  // only if it is not already the only attribute in an mft record in
2611  // which case there would be nothing to gain.
2612  err = -EOPNOTSUPP;
2613  if (!err)
2614  goto do_resident_extend;
2615  /* There is nothing we can do to make enough space. )-: */
2616  goto err_out;
2617 #endif
2618 do_non_resident_truncate:
2619  BUG_ON(!NInoNonResident(ni));
2620  if (alloc_change < 0) {
2621  highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
2622  if (highest_vcn > 0 &&
2623  old_alloc_size >> vol->cluster_size_bits >
2624  highest_vcn + 1) {
2625  /*
2626  * This attribute has multiple extents. Not yet
2627  * supported.
2628  */
2629  ntfs_error(vol->sb, "Cannot truncate inode 0x%lx, "
2630  "attribute type 0x%x, because the "
2631  "attribute is highly fragmented (it "
2632  "consists of multiple extents) and "
2633  "this case is not implemented yet.",
2634  vi->i_ino,
2635  (unsigned)le32_to_cpu(ni->type));
2636  err = -EOPNOTSUPP;
2637  goto bad_out;
2638  }
2639  }
2640  /*
2641  * If the size is shrinking, need to reduce the initialized_size and
2642  * the data_size before reducing the allocation.
2643  */
2644  if (size_change < 0) {
2645  /*
2646  * Make the valid size smaller (i_size is already up-to-date).
2647  */
2648  write_lock_irqsave(&ni->size_lock, flags);
2649  if (new_size < ni->initialized_size) {
2650  ni->initialized_size = new_size;
2651  a->data.non_resident.initialized_size =
2652  cpu_to_sle64(new_size);
2653  }
2654  a->data.non_resident.data_size = cpu_to_sle64(new_size);
2655  write_unlock_irqrestore(&ni->size_lock, flags);
2656  flush_dcache_mft_record_page(ctx->ntfs_ino);
2657  mark_mft_record_dirty(ctx->ntfs_ino);
2658  /* If the allocated size is not changing, we are done. */
2659  if (!alloc_change)
2660  goto unm_done;
2661  /*
2662  * If the size is shrinking it makes no sense for the
2663  * allocation to be growing.
2664  */
2665  BUG_ON(alloc_change > 0);
2666  } else /* if (size_change >= 0) */ {
2667  /*
2668  * The file size is growing or staying the same but the
2669  * allocation can be shrinking, growing or staying the same.
2670  */
2671  if (alloc_change > 0) {
2672  /*
2673  * We need to extend the allocation and possibly update
2674  * the data size. If we are updating the data size,
2675  * since we are not touching the initialized_size we do
2676  * not need to worry about the actual data on disk.
2677  * And as far as the page cache is concerned, there
2678  * will be no pages beyond the old data size and any
2679  * partial region in the last page between the old and
2680  * new data size (or the end of the page if the new
2681  * data size is outside the page) does not need to be
2682  * modified as explained above for the resident
2683  * attribute truncate case. To do this, we simply drop
2684  * the locks we hold and leave all the work to our
2685  * friendly helper ntfs_attr_extend_allocation().
2686  */
2688  unmap_mft_record(base_ni);
2689  up_write(&ni->runlist.lock);
2690  err = ntfs_attr_extend_allocation(ni, new_size,
2691  size_change > 0 ? new_size : -1, -1);
2692  /*
2693  * ntfs_attr_extend_allocation() will have done error
2694  * output already.
2695  */
2696  goto done;
2697  }
2698  if (!alloc_change)
2699  goto alloc_done;
2700  }
2701  /* alloc_change < 0 */
2702  /* Free the clusters. */
2703  nr_freed = ntfs_cluster_free(ni, new_alloc_size >>
2704  vol->cluster_size_bits, -1, ctx);
2705  m = ctx->mrec;
2706  a = ctx->attr;
2707  if (unlikely(nr_freed < 0)) {
2708  ntfs_error(vol->sb, "Failed to release cluster(s) (error code "
2709  "%lli). Unmount and run chkdsk to recover "
2710  "the lost cluster(s).", (long long)nr_freed);
2711  NVolSetErrors(vol);
2712  nr_freed = 0;
2713  }
2714  /* Truncate the runlist. */
2715  err = ntfs_rl_truncate_nolock(vol, &ni->runlist,
2716  new_alloc_size >> vol->cluster_size_bits);
2717  /*
2718  * If the runlist truncation failed and/or the search context is no
2719  * longer valid, we cannot resize the attribute record or build the
2720  * mapping pairs array thus we mark the inode bad so that no access to
2721  * the freed clusters can happen.
2722  */
2723  if (unlikely(err || IS_ERR(m))) {
2724  ntfs_error(vol->sb, "Failed to %s (error code %li).%s",
2725  IS_ERR(m) ?
2726  "restore attribute search context" :
2727  "truncate attribute runlist",
2728  IS_ERR(m) ? PTR_ERR(m) : err, es);
2729  err = -EIO;
2730  goto bad_out;
2731  }
2732  /* Get the size for the shrunk mapping pairs array for the runlist. */
2733  mp_size = ntfs_get_size_for_mapping_pairs(vol, ni->runlist.rl, 0, -1);
2734  if (unlikely(mp_size <= 0)) {
2735  ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2736  "attribute type 0x%x, because determining the "
2737  "size for the mapping pairs failed with error "
2738  "code %i.%s", vi->i_ino,
2739  (unsigned)le32_to_cpu(ni->type), mp_size, es);
2740  err = -EIO;
2741  goto bad_out;
2742  }
2743  /*
2744  * Shrink the attribute record for the new mapping pairs array. Note,
2745  * this cannot fail since we are making the attribute smaller thus by
2746  * definition there is enough space to do so.
2747  */
2748  attr_len = le32_to_cpu(a->length);
2749  err = ntfs_attr_record_resize(m, a, mp_size +
2750  le16_to_cpu(a->data.non_resident.mapping_pairs_offset));
2751  BUG_ON(err);
2752  /*
2753  * Generate the mapping pairs array directly into the attribute record.
2754  */
2755  err = ntfs_mapping_pairs_build(vol, (u8*)a +
2756  le16_to_cpu(a->data.non_resident.mapping_pairs_offset),
2757  mp_size, ni->runlist.rl, 0, -1, NULL);
2758  if (unlikely(err)) {
2759  ntfs_error(vol->sb, "Cannot shrink allocation of inode 0x%lx, "
2760  "attribute type 0x%x, because building the "
2761  "mapping pairs failed with error code %i.%s",
2762  vi->i_ino, (unsigned)le32_to_cpu(ni->type),
2763  err, es);
2764  err = -EIO;
2765  goto bad_out;
2766  }
2767  /* Update the allocated/compressed size as well as the highest vcn. */
2768  a->data.non_resident.highest_vcn = cpu_to_sle64((new_alloc_size >>
2769  vol->cluster_size_bits) - 1);
2770  write_lock_irqsave(&ni->size_lock, flags);
2771  ni->allocated_size = new_alloc_size;
2772  a->data.non_resident.allocated_size = cpu_to_sle64(new_alloc_size);
2773  if (NInoSparse(ni) || NInoCompressed(ni)) {
2774  if (nr_freed) {
2775  ni->itype.compressed.size -= nr_freed <<
2776  vol->cluster_size_bits;
2777  BUG_ON(ni->itype.compressed.size < 0);
2778  a->data.non_resident.compressed_size = cpu_to_sle64(
2779  ni->itype.compressed.size);
2780  vi->i_blocks = ni->itype.compressed.size >> 9;
2781  }
2782  } else
2783  vi->i_blocks = new_alloc_size >> 9;
2784  write_unlock_irqrestore(&ni->size_lock, flags);
2785  /*
2786  * We have shrunk the allocation. If this is a shrinking truncate we
2787  * have already dealt with the initialized_size and the data_size above
2788  * and we are done. If the truncate is only changing the allocation
2789  * and not the data_size, we are also done. If this is an extending
2790  * truncate, need to extend the data_size now which is ensured by the
2791  * fact that @size_change is positive.
2792  */
2793 alloc_done:
2794  /*
2795  * If the size is growing, need to update it now. If it is shrinking,
2796  * we have already updated it above (before the allocation change).
2797  */
2798  if (size_change > 0)
2799  a->data.non_resident.data_size = cpu_to_sle64(new_size);
2800  /* Ensure the modified mft record is written out. */
2801  flush_dcache_mft_record_page(ctx->ntfs_ino);
2802  mark_mft_record_dirty(ctx->ntfs_ino);
2803 unm_done:
2805  unmap_mft_record(base_ni);
2806  up_write(&ni->runlist.lock);
2807 done:
2808  /* Update the mtime and ctime on the base inode. */
2809  /* normally ->truncate shouldn't update ctime or mtime,
2810  * but ntfs did before so it got a copy & paste version
2811  * of file_update_time. one day someone should fix this
2812  * for real.
2813  */
2814  if (!IS_NOCMTIME(VFS_I(base_ni)) && !IS_RDONLY(VFS_I(base_ni))) {
2815  struct timespec now = current_fs_time(VFS_I(base_ni)->i_sb);
2816  int sync_it = 0;
2817 
2818  if (!timespec_equal(&VFS_I(base_ni)->i_mtime, &now) ||
2819  !timespec_equal(&VFS_I(base_ni)->i_ctime, &now))
2820  sync_it = 1;
2821  VFS_I(base_ni)->i_mtime = now;
2822  VFS_I(base_ni)->i_ctime = now;
2823 
2824  if (sync_it)
2825  mark_inode_dirty_sync(VFS_I(base_ni));
2826  }
2827 
2828  if (likely(!err)) {
2829  NInoClearTruncateFailed(ni);
2830  ntfs_debug("Done.");
2831  }
2832  return err;
2833 old_bad_out:
2834  old_size = -1;
2835 bad_out:
2836  if (err != -ENOMEM && err != -EOPNOTSUPP)
2837  NVolSetErrors(vol);
2838  if (err != -EOPNOTSUPP)
2839  NInoSetTruncateFailed(ni);
2840  else if (old_size >= 0)
2841  i_size_write(vi, old_size);
2842 err_out:
2843  if (ctx)
2845  if (m)
2846  unmap_mft_record(base_ni);
2847  up_write(&ni->runlist.lock);
2848 out:
2849  ntfs_debug("Failed. Returning error code %i.", err);
2850  return err;
2851 conv_err_out:
2852  if (err != -ENOMEM && err != -EOPNOTSUPP)
2853  NVolSetErrors(vol);
2854  if (err != -EOPNOTSUPP)
2855  NInoSetTruncateFailed(ni);
2856  else
2857  i_size_write(vi, old_size);
2858  goto out;
2859 }
2860 
2869 void ntfs_truncate_vfs(struct inode *vi) {
2870  ntfs_truncate(vi);
2871 }
2872 
2887 int ntfs_setattr(struct dentry *dentry, struct iattr *attr)
2888 {
2889  struct inode *vi = dentry->d_inode;
2890  int err;
2891  unsigned int ia_valid = attr->ia_valid;
2892 
2893  err = inode_change_ok(vi, attr);
2894  if (err)
2895  goto out;
2896  /* We do not support NTFS ACLs yet. */
2897  if (ia_valid & (ATTR_UID | ATTR_GID | ATTR_MODE)) {
2898  ntfs_warning(vi->i_sb, "Changes in user/group/mode are not "
2899  "supported yet, ignoring.");
2900  err = -EOPNOTSUPP;
2901  goto out;
2902  }
2903  if (ia_valid & ATTR_SIZE) {
2904  if (attr->ia_size != i_size_read(vi)) {
2905  ntfs_inode *ni = NTFS_I(vi);
2906  /*
2907  * FIXME: For now we do not support resizing of
2908  * compressed or encrypted files yet.
2909  */
2910  if (NInoCompressed(ni) || NInoEncrypted(ni)) {
2911  ntfs_warning(vi->i_sb, "Changes in inode size "
2912  "are not supported yet for "
2913  "%s files, ignoring.",
2914  NInoCompressed(ni) ?
2915  "compressed" : "encrypted");
2916  err = -EOPNOTSUPP;
2917  } else
2918  err = vmtruncate(vi, attr->ia_size);
2919  if (err || ia_valid == ATTR_SIZE)
2920  goto out;
2921  } else {
2922  /*
2923  * We skipped the truncate but must still update
2924  * timestamps.
2925  */
2926  ia_valid |= ATTR_MTIME | ATTR_CTIME;
2927  }
2928  }
2929  if (ia_valid & ATTR_ATIME)
2930  vi->i_atime = timespec_trunc(attr->ia_atime,
2931  vi->i_sb->s_time_gran);
2932  if (ia_valid & ATTR_MTIME)
2933  vi->i_mtime = timespec_trunc(attr->ia_mtime,
2934  vi->i_sb->s_time_gran);
2935  if (ia_valid & ATTR_CTIME)
2936  vi->i_ctime = timespec_trunc(attr->ia_ctime,
2937  vi->i_sb->s_time_gran);
2938  mark_inode_dirty(vi);
2939 out:
2940  return err;
2941 }
2942 
2961 int __ntfs_write_inode(struct inode *vi, int sync)
2962 {
2963  sle64 nt;
2964  ntfs_inode *ni = NTFS_I(vi);
2966  MFT_RECORD *m;
2967  STANDARD_INFORMATION *si;
2968  int err = 0;
2969  bool modified = false;
2970 
2971  ntfs_debug("Entering for %sinode 0x%lx.", NInoAttr(ni) ? "attr " : "",
2972  vi->i_ino);
2973  /*
2974  * Dirty attribute inodes are written via their real inodes so just
2975  * clean them here. Access time updates are taken care off when the
2976  * real inode is written.
2977  */
2978  if (NInoAttr(ni)) {
2979  NInoClearDirty(ni);
2980  ntfs_debug("Done.");
2981  return 0;
2982  }
2983  /* Map, pin, and lock the mft record belonging to the inode. */
2984  m = map_mft_record(ni);
2985  if (IS_ERR(m)) {
2986  err = PTR_ERR(m);
2987  goto err_out;
2988  }
2989  /* Update the access times in the standard information attribute. */
2990  ctx = ntfs_attr_get_search_ctx(ni, m);
2991  if (unlikely(!ctx)) {
2992  err = -ENOMEM;
2993  goto unm_err_out;
2994  }
2996  CASE_SENSITIVE, 0, NULL, 0, ctx);
2997  if (unlikely(err)) {
2999  goto unm_err_out;
3000  }
3001  si = (STANDARD_INFORMATION*)((u8*)ctx->attr +
3002  le16_to_cpu(ctx->attr->data.resident.value_offset));
3003  /* Update the access times if they have changed. */
3004  nt = utc2ntfs(vi->i_mtime);
3005  if (si->last_data_change_time != nt) {
3006  ntfs_debug("Updating mtime for inode 0x%lx: old = 0x%llx, "
3007  "new = 0x%llx", vi->i_ino, (long long)
3008  sle64_to_cpu(si->last_data_change_time),
3009  (long long)sle64_to_cpu(nt));
3010  si->last_data_change_time = nt;
3011  modified = true;
3012  }
3013  nt = utc2ntfs(vi->i_ctime);
3014  if (si->last_mft_change_time != nt) {
3015  ntfs_debug("Updating ctime for inode 0x%lx: old = 0x%llx, "
3016  "new = 0x%llx", vi->i_ino, (long long)
3017  sle64_to_cpu(si->last_mft_change_time),
3018  (long long)sle64_to_cpu(nt));
3019  si->last_mft_change_time = nt;
3020  modified = true;
3021  }
3022  nt = utc2ntfs(vi->i_atime);
3023  if (si->last_access_time != nt) {
3024  ntfs_debug("Updating atime for inode 0x%lx: old = 0x%llx, "
3025  "new = 0x%llx", vi->i_ino,
3026  (long long)sle64_to_cpu(si->last_access_time),
3027  (long long)sle64_to_cpu(nt));
3028  si->last_access_time = nt;
3029  modified = true;
3030  }
3031  /*
3032  * If we just modified the standard information attribute we need to
3033  * mark the mft record it is in dirty. We do this manually so that
3034  * mark_inode_dirty() is not called which would redirty the inode and
3035  * hence result in an infinite loop of trying to write the inode.
3036  * There is no need to mark the base inode nor the base mft record
3037  * dirty, since we are going to write this mft record below in any case
3038  * and the base mft record may actually not have been modified so it
3039  * might not need to be written out.
3040  * NOTE: It is not a problem when the inode for $MFT itself is being
3041  * written out as mark_ntfs_record_dirty() will only set I_DIRTY_PAGES
3042  * on the $MFT inode and hence ntfs_write_inode() will not be
3043  * re-invoked because of it which in turn is ok since the dirtied mft
3044  * record will be cleaned and written out to disk below, i.e. before
3045  * this function returns.
3046  */
3047  if (modified) {
3048  flush_dcache_mft_record_page(ctx->ntfs_ino);
3049  if (!NInoTestSetDirty(ctx->ntfs_ino))
3050  mark_ntfs_record_dirty(ctx->ntfs_ino->page,
3051  ctx->ntfs_ino->page_ofs);
3052  }
3054  /* Now the access times are updated, write the base mft record. */
3055  if (NInoDirty(ni))
3056  err = write_mft_record(ni, m, sync);
3057  /* Write all attached extent mft records. */
3058  mutex_lock(&ni->extent_lock);
3059  if (ni->nr_extents > 0) {
3060  ntfs_inode **extent_nis = ni->ext.extent_ntfs_inos;
3061  int i;
3062 
3063  ntfs_debug("Writing %i extent inodes.", ni->nr_extents);
3064  for (i = 0; i < ni->nr_extents; i++) {
3065  ntfs_inode *tni = extent_nis[i];
3066 
3067  if (NInoDirty(tni)) {
3068  MFT_RECORD *tm = map_mft_record(tni);
3069  int ret;
3070 
3071  if (IS_ERR(tm)) {
3072  if (!err || err == -ENOMEM)
3073  err = PTR_ERR(tm);
3074  continue;
3075  }
3076  ret = write_mft_record(tni, tm, sync);
3077  unmap_mft_record(tni);
3078  if (unlikely(ret)) {
3079  if (!err || err == -ENOMEM)
3080  err = ret;
3081  }
3082  }
3083  }
3084  }
3085  mutex_unlock(&ni->extent_lock);
3086  unmap_mft_record(ni);
3087  if (unlikely(err))
3088  goto err_out;
3089  ntfs_debug("Done.");
3090  return 0;
3091 unm_err_out:
3092  unmap_mft_record(ni);
3093 err_out:
3094  if (err == -ENOMEM) {
3095  ntfs_warning(vi->i_sb, "Not enough memory to write inode. "
3096  "Marking the inode dirty again, so the VFS "
3097  "retries later.");
3098  mark_inode_dirty(vi);
3099  } else {
3100  ntfs_error(vi->i_sb, "Failed (error %i): Run chkdsk.", -err);
3101  NVolSetErrors(ni->vol);
3102  }
3103  return err;
3104 }
3105 
3106 #endif /* NTFS_RW */