Lines Matching refs:vol
63 * @vol: volume to read from
68 * Read @count mft records starting at @mref from volume @vol into buffer
80 * NOTE: @b has to be at least of size @count * vol->mft_record_size.
82 int ntfs_mft_records_read(const ntfs_volume *vol, const MFT_REF mref,
90 if (!vol || !vol->mft_na || !b || count < 0) {
98 if (m + count > vol->mft_na->initialized_size >>
99 vol->mft_record_size_bits) {
103 (long long)vol->mft_na->initialized_size >>
104 vol->mft_record_size_bits);
107 br = ntfs_attr_mst_pread(vol->mft_na, m << vol->mft_record_size_bits,
108 count, vol->mft_record_size, b);
122 * @vol: volume to write to
128 * @vol. Return 0 on success or -1 on error, with errno set to the error code.
144 int ntfs_mft_records_write(const ntfs_volume *vol, const MFT_REF mref,
152 if (!vol || !vol->mft_na || vol->mftmirr_size <= 0 || !b || count < 0) {
158 if (m + count > vol->mft_na->initialized_size >>
159 vol->mft_record_size_bits) {
163 (long long)vol->mft_na->initialized_size >>
164 vol->mft_record_size_bits);
167 if (m < vol->mftmirr_size) {
168 if (!vol->mftmirr_na) {
172 cnt = vol->mftmirr_size - m;
175 if ((m + cnt) > vol->mftmirr_na->initialized_size >>
176 vol->mft_record_size_bits) {
180 (long long)vol->mftmirr_na->initialized_size >>
181 vol->mft_record_size_bits);
184 bmirr = ntfs_malloc(cnt * vol->mft_record_size);
187 memcpy(bmirr, b, cnt * vol->mft_record_size);
189 bw = ntfs_attr_mst_pwrite(vol->mft_na, m << vol->mft_record_size_bits,
190 count, vol->mft_record_size, b);
204 bw = ntfs_attr_mst_pwrite(vol->mftmirr_na,
205 m << vol->mft_record_size_bits, cnt,
206 vol->mft_record_size, bmirr);
234 int ntfs_mft_record_check(const ntfs_volume *vol, const MFT_REF mref,
244 if (!NVolNoFixupWarn(vol))
251 if (le32_to_cpu(m->bytes_allocated) != vol->mft_record_size) {
254 vol->mft_record_size,
258 if (!NVolNoFixupWarn(vol)
259 && (le32_to_cpu(m->bytes_in_use) > vol->mft_record_size)) {
263 (int)vol->mft_record_size);
273 if (p2n(a) < p2n(m) || (char *)a > (char *)m + vol->mft_record_size) {
279 if (!NVolNoFixupWarn(vol)) {
319 * @vol: volume to read from
324 * Read a FILE record from the mft of @vol from the storage medium. @mref
348 int ntfs_file_record_read(const ntfs_volume *vol, const MFT_REF mref,
353 if (!vol || !mrec) {
361 m = ntfs_malloc(vol->mft_record_size);
365 if (ntfs_mft_record_read(vol, mref, m))
368 if (ntfs_mft_record_check(vol, mref, m))
390 * @vol: volume to which the mft record will belong
392 * @mrec: destination buffer of size >= @vol->mft_record_size bytes
395 * buffer @m. The volume @vol is needed because the mft record structure was
401 int ntfs_mft_record_layout(const ntfs_volume *vol, const MFT_REF mref,
406 if (!vol || !mrec) {
412 if (vol->major_ver < 3 || (vol->major_ver == 3 && !vol->minor_ver))
430 if (vol->mft_record_size >= NTFS_BLOCK_SIZE)
431 mrec->usa_count = cpu_to_le16(vol->mft_record_size /
457 mrec->bytes_allocated = cpu_to_le32(vol->mft_record_size);
464 memset((u8*)a + 8, 0, vol->mft_record_size - ((u8*)a + 8 - (u8*)mrec));
470 * @vol: volume on which to format the mft record
474 * out an empty, unused mft record in memory and write it to the volume @vol.
478 int ntfs_mft_record_format(const ntfs_volume *vol, const MFT_REF mref)
485 m = ntfs_calloc(vol->mft_record_size);
489 if (ntfs_mft_record_layout(vol, mref, m))
492 if (ntfs_mft_record_write(vol, mref, m))
533 * @vol: volume on which to search for a free mft record
537 * @vol.
548 static int ntfs_mft_bitmap_find_free_rec(ntfs_volume *vol, ntfs_inode *base_ni)
559 mftbmp_na = vol->mftbmp_na;
565 pass_end = vol->mft_na->allocated_size >> vol->mft_record_size_bits;
571 data_pos = vol->mft_data_pos;
715 static int ntfs_mft_bitmap_extend_allocation_i(ntfs_volume *vol)
730 mftbmp_na = vol->mftbmp_na;
736 vol->cluster_size_bits);
746 rl2 = ntfs_cluster_alloc(vol, rl[1].vcn, 1, lcn, DATA_ZONE);
757 if (ntfs_cluster_free_from_rl(vol, rl2))
795 mp_size = ntfs_get_size_for_mapping_pairs(vol, rl2, ll, INT_MAX);
806 ret = ntfs_mft_attr_extend(vol->mftbmp_na);
817 if (ntfs_mapping_pairs_build(vol, (u8*)a +
847 mftbmp_na->allocated_size += vol->cluster_size;
862 mftbmp_na->allocated_size += vol->cluster_size;
883 if (ntfs_bitmap_clear_bit(vol->lcnbmp_na, lcn))
886 vol->free_clusters++;
888 if (ntfs_mapping_pairs_build(vol, (u8*)a +
900 if (ntfs_attr_update_mapping_pairs(vol->mftbmp_na, 0))
911 * @vol: volume on which to extend the mft bitmap attribute
913 * Extend the mft bitmap attribute on the ntfs volume @vol by one cluster.
920 static int ntfs_mft_bitmap_extend_allocation(ntfs_volume *vol)
925 ret = ntfs_mft_bitmap_extend_allocation_i(vol);
931 * @vol: volume on which to extend the mft bitmap attribute
934 * volume @vol by 8 bytes.
941 static int ntfs_mft_bitmap_extend_initialized(ntfs_volume *vol)
952 mftbmp_na = vol->mftbmp_na;
981 vol->free_mft_records += (8 * 8);
1025 * @vol: volume on which to extend the mft data attribute
1027 * Extend the mft data attribute on the ntfs volume @vol by 16 mft records
1036 static int ntfs_mft_data_extend_allocation(ntfs_volume *vol)
1054 mft_na = vol->mft_na;
1061 (mft_na->allocated_size - 1) >> vol->cluster_size_bits);
1074 min_nr = vol->mft_record_size >> vol->cluster_size_bits;
1078 nr = vol->mft_record_size << 4 >> vol->cluster_size_bits;
1084 rl2 = ntfs_cluster_alloc(vol, old_last_vcn, nr, lcn, MFT_ZONE);
1109 if (ntfs_cluster_free_from_rl(vol, rl2))
1144 mp_size = ntfs_get_size_for_mapping_pairs(vol, rl2, ll, INT_MAX);
1154 ret = ntfs_mft_attr_extend(vol->mft_na);
1167 if (ntfs_mapping_pairs_build(vol,
1199 mft_na->allocated_size += nr << vol->cluster_size_bits;
1217 mft_na->allocated_size += nr << vol->cluster_size_bits;
1232 if (ntfs_cluster_free(vol, mft_na, old_last_vcn, -1) < 0)
1239 if (ntfs_mapping_pairs_build(vol, (u8*)a +
1251 if (ntfs_attr_update_mapping_pairs(vol->mft_na, 0))
1261 static int ntfs_mft_record_init(ntfs_volume *vol, s64 size)
1270 /* NOTE: Caller must sanity check vol, vol->mft_na and vol->mftbmp_na */
1272 mft_na = vol->mft_na;
1287 if (ntfs_mft_data_extend_allocation(vol) == STATUS_ERROR)
1308 s64 ll2 = mft_na->initialized_size >> vol->mft_record_size_bits;
1309 mft_na->initialized_size += vol->mft_record_size;
1313 if (ntfs_mft_record_format(vol, ll2) < 0) {
1365 static int ntfs_mft_rec_init(ntfs_volume *vol, s64 size)
1374 mft_na = vol->mft_na;
1426 ntfs_inode *ntfs_mft_rec_alloc(ntfs_volume *vol, BOOL mft_data)
1439 mft_na = vol->mft_na;
1440 mftbmp_na = vol->mftbmp_na;
1452 ntfs_inode *ext_ni = ntfs_inode_open(vol, FILE_mft_data);
1486 bit = ntfs_mft_bitmap_find_free_rec(vol, base_ni);
1504 ll = (bit + 1) << vol->mft_record_size_bits;
1506 if (ntfs_mft_rec_init(vol, ll) < 0)
1514 m = ntfs_malloc(vol->mft_record_size);
1518 if (ntfs_mft_record_read(vol, bit, m)) {
1543 if (ntfs_mft_record_layout(vol, bit, m)) {
1556 ni = ntfs_inode_allocate(vol);
1607 vol->mft_data_pos = bit + 1;
1629 * @vol: volume on which to allocate the mft record
1632 * Allocate an mft record in $MFT/$DATA of an open ntfs volume @vol.
1711 ntfs_inode *ntfs_mft_record_alloc(ntfs_volume *vol, ntfs_inode *base_ni)
1728 if (!vol || !vol->mft_na || !vol->mftbmp_na) {
1734 ni = ntfs_mft_rec_alloc(vol, FALSE);
1738 mft_na = vol->mft_na;
1739 mftbmp_na = vol->mftbmp_na;
1741 bit = ntfs_mft_bitmap_find_free_rec(vol, base_ni);
1757 ll = mft_na->initialized_size >> vol->mft_record_size_bits;
1779 int ret = ntfs_mft_bitmap_extend_allocation(vol);
1784 ret = ntfs_mft_bitmap_extend_allocation(vol);
1802 if (ntfs_mft_bitmap_extend_initialized(vol))
1819 ll = (bit + 1) << vol->mft_record_size_bits;
1821 if (ntfs_mft_record_init(vol, ll) < 0)
1830 m = ntfs_malloc(vol->mft_record_size);
1839 oldwarn = !NVolNoFixupWarn(vol);
1840 NVolSetNoFixupWarn(vol);
1841 if (ntfs_mft_record_read(vol, bit, m)) {
1843 NVolClearNoFixupWarn(vol);
1848 NVolClearNoFixupWarn(vol);
1868 if (ntfs_mft_record_layout(vol, bit, m)) {
1881 ni = ntfs_inode_allocate(vol);
1933 vol->mft_data_pos = bit + 1;
1937 vol->free_mft_records--;
1956 * @vol: volume on which to free the mft record
1959 * Free the mft record of the open inode @ni on the mounted ntfs volume @vol.
1965 int ntfs_mft_record_free(ntfs_volume *vol, ntfs_inode *ni)
1974 if (!vol || !vol->mftbmp_na || !ni) {
2002 if (ntfs_bitmap_clear_bit(vol->mftbmp_na, mft_no)) {
2015 vol->free_mft_records++;
2022 if (ntfs_bitmap_set_bit(vol->mftbmp_na, mft_no))