Lines Matching refs:vol
110 ntfs_volume *vol;
222 static int OLD_ntfs_volume_set_flags(ntfs_volume *vol, const le16 flags)
230 if (!vol) {
234 if (ntfs_file_record_read(vol, FILE_Volume, &m, NULL)) {
279 vol->flags = c->flags = flags;
280 if (ntfs_mft_record_write(vol, FILE_Volume, m)) {
295 static int set_dirty_flag(ntfs_volume *vol)
301 if (vol->flags & VOLUME_IS_DIRTY)
308 flags = vol->flags | VOLUME_IS_DIRTY;
309 if (!opt.no_action && OLD_ntfs_volume_set_flags(vol, flags)) {
314 vol->flags = flags;
319 * vol->flags is up-to-date, we can just ignore the NVolSetWasDirty
321 /* NVolSetWasDirty(vol); */
330 static int empty_journal(ntfs_volume *vol)
332 if (NVolLogFileEmpty(vol))
335 if (ntfs_logfile_reset(vol)) {
380 static int clear_badclus(ntfs_volume *vol)
392 ni = ntfs_inode_open(vol, FILE_BadClus);
413 && !ntfs_attr_truncate(na,vol->nr_clusters
414 << vol->cluster_size_bits)) {
449 static int fix_mftmirr(ntfs_volume *vol)
459 m = (u8*)malloc(vol->mftmirr_size << vol->mft_record_size_bits);
464 m2 = (u8*)malloc(vol->mftmirr_size << vol->mft_record_size_bits);
472 l = ntfs_attr_mst_pread(vol->mft_na, 0, vol->mftmirr_size,
473 vol->mft_record_size, m);
474 if (l != vol->mftmirr_size) {
484 l = ntfs_attr_mst_pread(vol->mftmirr_na, 0, vol->mftmirr_size,
485 vol->mft_record_size, m2);
486 if (l != vol->mftmirr_size) {
514 for (i = 0; i < vol->mftmirr_size; ++i) {
530 mrec = (MFT_RECORD*)(m + i * vol->mft_record_size);
548 mrec2 = (MFT_RECORD*)(m2 + i * vol->mft_record_size);
576 br = ntfs_mft_record_write(vol, i,
604 static int rewrite_upcase(ntfs_volume *vol, ntfs_attr *na)
611 vol->lcnbmp_ni = ntfs_inode_open(vol, FILE_Bitmap);
612 if (!vol->lcnbmp_ni) {
615 vol->lcnbmp_na = ntfs_attr_open(vol->lcnbmp_ni, AT_DATA,
617 if (!vol->lcnbmp_na) {
621 if (((vol->lcnbmp_na->data_size << 3)
622 < vol->nr_clusters)
623 || ((vol->lcnbmp_na->data_size << 3)
624 >= (vol->nr_clusters << 1))
625 || (vol->lcnbmp_na->data_size
626 > vol->lcnbmp_na->allocated_size)) {
629 (long long)vol->lcnbmp_na->data_size,
630 (long long)vol->lcnbmp_na->allocated_size,
631 (long long)(vol->nr_clusters + 7) >> 3);
634 l = ntfs_attr_pwrite(na, 0, vol->upcase_len*2,
635 vol->upcase);
636 if (l != vol->upcase_len*2) {
643 ntfs_attr_close(vol->lcnbmp_na);
644 vol->lcnbmp_na = (ntfs_attr*)NULL;
646 ntfs_inode_close(vol->lcnbmp_ni);
647 vol->lcnbmp_ni = (ntfs_inode*)NULL;
658 static int fix_upcase(ntfs_volume *vol)
673 ni = ntfs_inode_open(vol, FILE_UpCase);
720 res = rewrite_upcase(vol, na);
730 free(vol->upcase);
731 vol->upcase = upcase;
732 vol->upcase_len = upcase_len;
817 ntfs_volume *vol;
824 vol = selfloc->vol;
826 if ((ntfs_pread(vol->dev,
827 vol->mft_lcn << vol->cluster_size_bits,
828 vol->mft_record_size, mft0)
829 == vol->mft_record_size)
831 vol->mft_record_size)
832 && !ntfs_mft_record_check(vol, 0, mft0)) {
837 << vol->cluster_size_bits)
838 == (SELFLOC_LIMIT*vol->mft_record_size))) {
839 rl = ntfs_mapping_pairs_decompress(vol, a, NULL);
846 && ((rl[0].length << vol->cluster_size_bits)
847 == SELFLOC_LIMIT*vol->mft_record_size)
874 ntfs_volume *vol;
886 vol = selfloc->vol;
893 rl = ntfs_mapping_pairs_decompress(vol, a, NULL);
896 && (sle64_to_cpu(a->data_size) < vol->cluster_size)
897 && (ntfs_pread(vol->dev,
898 rl->lcn << vol->cluster_size_bits,
899 vol->cluster_size, attrlist) == vol->cluster_size)) {
911 vcn = (SELFLOC_LIMIT*vol->mft_record_size)
912 >> vol->cluster_size_bits;
958 ntfs_volume *vol;
962 vol = selfloc->vol;
965 offs = (vol->mft_lcn << vol->cluster_size_bits)
966 + (inum << vol->mft_record_size_bits);
967 if ((ntfs_pread(vol->dev, offs, vol->mft_record_size,
968 mft1) == vol->mft_record_size)
970 vol->mft_record_size)
971 && !ntfs_mft_record_check(vol, inum, mft1)) {
973 lowest_vcn = (SELFLOC_LIMIT*vol->mft_record_size)
974 >> vol->cluster_size_bits;
983 rl = ntfs_mapping_pairs_decompress(vol, a, NULL);
988 && ((u64)(rl[1].lcn << vol->cluster_size_bits)
991 << vol->cluster_size_bits) > offs)) {
1017 ntfs_volume *vol;
1020 vol = selfloc->vol;
1023 offs = (vol->mft_lcn << vol->cluster_size_bits)
1024 + (inum << vol->mft_record_size_bits);
1025 if ((ntfs_pread(vol->dev, offs, vol->mft_record_size,
1026 mft2) == vol->mft_record_size)
1028 vol->mft_record_size)
1029 && !ntfs_mft_record_check(vol, inum, mft2)) {
1053 ntfs_volume *vol;
1069 vol = selfloc->vol;
1104 offs2 = (vol->mft_lcn << vol->cluster_size_bits)
1105 + (inum << vol->mft_record_size_bits);
1107 offs1 = (vol->mft_lcn << vol->cluster_size_bits)
1108 + (inum << vol->mft_record_size_bits);
1113 offs = vol->mft_lcn << vol->cluster_size_bits;
1114 offsm = vol->mftmirr_lcn << vol->cluster_size_bits;
1117 vol->mft_record_size)
1118 || (ntfs_pwrite(vol->dev, offs, vol->mft_record_size,
1119 selfloc->mft0) != vol->mft_record_size)
1120 || (ntfs_pwrite(vol->dev, offsm, vol->mft_record_size,
1121 selfloc->mft0) != vol->mft_record_size))
1125 offs = selfloc->attrlist_lcn << vol->cluster_size_bits;
1126 if (ntfs_pwrite(vol->dev, offs, vol->cluster_size,
1127 selfloc->attrlist) != vol->cluster_size)
1133 vol->mft_record_size)
1135 vol->mft_record_size)
1136 || (ntfs_pwrite(vol->dev, offs2, vol->mft_record_size,
1137 mft1) != vol->mft_record_size)
1138 || (ntfs_pwrite(vol->dev, offs1, vol->mft_record_size,
1139 mft2) != vol->mft_record_size)))
1181 static int fix_self_located_mft(ntfs_volume *vol)
1188 selfloc.vol = vol;
1189 selfloc.mft0 = (MFT_RECORD*)malloc(vol->mft_record_size);
1190 selfloc.mft1 = (MFT_RECORD*)malloc(vol->mft_record_size);
1191 selfloc.mft2 = (MFT_RECORD*)malloc(vol->mft_record_size);
1192 selfloc.attrlist = (ATTR_LIST_ENTRY*)malloc(vol->cluster_size);
1227 static int try_fix_boot(ntfs_volume *vol, char *full_bs,
1237 br = ntfs_pread(vol->dev, read_sector*sector_size,
1254 && !ntfs_boot_sector_parse(vol, bs)) {
1262 res = rewrite_boot(vol->dev, full_bs,
1288 static int try_alternate_boot(ntfs_volume *vol, char *full_bs,
1308 actual_sectors = ntfs_device_size_get(vol->dev,sector_size) - 1;
1312 && !try_fix_boot(vol, full_bs, actual_sectors,
1320 && !try_fix_boot(vol, full_bs, shown_sectors,
1327 && !try_fix_boot(vol, full_bs, 0, actual_sectors, sector_size))
1361 static int check_alternate_boot(ntfs_volume *vol)
1374 full_bs = (char*)malloc(vol->sector_size);
1375 alt_bs = (char*)malloc(vol->sector_size);
1381 br = ntfs_pread(vol->dev, 0, vol->sector_size, full_bs);
1382 if (br == vol->sector_size) {
1385 actual_sectors = ntfs_device_size_get(vol->dev,
1386 vol->sector_size);
1389 << vol->sector_size_bits;
1391 br = ntfs_pread(vol->dev, last_sector_off,
1392 vol->sector_size, alt_bs);
1399 if ((br != vol->sector_size)
1400 || memcmp(full_bs, alt_bs, vol->sector_size)) {
1404 bw = ntfs_pwrite(vol->dev,
1406 vol->sector_size, full_bs);
1407 if (bw == vol->sector_size) {
1443 ntfs_volume *vol;
1459 vol = (ntfs_volume*)NULL;
1464 vol = ntfs_volume_alloc();
1465 if (!vol)
1469 vol->upcase_len = ntfs_upcase_build_default(&vol->upcase);
1470 if (!vol->upcase_len || !vol->upcase)
1474 vol->locase = (ntfschar*)NULL;
1475 NVolSetCaseSensitive(vol);
1478 NVolSetShowSysFiles(vol);
1479 NVolSetShowHidFiles(vol);
1480 NVolClearHideDotFiles(vol);
1482 NVolSetReadOnly(vol);
1485 if ((dev->d_ops->open)(dev, NVolReadOnly(vol) ? O_RDONLY: O_RDWR)) {
1491 vol->dev = dev;
1513 || (ntfs_boot_sector_parse(vol, bs) < 0)) {
1516 if (try_alternate_boot(vol, full_bs, sector_size,
1523 res = fix_self_located_mft(vol);
1540 if (vol) {
1541 free(vol->upcase);
1542 free(vol);
1557 ntfs_volume *vol;
1571 vol = ntfs_volume_startup(dev, flags);
1572 if (!vol) {
1582 vol = ntfs_volume_startup(dev, flags);
1584 if (!vol) {
1593 if ((!ret || opt.no_action) && (fix_mftmirr(vol) < 0))
1595 if ((!ret || opt.no_action) && (fix_upcase(vol) < 0))
1597 if ((!ret || opt.no_action) && (set_dirty_flag(vol) < 0))
1599 if ((!ret || opt.no_action) && (empty_journal(vol) < 0))
1605 ntfs_umount(vol, 1);
1614 ntfs_volume *vol;
1637 vol = ntfs_mount(opt.volume, flags);
1638 if (vol) {
1649 vol = ntfs_mount(opt.volume, 0);
1650 if (!vol) {
1655 if (check_alternate_boot(vol)) {
1673 vol->flags &= ~VOLUME_IS_DIRTY;
1675 vol->flags |= VOLUME_IS_DIRTY;
1676 if (!opt.no_action && ntfs_volume_write_flags(vol, vol->flags)) {
1682 ntfs_log_info("NTFS volume version is %i.%i.\n", vol->major_ver,
1683 vol->minor_ver);
1684 if (ntfs_version_is_supported(vol)) {
1689 if (clear_badclus(vol)) {
1694 if (vol->major_ver >= 3) {
1703 vol->dev->d_name);
1707 if (ntfs_umount(vol, 1)) {