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