Lines Matching refs:ni
109 static inline struct mft_record *map_mft_record_folio(struct ntfs_inode *ni) in map_mft_record_folio() argument
112 struct ntfs_volume *vol = ni->vol; in map_mft_record_folio()
118 WARN_ON(ni->folio); in map_mft_record_folio()
123 index = NTFS_MFT_NR_TO_PIDX(vol, ni->mft_no); in map_mft_record_folio()
124 ofs = NTFS_MFT_NR_TO_POFS(vol, ni->mft_no); in map_mft_record_folio()
137 ni->mft_no); in map_mft_record_folio()
147 ni->mrec = kmalloc(vol->mft_record_size, GFP_NOFS); in map_mft_record_folio()
148 if (!ni->mrec) { in map_mft_record_folio()
155 memcpy(ni->mrec, addr + ofs, vol->mft_record_size); in map_mft_record_folio()
156 post_read_mst_fixup((struct ntfs_record *)ni->mrec, vol->mft_record_size); in map_mft_record_folio()
159 if (!ntfs_mft_record_check(vol, (struct mft_record *)ni->mrec, ni->mft_no)) { in map_mft_record_folio()
161 ni->folio = folio; in map_mft_record_folio()
162 ni->folio_ofs = ofs; in map_mft_record_folio()
163 return ni->mrec; in map_mft_record_folio()
167 kfree(ni->mrec); in map_mft_record_folio()
168 ni->mrec = NULL; in map_mft_record_folio()
173 ni->folio = NULL; in map_mft_record_folio()
174 ni->folio_ofs = 0; in map_mft_record_folio()
196 struct mft_record *map_mft_record(struct ntfs_inode *ni) in map_mft_record() argument
200 if (!ni) in map_mft_record()
203 ntfs_debug("Entering for mft_no 0x%llx.", ni->mft_no); in map_mft_record()
206 atomic_inc(&ni->count); in map_mft_record()
208 if (ni->folio) in map_mft_record()
209 return (struct mft_record *)ni->mrec; in map_mft_record()
211 m = map_mft_record_folio(ni); in map_mft_record()
215 atomic_dec(&ni->count); in map_mft_record()
216 ntfs_error(ni->vol->sb, "Failed with error code %lu.", -PTR_ERR(m)); in map_mft_record()
234 void unmap_mft_record(struct ntfs_inode *ni) in unmap_mft_record() argument
238 if (!ni) in unmap_mft_record()
241 ntfs_debug("Entering for mft_no 0x%llx.", ni->mft_no); in unmap_mft_record()
243 folio = ni->folio; in unmap_mft_record()
244 if (atomic_dec_return(&ni->count) > 1) in unmap_mft_record()
266 struct ntfs_inode *ni = NULL; in map_extent_mft_record() local
289 ni = extent_nis[i]; in map_extent_mft_record()
291 atomic_inc(&ni->count); in map_extent_mft_record()
295 if (likely(ni != NULL)) { in map_extent_mft_record()
299 m = map_mft_record(ni); in map_extent_mft_record()
301 atomic_dec(&ni->count); in map_extent_mft_record()
306 *ntfs_ino = ni; in map_extent_mft_record()
309 unmap_mft_record(ni); in map_extent_mft_record()
323 ni = ntfs_new_extent_inode(base_ni->vol->sb, mft_no); in map_extent_mft_record()
324 if (unlikely(!ni)) { in map_extent_mft_record()
328 ni->vol = base_ni->vol; in map_extent_mft_record()
329 ni->seq_no = seq_no; in map_extent_mft_record()
330 ni->nr_extents = -1; in map_extent_mft_record()
331 ni->ext.base_ntfs_ino = base_ni; in map_extent_mft_record()
333 m = map_mft_record(ni); in map_extent_mft_record()
336 ntfs_clear_extent_inode(ni); in map_extent_mft_record()
352 ntfs_clear_extent_inode(ni); in map_extent_mft_record()
376 base_ni->ext.extent_ntfs_inos[base_ni->nr_extents++] = ni; in map_extent_mft_record()
380 *ntfs_ino = ni; in map_extent_mft_record()
385 unmap_mft_record(ni); in map_extent_mft_record()
392 ntfs_clear_extent_inode(ni); in map_extent_mft_record()
417 void __mark_mft_record_dirty(struct ntfs_inode *ni) in __mark_mft_record_dirty() argument
421 ntfs_debug("Entering for inode 0x%llx.", ni->mft_no); in __mark_mft_record_dirty()
422 WARN_ON(NInoAttr(ni)); in __mark_mft_record_dirty()
424 if (likely(ni->nr_extents >= 0)) in __mark_mft_record_dirty()
425 base_ni = ni; in __mark_mft_record_dirty()
427 base_ni = ni->ext.base_ntfs_ino; in __mark_mft_record_dirty()
551 int write_mft_record_nolock(struct ntfs_inode *ni, struct mft_record *m, int sync) in write_mft_record_nolock() argument
553 struct ntfs_volume *vol = ni->vol; in write_mft_record_nolock()
554 struct folio *folio = ni->folio; in write_mft_record_nolock()
561 ntfs_debug("Entering for inode 0x%llx.", ni->mft_no); in write_mft_record_nolock()
563 WARN_ON(NInoAttr(ni)); in write_mft_record_nolock()
572 if (!NInoTestClearDirty(ni)) in write_mft_record_nolock()
576 fixup_m = (struct mft_record *)(kaddr + ni->folio_ofs); in write_mft_record_nolock()
586 folio_size = vol->mft_record_size / ni->mft_lcn_count; in write_mft_record_nolock()
587 while (i < ni->mft_lcn_count) { in write_mft_record_nolock()
590 clu_off = (unsigned int)((s64)ni->mft_no * vol->mft_record_size + offset) & in write_mft_record_nolock()
595 NTFS_B_TO_SECTOR(vol, NTFS_CLU_TO_B(vol, ni->mft_lcn[i]) + in write_mft_record_nolock()
599 ni->folio_ofs + offset)) { in write_mft_record_nolock()
605 if (!sync && ni->mft_no < vol->mftmirr_size) { in write_mft_record_nolock()
606 int sub_err = ntfs_sync_mft_mirror(vol, ni->mft_no, in write_mft_record_nolock()
629 if (sync && ni->mft_no < vol->mftmirr_size) { in write_mft_record_nolock()
630 int sub_err = ntfs_sync_mft_mirror(vol, ni->mft_no, fixup_m); in write_mft_record_nolock()
640 ni->mft_no); in write_mft_record_nolock()
658 mark_mft_record_dirty(ni); in write_mft_record_nolock()
771 struct ntfs_inode *ni, *eni, **extent_nis; in ntfs_may_write_mft_record() local
810 ni = NTFS_I(vi); in ntfs_may_write_mft_record()
812 atomic_inc(&ni->count); in ntfs_may_write_mft_record()
814 if (NInoDirty(ni)) { in ntfs_may_write_mft_record()
817 atomic_dec(&ni->count); in ntfs_may_write_mft_record()
823 if (unlikely(!mutex_trylock(&ni->mrec_lock))) { in ntfs_may_write_mft_record()
825 atomic_dec(&ni->count); in ntfs_may_write_mft_record()
835 *locked_ni = ni; in ntfs_may_write_mft_record()
878 ni = NTFS_I(vi); in ntfs_may_write_mft_record()
879 mutex_lock(&ni->extent_lock); in ntfs_may_write_mft_record()
880 if (ni->nr_extents <= 0) { in ntfs_may_write_mft_record()
885 mutex_unlock(&ni->extent_lock); in ntfs_may_write_mft_record()
892 extent_nis = ni->ext.extent_ntfs_inos; in ntfs_may_write_mft_record()
893 for (eni = NULL, i = 0; i < ni->nr_extents; ++i) { in ntfs_may_write_mft_record()
908 mutex_unlock(&ni->extent_lock); in ntfs_may_write_mft_record()
918 mutex_unlock(&ni->extent_lock); in ntfs_may_write_mft_record()
1115 static int ntfs_mft_attr_extend(struct ntfs_inode *ni) in ntfs_mft_attr_extend() argument
1120 if (NInoAttr(ni)) in ntfs_mft_attr_extend()
1121 base_ni = ni->ext.base_ntfs_ino; in ntfs_mft_attr_extend()
1123 base_ni = ni; in ntfs_mft_attr_extend()
1136 ret = ntfs_attr_update_mapping_pairs(ni, 0); in ntfs_mft_attr_extend()
2122 struct ntfs_inode **ni, struct ntfs_inode *base_ni, in ntfs_mft_record_alloc() argument
2139 if (base_ni && *ni) in ntfs_mft_record_alloc()
2483 ni); in ntfs_mft_record_alloc()
2519 (*ni)->seq_no = le16_to_cpu(m->sequence_number); in ntfs_mft_record_alloc()
2531 (*ni)->mrec = kmalloc(vol->mft_record_size, GFP_NOFS); in ntfs_mft_record_alloc()
2532 if (!(*ni)->mrec) { in ntfs_mft_record_alloc()
2540 memcpy((*ni)->mrec, m, vol->mft_record_size); in ntfs_mft_record_alloc()
2541 post_read_mst_fixup((struct ntfs_record *)(*ni)->mrec, vol->mft_record_size); in ntfs_mft_record_alloc()
2544 (*ni)->folio = folio; in ntfs_mft_record_alloc()
2545 (*ni)->folio_ofs = ofs; in ntfs_mft_record_alloc()
2546 atomic_inc(&(*ni)->count); in ntfs_mft_record_alloc()
2560 (*ni)->mft_no = bit; in ntfs_mft_record_alloc()
2562 *ni_mrec = (*ni)->mrec; in ntfs_mft_record_alloc()
2608 int ntfs_mft_record_free(struct ntfs_volume *vol, struct ntfs_inode *ni) in ntfs_mft_record_free() argument
2618 if (!vol || !ni) in ntfs_mft_record_free()
2621 ntfs_debug("Entering for inode 0x%llx.\n", (long long)ni->mft_no); in ntfs_mft_record_free()
2623 ni_mrec = map_mft_record(ni); in ntfs_mft_record_free()
2628 mft_no = ni->mft_no; in ntfs_mft_record_free()
2643 err = ntfs_get_block_mft_record(NTFS_I(vol->mft_ino), ni); in ntfs_mft_record_free()
2646 unmap_mft_record(ni); in ntfs_mft_record_free()
2655 NInoSetDirty(ni); in ntfs_mft_record_free()
2656 err = write_mft_record(ni, ni_mrec, 0); in ntfs_mft_record_free()
2660 if (likely(ni->nr_extents >= 0)) in ntfs_mft_record_free()
2661 base_ni = ni; in ntfs_mft_record_free()
2663 base_ni = ni->ext.base_ntfs_ino; in ntfs_mft_record_free()
2676 unmap_mft_record(ni); in ntfs_mft_record_free()
2695 NInoSetDirty(ni); in ntfs_mft_record_free()
2696 write_mft_record(ni, ni_mrec, 0); in ntfs_mft_record_free()
2697 unmap_mft_record(ni); in ntfs_mft_record_free()
2701 static s64 lcn_from_index(struct ntfs_volume *vol, struct ntfs_inode *ni, in lcn_from_index() argument
2709 down_read(&ni->runlist.lock); in lcn_from_index()
2710 lcn = ntfs_attr_vcn_to_lcn_nolock(ni, vcn, false); in lcn_from_index()
2711 up_read(&ni->runlist.lock); in lcn_from_index()
2732 struct ntfs_inode *ni = NTFS_I(vi); in ntfs_write_mft_block() local
2733 struct ntfs_volume *vol = ni->vol; in ntfs_write_mft_block()
2746 s64 end_vcn = ntfs_bytes_to_cluster(vol, ni->allocated_size); in ntfs_write_mft_block()
2752 ni->mft_no, ni->type, folio->index); in ntfs_write_mft_block()
2767 lcn = lcn_from_index(vol, ni, folio->index); in ntfs_write_mft_block()
2825 down_write(&ni->runlist.lock); in ntfs_write_mft_block()
2826 rl = ntfs_attr_vcn_to_rl(ni, vcn_off, &lcn); in ntfs_write_mft_block()
2827 up_write(&ni->runlist.lock); in ntfs_write_mft_block()