Lines Matching refs:vol

101 static bool parse_options(ntfs_volume *vol, char *opt)  in parse_options()  argument
206 ntfs_warning(vol->sb, "Ignoring obsolete option %s.", in parse_options()
210 ntfs_warning(vol->sb, "Option iocharset is " in parse_options()
221 ntfs_error(vol->sb, "NLS character set " in parse_options()
225 ntfs_error(vol->sb, "NLS character set %s not " in parse_options()
234 ntfs_warning(vol->sb, "Option utf8 is no longer " in parse_options()
248 ntfs_error(vol->sb, "Unrecognized mount option %s.", p); in parse_options()
261 ntfs_warning(vol->sb, "Sloppy option given. Ignoring " in parse_options()
266 ntfs_error(vol->sb, "Invalid errors option argument " in parse_options()
272 if (vol->nls_map && vol->nls_map != nls_map) { in parse_options()
273 ntfs_error(vol->sb, "Cannot change NLS character set " in parse_options()
278 vol->nls_map = nls_map; in parse_options()
280 if (!vol->nls_map) { in parse_options()
281 vol->nls_map = load_nls_default(); in parse_options()
282 if (!vol->nls_map) { in parse_options()
283 ntfs_error(vol->sb, "Failed to load default " in parse_options()
288 vol->nls_map->charset); in parse_options()
292 if (vol->mft_zone_multiplier && vol->mft_zone_multiplier != in parse_options()
294 ntfs_error(vol->sb, "Cannot change mft_zone_multiplier " in parse_options()
299 ntfs_error(vol->sb, "Invalid mft_zone_multiplier. " in parse_options()
303 vol->mft_zone_multiplier = mft_zone_multiplier; in parse_options()
305 if (!vol->mft_zone_multiplier) in parse_options()
306 vol->mft_zone_multiplier = 1; in parse_options()
308 vol->on_errors = on_errors; in parse_options()
309 if (!vol->on_errors || vol->on_errors == ON_ERRORS_RECOVER) in parse_options()
310 vol->on_errors |= ON_ERRORS_CONTINUE; in parse_options()
312 vol->uid = uid; in parse_options()
314 vol->gid = gid; in parse_options()
316 vol->fmask = fmask; in parse_options()
318 vol->dmask = dmask; in parse_options()
321 NVolSetShowSystemFiles(vol); in parse_options()
323 NVolClearShowSystemFiles(vol); in parse_options()
327 NVolSetCaseSensitive(vol); in parse_options()
329 NVolClearCaseSensitive(vol); in parse_options()
333 NVolClearSparseEnabled(vol); in parse_options()
335 if (!NVolSparseEnabled(vol) && in parse_options()
336 vol->major_ver && vol->major_ver < 3) in parse_options()
337 ntfs_warning(vol->sb, "Not enabling sparse " in parse_options()
340 "version 3.0).", vol->major_ver, in parse_options()
341 vol->minor_ver); in parse_options()
343 NVolSetSparseEnabled(vol); in parse_options()
348 ntfs_error(vol->sb, "The %s option requires an argument.", p); in parse_options()
351 ntfs_error(vol->sb, "The %s option requires a boolean argument.", p); in parse_options()
354 ntfs_error(vol->sb, "Invalid %s option argument: %s", p, ov); in parse_options()
375 static int ntfs_write_volume_flags(ntfs_volume *vol, const VOLUME_FLAGS flags) in ntfs_write_volume_flags() argument
377 ntfs_inode *ni = NTFS_I(vol->vol_ino); in ntfs_write_volume_flags()
384 le16_to_cpu(vol->vol_flags), le16_to_cpu(flags)); in ntfs_write_volume_flags()
385 if (vol->vol_flags == flags) in ntfs_write_volume_flags()
404 vol->vol_flags = vi->flags = flags; in ntfs_write_volume_flags()
417 ntfs_error(vol->sb, "Failed with error code %i.", -err); in ntfs_write_volume_flags()
430 static inline int ntfs_set_volume_flags(ntfs_volume *vol, VOLUME_FLAGS flags) in ntfs_set_volume_flags() argument
433 return ntfs_write_volume_flags(vol, vol->vol_flags | flags); in ntfs_set_volume_flags()
445 static inline int ntfs_clear_volume_flags(ntfs_volume *vol, VOLUME_FLAGS flags) in ntfs_clear_volume_flags() argument
448 flags = vol->vol_flags & cpu_to_le16(~le16_to_cpu(flags)); in ntfs_clear_volume_flags()
449 return ntfs_write_volume_flags(vol, flags); in ntfs_clear_volume_flags()
468 ntfs_volume *vol = NTFS_SB(sb); in ntfs_remount() local
494 if (NVolErrors(vol)) { in ntfs_remount()
499 if (vol->vol_flags & VOLUME_IS_DIRTY) { in ntfs_remount()
503 if (vol->vol_flags & VOLUME_MODIFIED_BY_CHKDSK) { in ntfs_remount()
508 if (vol->vol_flags & VOLUME_MUST_MOUNT_RO_MASK) { in ntfs_remount()
511 (unsigned)le16_to_cpu(vol->vol_flags), in ntfs_remount()
515 if (ntfs_set_volume_flags(vol, VOLUME_IS_DIRTY)) { in ntfs_remount()
524 if ((vol->major_ver > 1)) { in ntfs_remount()
525 if (ntfs_set_volume_flags(vol, VOLUME_MOUNTED_ON_NT4)) { in ntfs_remount()
528 NVolSetErrors(vol); in ntfs_remount()
533 if (!ntfs_empty_logfile(vol->logfile_ino)) { in ntfs_remount()
536 NVolSetErrors(vol); in ntfs_remount()
539 if (!ntfs_mark_quotas_out_of_date(vol)) { in ntfs_remount()
542 NVolSetErrors(vol); in ntfs_remount()
545 if (!ntfs_stamp_usnjrnl(vol)) { in ntfs_remount()
548 NVolSetErrors(vol); in ntfs_remount()
553 if (!NVolErrors(vol)) { in ntfs_remount()
554 if (ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY)) in ntfs_remount()
564 if (!parse_options(vol, opt)) in ntfs_remount()
766 static bool parse_ntfs_boot_sector(ntfs_volume *vol, const NTFS_BOOT_SECTOR *b) in parse_ntfs_boot_sector() argument
772 vol->sector_size = le16_to_cpu(b->bpb.bytes_per_sector); in parse_ntfs_boot_sector()
773 vol->sector_size_bits = ffs(vol->sector_size) - 1; in parse_ntfs_boot_sector()
774 ntfs_debug("vol->sector_size = %i (0x%x)", vol->sector_size, in parse_ntfs_boot_sector()
775 vol->sector_size); in parse_ntfs_boot_sector()
776 ntfs_debug("vol->sector_size_bits = %i (0x%x)", vol->sector_size_bits, in parse_ntfs_boot_sector()
777 vol->sector_size_bits); in parse_ntfs_boot_sector()
778 if (vol->sector_size < vol->sb->s_blocksize) { in parse_ntfs_boot_sector()
779 ntfs_error(vol->sb, "Sector size (%i) is smaller than the " in parse_ntfs_boot_sector()
781 "supported. Sorry.", vol->sector_size, in parse_ntfs_boot_sector()
782 vol->sb->s_blocksize); in parse_ntfs_boot_sector()
791 vol->cluster_size = vol->sector_size << sectors_per_cluster_bits; in parse_ntfs_boot_sector()
792 vol->cluster_size_mask = vol->cluster_size - 1; in parse_ntfs_boot_sector()
793 vol->cluster_size_bits = ffs(vol->cluster_size) - 1; in parse_ntfs_boot_sector()
794 ntfs_debug("vol->cluster_size = %i (0x%x)", vol->cluster_size, in parse_ntfs_boot_sector()
795 vol->cluster_size); in parse_ntfs_boot_sector()
796 ntfs_debug("vol->cluster_size_mask = 0x%x", vol->cluster_size_mask); in parse_ntfs_boot_sector()
797 ntfs_debug("vol->cluster_size_bits = %i", vol->cluster_size_bits); in parse_ntfs_boot_sector()
798 if (vol->cluster_size < vol->sector_size) { in parse_ntfs_boot_sector()
799 ntfs_error(vol->sb, "Cluster size (%i) is smaller than the " in parse_ntfs_boot_sector()
801 "Sorry.", vol->cluster_size, vol->sector_size); in parse_ntfs_boot_sector()
808 vol->mft_record_size = vol->cluster_size << in parse_ntfs_boot_sector()
816 vol->mft_record_size = 1 << -clusters_per_mft_record; in parse_ntfs_boot_sector()
817 vol->mft_record_size_mask = vol->mft_record_size - 1; in parse_ntfs_boot_sector()
818 vol->mft_record_size_bits = ffs(vol->mft_record_size) - 1; in parse_ntfs_boot_sector()
819 ntfs_debug("vol->mft_record_size = %i (0x%x)", vol->mft_record_size, in parse_ntfs_boot_sector()
820 vol->mft_record_size); in parse_ntfs_boot_sector()
822 vol->mft_record_size_mask); in parse_ntfs_boot_sector()
824 vol->mft_record_size_bits, vol->mft_record_size_bits); in parse_ntfs_boot_sector()
829 if (vol->mft_record_size > PAGE_CACHE_SIZE) { in parse_ntfs_boot_sector()
830 ntfs_error(vol->sb, "Mft record size (%i) exceeds the " in parse_ntfs_boot_sector()
833 vol->mft_record_size, PAGE_CACHE_SIZE); in parse_ntfs_boot_sector()
837 if (vol->mft_record_size < vol->sector_size) { in parse_ntfs_boot_sector()
838 ntfs_error(vol->sb, "Mft record size (%i) is smaller than the " in parse_ntfs_boot_sector()
840 "Sorry.", vol->mft_record_size, in parse_ntfs_boot_sector()
841 vol->sector_size); in parse_ntfs_boot_sector()
848 vol->index_record_size = vol->cluster_size << in parse_ntfs_boot_sector()
857 vol->index_record_size = 1 << -clusters_per_index_record; in parse_ntfs_boot_sector()
858 vol->index_record_size_mask = vol->index_record_size - 1; in parse_ntfs_boot_sector()
859 vol->index_record_size_bits = ffs(vol->index_record_size) - 1; in parse_ntfs_boot_sector()
861 vol->index_record_size, vol->index_record_size); in parse_ntfs_boot_sector()
863 vol->index_record_size_mask); in parse_ntfs_boot_sector()
865 vol->index_record_size_bits, in parse_ntfs_boot_sector()
866 vol->index_record_size_bits); in parse_ntfs_boot_sector()
868 if (vol->index_record_size < vol->sector_size) { in parse_ntfs_boot_sector()
869 ntfs_error(vol->sb, "Index record size (%i) is smaller than " in parse_ntfs_boot_sector()
871 "supported. Sorry.", vol->index_record_size, in parse_ntfs_boot_sector()
872 vol->sector_size); in parse_ntfs_boot_sector()
882 ntfs_error(vol->sb, "Cannot handle 64-bit clusters. Sorry."); in parse_ntfs_boot_sector()
885 vol->nr_clusters = ll; in parse_ntfs_boot_sector()
886 ntfs_debug("vol->nr_clusters = 0x%llx", (long long)vol->nr_clusters); in parse_ntfs_boot_sector()
893 if ((ll << vol->cluster_size_bits) >= (1ULL << 41)) { in parse_ntfs_boot_sector()
894 ntfs_error(vol->sb, "Volume size (%lluTiB) is too " in parse_ntfs_boot_sector()
898 vol->cluster_size_bits)); in parse_ntfs_boot_sector()
903 if (ll >= vol->nr_clusters) { in parse_ntfs_boot_sector()
904 ntfs_error(vol->sb, "MFT LCN (%lli, 0x%llx) is beyond end of " in parse_ntfs_boot_sector()
909 vol->mft_lcn = ll; in parse_ntfs_boot_sector()
910 ntfs_debug("vol->mft_lcn = 0x%llx", (long long)vol->mft_lcn); in parse_ntfs_boot_sector()
912 if (ll >= vol->nr_clusters) { in parse_ntfs_boot_sector()
913 ntfs_error(vol->sb, "MFTMirr LCN (%lli, 0x%llx) is beyond end " in parse_ntfs_boot_sector()
918 vol->mftmirr_lcn = ll; in parse_ntfs_boot_sector()
919 ntfs_debug("vol->mftmirr_lcn = 0x%llx", (long long)vol->mftmirr_lcn); in parse_ntfs_boot_sector()
929 if (vol->cluster_size <= (4 << vol->mft_record_size_bits)) in parse_ntfs_boot_sector()
930 vol->mftmirr_size = 4; in parse_ntfs_boot_sector()
932 vol->mftmirr_size = vol->cluster_size >> in parse_ntfs_boot_sector()
933 vol->mft_record_size_bits; in parse_ntfs_boot_sector()
934 ntfs_debug("vol->mftmirr_size = %i", vol->mftmirr_size); in parse_ntfs_boot_sector()
936 vol->serial_no = le64_to_cpu(b->volume_serial_number); in parse_ntfs_boot_sector()
938 (unsigned long long)vol->serial_no); in parse_ntfs_boot_sector()
948 static void ntfs_setup_allocators(ntfs_volume *vol) in ntfs_setup_allocators() argument
955 vol->mft_zone_multiplier); in ntfs_setup_allocators()
958 mft_zone_size = vol->nr_clusters; in ntfs_setup_allocators()
959 switch (vol->mft_zone_multiplier) { /* % of volume size in clusters */ in ntfs_setup_allocators()
976 vol->mft_zone_start = vol->mft_zone_pos = vol->mft_lcn; in ntfs_setup_allocators()
978 (unsigned long long)vol->mft_zone_pos); in ntfs_setup_allocators()
988 mft_lcn = (8192 + 2 * vol->cluster_size - 1) / vol->cluster_size; in ntfs_setup_allocators()
989 if (mft_lcn * vol->cluster_size < 16 * 1024) in ntfs_setup_allocators()
990 mft_lcn = (16 * 1024 + vol->cluster_size - 1) / in ntfs_setup_allocators()
991 vol->cluster_size; in ntfs_setup_allocators()
992 if (vol->mft_zone_start <= mft_lcn) in ntfs_setup_allocators()
993 vol->mft_zone_start = 0; in ntfs_setup_allocators()
995 (unsigned long long)vol->mft_zone_start); in ntfs_setup_allocators()
1001 vol->mft_zone_end = vol->mft_lcn + mft_zone_size; in ntfs_setup_allocators()
1002 while (vol->mft_zone_end >= vol->nr_clusters) { in ntfs_setup_allocators()
1004 vol->mft_zone_end = vol->mft_lcn + mft_zone_size; in ntfs_setup_allocators()
1007 (unsigned long long)vol->mft_zone_end); in ntfs_setup_allocators()
1012 vol->data1_zone_pos = vol->mft_zone_end; in ntfs_setup_allocators()
1014 (unsigned long long)vol->data1_zone_pos); in ntfs_setup_allocators()
1015 vol->data2_zone_pos = 0; in ntfs_setup_allocators()
1017 (unsigned long long)vol->data2_zone_pos); in ntfs_setup_allocators()
1020 vol->mft_data_pos = 24; in ntfs_setup_allocators()
1022 (unsigned long long)vol->mft_data_pos); in ntfs_setup_allocators()
1034 static bool load_and_init_mft_mirror(ntfs_volume *vol) in load_and_init_mft_mirror() argument
1041 tmp_ino = ntfs_iget(vol->sb, FILE_MFTMirr); in load_and_init_mft_mirror()
1070 tmp_ni->itype.index.block_size = vol->mft_record_size; in load_and_init_mft_mirror()
1071 tmp_ni->itype.index.block_size_bits = vol->mft_record_size_bits; in load_and_init_mft_mirror()
1072 vol->mftmirr_ino = tmp_ino; in load_and_init_mft_mirror()
1087 static bool check_mft_mirror(ntfs_volume *vol) in check_mft_mirror() argument
1089 struct super_block *sb = vol->sb; in check_mft_mirror()
1099 mrecs_per_page = PAGE_CACHE_SIZE / vol->mft_record_size; in check_mft_mirror()
1101 BUG_ON(!vol->mftmirr_size); in check_mft_mirror()
1115 mft_page = ntfs_map_page(vol->mft_ino->i_mapping, in check_mft_mirror()
1123 mirr_page = ntfs_map_page(vol->mftmirr_ino->i_mapping, in check_mft_mirror()
1158 bytes > vol->mft_record_size || in check_mft_mirror()
1162 bytes > vol->mft_record_size || in check_mft_mirror()
1164 bytes = vol->mft_record_size; in check_mft_mirror()
1172 kmft += vol->mft_record_size; in check_mft_mirror()
1173 kmirr += vol->mft_record_size; in check_mft_mirror()
1174 } while (++i < vol->mftmirr_size); in check_mft_mirror()
1181 rl2[0].lcn = vol->mftmirr_lcn; in check_mft_mirror()
1182 rl2[0].length = (vol->mftmirr_size * vol->mft_record_size + in check_mft_mirror()
1183 vol->cluster_size - 1) / vol->cluster_size; in check_mft_mirror()
1191 mirr_ni = NTFS_I(vol->mftmirr_ino); in check_mft_mirror()
1216 static bool load_and_check_logfile(ntfs_volume *vol, in load_and_check_logfile() argument
1222 tmp_ino = ntfs_iget(vol->sb, FILE_LogFile); in load_and_check_logfile()
1235 vol->logfile_ino = tmp_ino; in load_and_check_logfile()
1266 static int check_windows_hibernation_status(ntfs_volume *vol) in check_windows_hibernation_status() argument
1287 mutex_lock(&vol->root_ino->i_mutex); in check_windows_hibernation_status()
1288 mref = ntfs_lookup_inode_by_name(NTFS_I(vol->root_ino), hiberfil, 12, in check_windows_hibernation_status()
1290 mutex_unlock(&vol->root_ino->i_mutex); in check_windows_hibernation_status()
1300 ntfs_error(vol->sb, "Failed to find inode number for " in check_windows_hibernation_status()
1307 vi = ntfs_iget(vol->sb, MREF(mref)); in check_windows_hibernation_status()
1311 ntfs_error(vol->sb, "Failed to load hiberfil.sys."); in check_windows_hibernation_status()
1322 ntfs_error(vol->sb, "Failed to read from hiberfil.sys."); in check_windows_hibernation_status()
1363 static bool load_and_init_quota(ntfs_volume *vol) in load_and_init_quota() argument
1380 mutex_lock(&vol->extend_ino->i_mutex); in load_and_init_quota()
1381 mref = ntfs_lookup_inode_by_name(NTFS_I(vol->extend_ino), Quota, 6, in load_and_init_quota()
1383 mutex_unlock(&vol->extend_ino->i_mutex); in load_and_init_quota()
1396 NVolSetQuotaOutOfDate(vol); in load_and_init_quota()
1400 ntfs_error(vol->sb, "Failed to find inode number for $Quota."); in load_and_init_quota()
1406 tmp_ino = ntfs_iget(vol->sb, MREF(mref)); in load_and_init_quota()
1410 ntfs_error(vol->sb, "Failed to load $Quota."); in load_and_init_quota()
1413 vol->quota_ino = tmp_ino; in load_and_init_quota()
1415 tmp_ino = ntfs_index_iget(vol->quota_ino, Q, 2); in load_and_init_quota()
1417 ntfs_error(vol->sb, "Failed to load $Quota/$Q index."); in load_and_init_quota()
1420 vol->quota_q_ino = tmp_ino; in load_and_init_quota()
1439 static bool load_and_init_usnjrnl(ntfs_volume *vol) in load_and_init_usnjrnl() argument
1463 mutex_lock(&vol->extend_ino->i_mutex); in load_and_init_usnjrnl()
1464 mref = ntfs_lookup_inode_by_name(NTFS_I(vol->extend_ino), UsnJrnl, 8, in load_and_init_usnjrnl()
1466 mutex_unlock(&vol->extend_ino->i_mutex); in load_and_init_usnjrnl()
1480 NVolSetUsnJrnlStamped(vol); in load_and_init_usnjrnl()
1484 ntfs_error(vol->sb, "Failed to find inode number for " in load_and_init_usnjrnl()
1491 tmp_ino = ntfs_iget(vol->sb, MREF(mref)); in load_and_init_usnjrnl()
1495 ntfs_error(vol->sb, "Failed to load $UsnJrnl."); in load_and_init_usnjrnl()
1498 vol->usnjrnl_ino = tmp_ino; in load_and_init_usnjrnl()
1503 if (unlikely(vol->vol_flags & VOLUME_DELETE_USN_UNDERWAY)) { in load_and_init_usnjrnl()
1510 tmp_ino = ntfs_attr_iget(vol->usnjrnl_ino, AT_DATA, Max, 4); in load_and_init_usnjrnl()
1512 ntfs_error(vol->sb, "Failed to load $UsnJrnl/$DATA/$Max " in load_and_init_usnjrnl()
1516 vol->usnjrnl_max_ino = tmp_ino; in load_and_init_usnjrnl()
1518 ntfs_error(vol->sb, "Found corrupt $UsnJrnl/$DATA/$Max " in load_and_init_usnjrnl()
1525 tmp_ino = ntfs_attr_iget(vol->usnjrnl_ino, AT_DATA, J, 2); in load_and_init_usnjrnl()
1527 ntfs_error(vol->sb, "Failed to load $UsnJrnl/$DATA/$J " in load_and_init_usnjrnl()
1531 vol->usnjrnl_j_ino = tmp_ino; in load_and_init_usnjrnl()
1533 tmp_ni = NTFS_I(vol->usnjrnl_j_ino); in load_and_init_usnjrnl()
1535 ntfs_error(vol->sb, "$UsnJrnl/$DATA/$J attribute is resident " in load_and_init_usnjrnl()
1540 page = ntfs_map_page(vol->usnjrnl_max_ino->i_mapping, 0); in load_and_init_usnjrnl()
1542 ntfs_error(vol->sb, "Failed to read from $UsnJrnl/$DATA/$Max " in load_and_init_usnjrnl()
1550 ntfs_error(vol->sb, "Allocation delta (0x%llx) exceeds " in load_and_init_usnjrnl()
1562 i_size_read(vol->usnjrnl_j_ino))) { in load_and_init_usnjrnl()
1564 i_size_read(vol->usnjrnl_j_ino))) { in load_and_init_usnjrnl()
1573 ntfs_error(vol->sb, "$UsnJrnl has lowest valid usn (0x%llx) " in load_and_init_usnjrnl()
1577 i_size_read(vol->usnjrnl_j_ino)); in load_and_init_usnjrnl()
1592 static bool load_and_init_attrdef(ntfs_volume *vol) in load_and_init_attrdef() argument
1595 struct super_block *sb = vol->sb; in load_and_init_attrdef()
1614 vol->attrdef = (ATTR_DEF*)ntfs_malloc_nofs(i_size); in load_and_init_attrdef()
1615 if (!vol->attrdef) in load_and_init_attrdef()
1626 memcpy((u8*)vol->attrdef + (index++ << PAGE_CACHE_SHIFT), in load_and_init_attrdef()
1635 vol->attrdef_size = i_size; in load_and_init_attrdef()
1640 ntfs_free(vol->attrdef); in load_and_init_attrdef()
1641 vol->attrdef = NULL; in load_and_init_attrdef()
1657 static bool load_and_init_upcase(ntfs_volume *vol) in load_and_init_upcase() argument
1660 struct super_block *sb = vol->sb; in load_and_init_upcase()
1683 vol->upcase = (ntfschar*)ntfs_malloc_nofs(i_size); in load_and_init_upcase()
1684 if (!vol->upcase) in load_and_init_upcase()
1695 memcpy((char*)vol->upcase + (index++ << PAGE_CACHE_SHIFT), in load_and_init_upcase()
1704 vol->upcase_len = i_size >> UCHAR_T_SIZE_BITS; in load_and_init_upcase()
1716 if (max > vol->upcase_len) in load_and_init_upcase()
1717 max = vol->upcase_len; in load_and_init_upcase()
1719 if (vol->upcase[i] != default_upcase[i]) in load_and_init_upcase()
1722 ntfs_free(vol->upcase); in load_and_init_upcase()
1723 vol->upcase = default_upcase; in load_and_init_upcase()
1724 vol->upcase_len = max; in load_and_init_upcase()
1737 ntfs_free(vol->upcase); in load_and_init_upcase()
1738 vol->upcase = NULL; in load_and_init_upcase()
1742 vol->upcase = default_upcase; in load_and_init_upcase()
1743 vol->upcase_len = default_upcase_len; in load_and_init_upcase()
1772 static bool load_system_files(ntfs_volume *vol) in load_system_files() argument
1774 struct super_block *sb = vol->sb; in load_system_files()
1786 if (!load_and_init_mft_mirror(vol) || !check_mft_mirror(vol)) { in load_system_files()
1793 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
1798 !vol->mftmirr_ino ? es1 : es2, in load_system_files()
1804 !vol->mftmirr_ino ? es1 : es2, es3); in load_system_files()
1808 !vol->mftmirr_ino ? es1 : es2, es3); in load_system_files()
1810 NVolSetErrors(vol); in load_system_files()
1814 vol->mftbmp_ino = ntfs_attr_iget(vol->mft_ino, AT_BITMAP, NULL, 0); in load_system_files()
1815 if (IS_ERR(vol->mftbmp_ino)) { in load_system_files()
1819 lockdep_set_class(&NTFS_I(vol->mftbmp_ino)->runlist.lock, in load_system_files()
1821 lockdep_set_class(&NTFS_I(vol->mftbmp_ino)->mrec_lock, in load_system_files()
1824 if (!load_and_init_upcase(vol)) in load_system_files()
1831 if (!load_and_init_attrdef(vol)) in load_system_files()
1839 vol->lcnbmp_ino = ntfs_iget(sb, FILE_Bitmap); in load_system_files()
1840 if (IS_ERR(vol->lcnbmp_ino) || is_bad_inode(vol->lcnbmp_ino)) { in load_system_files()
1841 if (!IS_ERR(vol->lcnbmp_ino)) in load_system_files()
1842 iput(vol->lcnbmp_ino); in load_system_files()
1845 lockdep_set_class(&NTFS_I(vol->lcnbmp_ino)->runlist.lock, in load_system_files()
1847 lockdep_set_class(&NTFS_I(vol->lcnbmp_ino)->mrec_lock, in load_system_files()
1850 NInoSetSparseDisabled(NTFS_I(vol->lcnbmp_ino)); in load_system_files()
1851 if ((vol->nr_clusters + 7) >> 3 > i_size_read(vol->lcnbmp_ino)) { in load_system_files()
1852 iput(vol->lcnbmp_ino); in load_system_files()
1861 vol->vol_ino = ntfs_iget(sb, FILE_Volume); in load_system_files()
1862 if (IS_ERR(vol->vol_ino) || is_bad_inode(vol->vol_ino)) { in load_system_files()
1863 if (!IS_ERR(vol->vol_ino)) in load_system_files()
1864 iput(vol->vol_ino); in load_system_files()
1869 m = map_mft_record(NTFS_I(vol->vol_ino)); in load_system_files()
1872 iput(vol->vol_ino); in load_system_files()
1875 if (!(ctx = ntfs_attr_get_search_ctx(NTFS_I(vol->vol_ino), m))) { in load_system_files()
1884 unmap_mft_record(NTFS_I(vol->vol_ino)); in load_system_files()
1895 vol->vol_flags = vi->flags; in load_system_files()
1896 vol->major_ver = vi->major_ver; in load_system_files()
1897 vol->minor_ver = vi->minor_ver; in load_system_files()
1899 unmap_mft_record(NTFS_I(vol->vol_ino)); in load_system_files()
1900 pr_info("volume version %i.%i.\n", vol->major_ver, in load_system_files()
1901 vol->minor_ver); in load_system_files()
1902 if (vol->major_ver < 3 && NVolSparseEnabled(vol)) { in load_system_files()
1903 ntfs_warning(vol->sb, "Disabling sparse support due to NTFS " in load_system_files()
1905 "3.0).", vol->major_ver, vol->minor_ver); in load_system_files()
1906 NVolClearSparseEnabled(vol); in load_system_files()
1910 if (vol->vol_flags & VOLUME_MUST_MOUNT_RO_MASK) { in load_system_files()
1919 if (vol->vol_flags & VOLUME_IS_DIRTY) in load_system_files()
1921 else if (vol->vol_flags & VOLUME_MODIFIED_BY_CHKDSK) { in load_system_files()
1928 (unsigned)le16_to_cpu(vol->vol_flags)); in load_system_files()
1932 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
1955 if (!load_and_check_logfile(vol, &rp) || in load_system_files()
1956 !ntfs_is_logfile_clean(vol->logfile_ino, rp)) { in load_system_files()
1962 es1 = !vol->logfile_ino ? es1a : es1b; in load_system_files()
1965 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
1971 if (vol->logfile_ino) { in load_system_files()
1983 NVolSetErrors(vol); in load_system_files()
1988 vol->root_ino = ntfs_iget(sb, FILE_root); in load_system_files()
1989 if (IS_ERR(vol->root_ino) || is_bad_inode(vol->root_ino)) { in load_system_files()
1990 if (!IS_ERR(vol->root_ino)) in load_system_files()
1991 iput(vol->root_ino); in load_system_files()
2003 err = check_windows_hibernation_status(vol); in load_system_files()
2014 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
2028 NVolSetErrors(vol); in load_system_files()
2032 ntfs_set_volume_flags(vol, VOLUME_IS_DIRTY)) { in load_system_files()
2038 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
2059 if (!(sb->s_flags & MS_RDONLY) && (vol->major_ver > 1) && in load_system_files()
2060 ntfs_set_volume_flags(vol, VOLUME_MOUNTED_ON_NT4)) { in load_system_files()
2065 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
2074 NVolSetErrors(vol); in load_system_files()
2079 !ntfs_empty_logfile(vol->logfile_ino)) { in load_system_files()
2084 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
2093 NVolSetErrors(vol); in load_system_files()
2097 if (unlikely(vol->major_ver < 3)) in load_system_files()
2101 vol->secure_ino = ntfs_iget(sb, FILE_Secure); in load_system_files()
2102 if (IS_ERR(vol->secure_ino) || is_bad_inode(vol->secure_ino)) { in load_system_files()
2103 if (!IS_ERR(vol->secure_ino)) in load_system_files()
2104 iput(vol->secure_ino); in load_system_files()
2110 vol->extend_ino = ntfs_iget(sb, FILE_Extend); in load_system_files()
2111 if (IS_ERR(vol->extend_ino) || is_bad_inode(vol->extend_ino)) { in load_system_files()
2112 if (!IS_ERR(vol->extend_ino)) in load_system_files()
2113 iput(vol->extend_ino); in load_system_files()
2119 if (!load_and_init_quota(vol)) { in load_system_files()
2125 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
2139 NVolSetErrors(vol); in load_system_files()
2143 !ntfs_mark_quotas_out_of_date(vol)) { in load_system_files()
2148 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
2157 NVolSetErrors(vol); in load_system_files()
2163 if (!load_and_init_usnjrnl(vol)) { in load_system_files()
2169 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
2183 NVolSetErrors(vol); in load_system_files()
2186 if (!(sb->s_flags & MS_RDONLY) && !ntfs_stamp_usnjrnl(vol)) { in load_system_files()
2192 if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO | in load_system_files()
2201 NVolSetErrors(vol); in load_system_files()
2207 if (vol->usnjrnl_j_ino) in load_system_files()
2208 iput(vol->usnjrnl_j_ino); in load_system_files()
2209 if (vol->usnjrnl_max_ino) in load_system_files()
2210 iput(vol->usnjrnl_max_ino); in load_system_files()
2211 if (vol->usnjrnl_ino) in load_system_files()
2212 iput(vol->usnjrnl_ino); in load_system_files()
2214 if (vol->quota_q_ino) in load_system_files()
2215 iput(vol->quota_q_ino); in load_system_files()
2216 if (vol->quota_ino) in load_system_files()
2217 iput(vol->quota_ino); in load_system_files()
2218 iput(vol->extend_ino); in load_system_files()
2221 iput(vol->secure_ino); in load_system_files()
2223 iput(vol->root_ino); in load_system_files()
2226 if (vol->logfile_ino) in load_system_files()
2227 iput(vol->logfile_ino); in load_system_files()
2230 iput(vol->vol_ino); in load_system_files()
2232 iput(vol->lcnbmp_ino); in load_system_files()
2234 vol->attrdef_size = 0; in load_system_files()
2235 if (vol->attrdef) { in load_system_files()
2236 ntfs_free(vol->attrdef); in load_system_files()
2237 vol->attrdef = NULL; in load_system_files()
2242 vol->upcase_len = 0; in load_system_files()
2244 if (vol->upcase == default_upcase) { in load_system_files()
2246 vol->upcase = NULL; in load_system_files()
2249 if (vol->upcase) { in load_system_files()
2250 ntfs_free(vol->upcase); in load_system_files()
2251 vol->upcase = NULL; in load_system_files()
2254 iput(vol->mftbmp_ino); in load_system_files()
2257 if (vol->mftmirr_ino) in load_system_files()
2258 iput(vol->mftmirr_ino); in load_system_files()
2274 ntfs_volume *vol = NTFS_SB(sb); in ntfs_put_super() local
2283 ntfs_commit_inode(vol->vol_ino); in ntfs_put_super()
2286 if (vol->major_ver >= 3) { in ntfs_put_super()
2287 if (vol->usnjrnl_j_ino) in ntfs_put_super()
2288 ntfs_commit_inode(vol->usnjrnl_j_ino); in ntfs_put_super()
2289 if (vol->usnjrnl_max_ino) in ntfs_put_super()
2290 ntfs_commit_inode(vol->usnjrnl_max_ino); in ntfs_put_super()
2291 if (vol->usnjrnl_ino) in ntfs_put_super()
2292 ntfs_commit_inode(vol->usnjrnl_ino); in ntfs_put_super()
2293 if (vol->quota_q_ino) in ntfs_put_super()
2294 ntfs_commit_inode(vol->quota_q_ino); in ntfs_put_super()
2295 if (vol->quota_ino) in ntfs_put_super()
2296 ntfs_commit_inode(vol->quota_ino); in ntfs_put_super()
2297 if (vol->extend_ino) in ntfs_put_super()
2298 ntfs_commit_inode(vol->extend_ino); in ntfs_put_super()
2299 if (vol->secure_ino) in ntfs_put_super()
2300 ntfs_commit_inode(vol->secure_ino); in ntfs_put_super()
2303 ntfs_commit_inode(vol->root_ino); in ntfs_put_super()
2305 down_write(&vol->lcnbmp_lock); in ntfs_put_super()
2306 ntfs_commit_inode(vol->lcnbmp_ino); in ntfs_put_super()
2307 up_write(&vol->lcnbmp_lock); in ntfs_put_super()
2309 down_write(&vol->mftbmp_lock); in ntfs_put_super()
2310 ntfs_commit_inode(vol->mftbmp_ino); in ntfs_put_super()
2311 up_write(&vol->mftbmp_lock); in ntfs_put_super()
2313 if (vol->logfile_ino) in ntfs_put_super()
2314 ntfs_commit_inode(vol->logfile_ino); in ntfs_put_super()
2316 if (vol->mftmirr_ino) in ntfs_put_super()
2317 ntfs_commit_inode(vol->mftmirr_ino); in ntfs_put_super()
2318 ntfs_commit_inode(vol->mft_ino); in ntfs_put_super()
2325 if (!NVolErrors(vol)) { in ntfs_put_super()
2326 if (ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY)) in ntfs_put_super()
2330 ntfs_commit_inode(vol->vol_ino); in ntfs_put_super()
2331 ntfs_commit_inode(vol->root_ino); in ntfs_put_super()
2332 if (vol->mftmirr_ino) in ntfs_put_super()
2333 ntfs_commit_inode(vol->mftmirr_ino); in ntfs_put_super()
2334 ntfs_commit_inode(vol->mft_ino); in ntfs_put_super()
2342 iput(vol->vol_ino); in ntfs_put_super()
2343 vol->vol_ino = NULL; in ntfs_put_super()
2346 if (vol->major_ver >= 3) { in ntfs_put_super()
2348 if (vol->usnjrnl_j_ino) { in ntfs_put_super()
2349 iput(vol->usnjrnl_j_ino); in ntfs_put_super()
2350 vol->usnjrnl_j_ino = NULL; in ntfs_put_super()
2352 if (vol->usnjrnl_max_ino) { in ntfs_put_super()
2353 iput(vol->usnjrnl_max_ino); in ntfs_put_super()
2354 vol->usnjrnl_max_ino = NULL; in ntfs_put_super()
2356 if (vol->usnjrnl_ino) { in ntfs_put_super()
2357 iput(vol->usnjrnl_ino); in ntfs_put_super()
2358 vol->usnjrnl_ino = NULL; in ntfs_put_super()
2360 if (vol->quota_q_ino) { in ntfs_put_super()
2361 iput(vol->quota_q_ino); in ntfs_put_super()
2362 vol->quota_q_ino = NULL; in ntfs_put_super()
2364 if (vol->quota_ino) { in ntfs_put_super()
2365 iput(vol->quota_ino); in ntfs_put_super()
2366 vol->quota_ino = NULL; in ntfs_put_super()
2369 if (vol->extend_ino) { in ntfs_put_super()
2370 iput(vol->extend_ino); in ntfs_put_super()
2371 vol->extend_ino = NULL; in ntfs_put_super()
2373 if (vol->secure_ino) { in ntfs_put_super()
2374 iput(vol->secure_ino); in ntfs_put_super()
2375 vol->secure_ino = NULL; in ntfs_put_super()
2379 iput(vol->root_ino); in ntfs_put_super()
2380 vol->root_ino = NULL; in ntfs_put_super()
2382 down_write(&vol->lcnbmp_lock); in ntfs_put_super()
2383 iput(vol->lcnbmp_ino); in ntfs_put_super()
2384 vol->lcnbmp_ino = NULL; in ntfs_put_super()
2385 up_write(&vol->lcnbmp_lock); in ntfs_put_super()
2387 down_write(&vol->mftbmp_lock); in ntfs_put_super()
2388 iput(vol->mftbmp_ino); in ntfs_put_super()
2389 vol->mftbmp_ino = NULL; in ntfs_put_super()
2390 up_write(&vol->mftbmp_lock); in ntfs_put_super()
2393 if (vol->logfile_ino) { in ntfs_put_super()
2394 iput(vol->logfile_ino); in ntfs_put_super()
2395 vol->logfile_ino = NULL; in ntfs_put_super()
2397 if (vol->mftmirr_ino) { in ntfs_put_super()
2399 ntfs_commit_inode(vol->mftmirr_ino); in ntfs_put_super()
2400 ntfs_commit_inode(vol->mft_ino); in ntfs_put_super()
2401 iput(vol->mftmirr_ino); in ntfs_put_super()
2402 vol->mftmirr_ino = NULL; in ntfs_put_super()
2409 ntfs_commit_inode(vol->mft_ino); in ntfs_put_super()
2410 write_inode_now(vol->mft_ino, 1); in ntfs_put_super()
2413 iput(vol->mft_ino); in ntfs_put_super()
2414 vol->mft_ino = NULL; in ntfs_put_super()
2417 vol->attrdef_size = 0; in ntfs_put_super()
2418 if (vol->attrdef) { in ntfs_put_super()
2419 ntfs_free(vol->attrdef); in ntfs_put_super()
2420 vol->attrdef = NULL; in ntfs_put_super()
2422 vol->upcase_len = 0; in ntfs_put_super()
2428 if (vol->upcase == default_upcase) { in ntfs_put_super()
2430 vol->upcase = NULL; in ntfs_put_super()
2436 if (vol->cluster_size <= 4096 && !--ntfs_nr_compression_users) in ntfs_put_super()
2439 if (vol->upcase) { in ntfs_put_super()
2440 ntfs_free(vol->upcase); in ntfs_put_super()
2441 vol->upcase = NULL; in ntfs_put_super()
2444 unload_nls(vol->nls_map); in ntfs_put_super()
2447 kfree(vol); in ntfs_put_super()
2469 static s64 get_nr_free_clusters(ntfs_volume *vol) in get_nr_free_clusters() argument
2471 s64 nr_free = vol->nr_clusters; in get_nr_free_clusters()
2472 struct address_space *mapping = vol->lcnbmp_ino->i_mapping; in get_nr_free_clusters()
2478 down_read(&vol->lcnbmp_lock); in get_nr_free_clusters()
2484 max_index = (((vol->nr_clusters + 7) >> 3) + PAGE_CACHE_SIZE - 1) >> in get_nr_free_clusters()
2522 if (vol->nr_clusters & 63) in get_nr_free_clusters()
2523 nr_free += 64 - (vol->nr_clusters & 63); in get_nr_free_clusters()
2524 up_read(&vol->lcnbmp_lock); in get_nr_free_clusters()
2549 static unsigned long __get_nr_free_mft_records(ntfs_volume *vol, in __get_nr_free_mft_records() argument
2552 struct address_space *mapping = vol->mftbmp_ino->i_mapping; in __get_nr_free_mft_records()
2619 ntfs_volume *vol = NTFS_SB(sb); in ntfs_statfs() local
2620 ntfs_inode *mft_ni = NTFS_I(vol->mft_ino); in ntfs_statfs()
2634 sfs->f_blocks = vol->nr_clusters << vol->cluster_size_bits >> in ntfs_statfs()
2637 size = get_nr_free_clusters(vol) << vol->cluster_size_bits >> in ntfs_statfs()
2644 down_read(&vol->mftbmp_lock); in ntfs_statfs()
2646 size = i_size_read(vol->mft_ino) >> vol->mft_record_size_bits; in ntfs_statfs()
2652 max_index = ((((mft_ni->initialized_size >> vol->mft_record_size_bits) in ntfs_statfs()
2658 sfs->f_ffree = __get_nr_free_mft_records(vol, size, max_index); in ntfs_statfs()
2659 up_read(&vol->mftbmp_lock); in ntfs_statfs()
2670 sfs->f_fsid.val[0] = vol->serial_no & 0xffffffff; in ntfs_statfs()
2671 sfs->f_fsid.val[1] = (vol->serial_no >> 32) & 0xffffffff; in ntfs_statfs()
2723 ntfs_volume *vol; in ntfs_fill_super() local
2745 vol = NTFS_SB(sb); in ntfs_fill_super()
2746 if (!vol) { in ntfs_fill_super()
2754 *vol = (ntfs_volume) { in ntfs_fill_super()
2765 init_rwsem(&vol->mftbmp_lock); in ntfs_fill_super()
2766 init_rwsem(&vol->lcnbmp_lock); in ntfs_fill_super()
2769 NVolSetSparseEnabled(vol); in ntfs_fill_super()
2772 if (!parse_options(vol, (char*)opt)) in ntfs_fill_super()
2805 vol->nr_blocks = i_size_read(sb->s_bdev->bd_inode) >> in ntfs_fill_super()
2817 result = parse_ntfs_boot_sector(vol, (NTFS_BOOT_SECTOR*)bh->b_data); in ntfs_fill_super()
2834 if (vol->sector_size > blocksize) { in ntfs_fill_super()
2835 blocksize = sb_set_blocksize(sb, vol->sector_size); in ntfs_fill_super()
2836 if (blocksize != vol->sector_size) { in ntfs_fill_super()
2840 vol->sector_size); in ntfs_fill_super()
2844 vol->nr_blocks = i_size_read(sb->s_bdev->bd_inode) >> in ntfs_fill_super()
2851 ntfs_setup_allocators(vol); in ntfs_fill_super()
2891 if (vol->cluster_size <= 4096 && !ntfs_nr_compression_users++) { in ntfs_fill_super()
2918 if (!load_system_files(vol)) { in ntfs_fill_super()
2924 ihold(vol->root_ino); in ntfs_fill_super()
2925 if ((sb->s_root = d_make_root(vol->root_ino))) { in ntfs_fill_super()
2943 iput(vol->vol_ino); in ntfs_fill_super()
2944 vol->vol_ino = NULL; in ntfs_fill_super()
2946 if (vol->major_ver >= 3) { in ntfs_fill_super()
2948 if (vol->usnjrnl_j_ino) { in ntfs_fill_super()
2949 iput(vol->usnjrnl_j_ino); in ntfs_fill_super()
2950 vol->usnjrnl_j_ino = NULL; in ntfs_fill_super()
2952 if (vol->usnjrnl_max_ino) { in ntfs_fill_super()
2953 iput(vol->usnjrnl_max_ino); in ntfs_fill_super()
2954 vol->usnjrnl_max_ino = NULL; in ntfs_fill_super()
2956 if (vol->usnjrnl_ino) { in ntfs_fill_super()
2957 iput(vol->usnjrnl_ino); in ntfs_fill_super()
2958 vol->usnjrnl_ino = NULL; in ntfs_fill_super()
2960 if (vol->quota_q_ino) { in ntfs_fill_super()
2961 iput(vol->quota_q_ino); in ntfs_fill_super()
2962 vol->quota_q_ino = NULL; in ntfs_fill_super()
2964 if (vol->quota_ino) { in ntfs_fill_super()
2965 iput(vol->quota_ino); in ntfs_fill_super()
2966 vol->quota_ino = NULL; in ntfs_fill_super()
2969 if (vol->extend_ino) { in ntfs_fill_super()
2970 iput(vol->extend_ino); in ntfs_fill_super()
2971 vol->extend_ino = NULL; in ntfs_fill_super()
2973 if (vol->secure_ino) { in ntfs_fill_super()
2974 iput(vol->secure_ino); in ntfs_fill_super()
2975 vol->secure_ino = NULL; in ntfs_fill_super()
2978 iput(vol->root_ino); in ntfs_fill_super()
2979 vol->root_ino = NULL; in ntfs_fill_super()
2980 iput(vol->lcnbmp_ino); in ntfs_fill_super()
2981 vol->lcnbmp_ino = NULL; in ntfs_fill_super()
2982 iput(vol->mftbmp_ino); in ntfs_fill_super()
2983 vol->mftbmp_ino = NULL; in ntfs_fill_super()
2985 if (vol->logfile_ino) { in ntfs_fill_super()
2986 iput(vol->logfile_ino); in ntfs_fill_super()
2987 vol->logfile_ino = NULL; in ntfs_fill_super()
2989 if (vol->mftmirr_ino) { in ntfs_fill_super()
2990 iput(vol->mftmirr_ino); in ntfs_fill_super()
2991 vol->mftmirr_ino = NULL; in ntfs_fill_super()
2995 vol->attrdef_size = 0; in ntfs_fill_super()
2996 if (vol->attrdef) { in ntfs_fill_super()
2997 ntfs_free(vol->attrdef); in ntfs_fill_super()
2998 vol->attrdef = NULL; in ntfs_fill_super()
3000 vol->upcase_len = 0; in ntfs_fill_super()
3002 if (vol->upcase == default_upcase) { in ntfs_fill_super()
3004 vol->upcase = NULL; in ntfs_fill_super()
3007 if (vol->upcase) { in ntfs_fill_super()
3008 ntfs_free(vol->upcase); in ntfs_fill_super()
3009 vol->upcase = NULL; in ntfs_fill_super()
3011 if (vol->nls_map) { in ntfs_fill_super()
3012 unload_nls(vol->nls_map); in ntfs_fill_super()
3013 vol->nls_map = NULL; in ntfs_fill_super()
3026 if (vol->cluster_size <= 4096 && !--ntfs_nr_compression_users) in ntfs_fill_super()
3031 if (vol->mft_ino && vol->mft_ino != tmp_ino) in ntfs_fill_super()
3032 iput(vol->mft_ino); in ntfs_fill_super()
3033 vol->mft_ino = NULL; in ntfs_fill_super()
3037 kfree(vol); in ntfs_fill_super()