Lines Matching full:ni
20 static struct mft_inode *ni_ins_mi(struct ntfs_inode *ni, struct rb_root *tree, in ni_ins_mi() argument
50 static struct mft_inode *ni_find_mi(struct ntfs_inode *ni, CLST rno) in ni_find_mi() argument
52 return ni_ins_mi(ni, &ni->mi_tree, rno, NULL); in ni_find_mi()
58 static void ni_add_mi(struct ntfs_inode *ni, struct mft_inode *mi) in ni_add_mi() argument
60 ni_ins_mi(ni, &ni->mi_tree, mi->rno, &mi->node); in ni_add_mi()
66 void ni_remove_mi(struct ntfs_inode *ni, struct mft_inode *mi) in ni_remove_mi() argument
68 rb_erase(&mi->node, &ni->mi_tree); in ni_remove_mi()
74 struct ATTR_STD_INFO *ni_std(struct ntfs_inode *ni) in ni_std() argument
78 attr = mi_find_attr(ni, &ni->mi, NULL, ATTR_STD, NULL, 0, NULL); in ni_std()
88 struct ATTR_STD_INFO5 *ni_std5(struct ntfs_inode *ni) in ni_std5() argument
92 attr = mi_find_attr(ni, &ni->mi, NULL, ATTR_STD, NULL, 0, NULL); in ni_std5()
101 void ni_clear(struct ntfs_inode *ni) in ni_clear() argument
105 if (!ni->vfs_inode.i_nlink && ni->mi.mrec && in ni_clear()
106 is_rec_inuse(ni->mi.mrec) && in ni_clear()
107 !(ni->mi.sbi->flags & NTFS_FLAGS_LOG_REPLAYING)) in ni_clear()
108 ni_delete_all(ni); in ni_clear()
110 al_destroy(ni); in ni_clear()
112 for (node = rb_first(&ni->mi_tree); node;) { in ni_clear()
116 rb_erase(node, &ni->mi_tree); in ni_clear()
122 if (ni->ni_flags & NI_FLAG_DIR) in ni_clear()
123 indx_clear(&ni->dir); in ni_clear()
125 run_close(&ni->file.run); in ni_clear()
127 if (ni->file.offs_folio) { in ni_clear()
129 folio_put(ni->file.offs_folio); in ni_clear()
130 ni->file.offs_folio = NULL; in ni_clear()
135 mi_clear(&ni->mi); in ni_clear()
141 int ni_load_mi_ex(struct ntfs_inode *ni, CLST rno, struct mft_inode **mi) in ni_load_mi_ex() argument
146 r = ni_find_mi(ni, rno); in ni_load_mi_ex()
150 err = mi_get(ni->mi.sbi, rno, &r); in ni_load_mi_ex()
152 _ntfs_bad_inode(&ni->vfs_inode); in ni_load_mi_ex()
156 ni_add_mi(ni, r); in ni_load_mi_ex()
167 int ni_load_mi(struct ntfs_inode *ni, const struct ATTR_LIST_ENTRY *le, in ni_load_mi() argument
173 *mi = &ni->mi; in ni_load_mi()
178 if (rno == ni->mi.rno) { in ni_load_mi()
179 *mi = &ni->mi; in ni_load_mi()
182 return ni_load_mi_ex(ni, rno, mi); in ni_load_mi()
190 struct ATTRIB *ni_find_attr(struct ntfs_inode *ni, struct ATTRIB *attr, in ni_find_attr() argument
198 if (!ni->attr_list.size || in ni_find_attr()
203 *mi = &ni->mi; in ni_find_attr()
206 return mi_find_attr(ni, &ni->mi, attr, type, name, name_len, in ni_find_attr()
211 le = al_find_ex(ni, le_o ? *le_o : NULL, type, name, name_len, vcn); in ni_find_attr()
219 if (ni_load_mi(ni, le, &m)) in ni_find_attr()
223 attr = mi_find_attr(ni, m, NULL, type, name, name_len, &le->id); in ni_find_attr()
244 _ntfs_bad_inode(&ni->vfs_inode); in ni_find_attr()
251 struct ATTRIB *ni_enum_attr_ex(struct ntfs_inode *ni, struct ATTRIB *attr, in ni_enum_attr_ex() argument
259 if (!ni->attr_list.size) { in ni_enum_attr_ex()
262 *mi = &ni->mi; in ni_enum_attr_ex()
264 return mi_enum_attr(ni, &ni->mi, attr); in ni_enum_attr_ex()
268 le2 = *le = al_enumerate(ni, attr ? *le : NULL); in ni_enum_attr_ex()
273 if (ni_load_mi(ni, le2, &mi2)) in ni_enum_attr_ex()
280 return rec_find_attr_le(ni, mi2, le2); in ni_enum_attr_ex()
286 struct ATTRIB *ni_load_attr(struct ntfs_inode *ni, enum ATTR_TYPE type, in ni_load_attr() argument
295 if (!ni->attr_list.size) { in ni_load_attr()
297 *pmi = &ni->mi; in ni_load_attr()
298 return mi_find_attr(ni, &ni->mi, NULL, type, name, name_len, in ni_load_attr()
302 le = al_find_ex(ni, NULL, type, name, name_len, NULL); in ni_load_attr()
313 next = al_find_ex(ni, le, type, name, name_len, NULL); in ni_load_attr()
319 if (ni_load_mi(ni, le, &mi)) in ni_load_attr()
325 attr = mi_find_attr(ni, mi, NULL, type, name, name_len, &le->id); in ni_load_attr()
336 _ntfs_bad_inode(&ni->vfs_inode); in ni_load_attr()
343 int ni_load_all_mi(struct ntfs_inode *ni) in ni_load_all_mi() argument
348 if (!ni->attr_list.size) in ni_load_all_mi()
353 while ((le = al_enumerate(ni, le))) { in ni_load_all_mi()
356 if (rno == ni->mi.rno) in ni_load_all_mi()
359 err = ni_load_mi_ex(ni, rno, NULL); in ni_load_all_mi()
370 bool ni_add_subrecord(struct ntfs_inode *ni, CLST rno, struct mft_inode **mi) in ni_add_subrecord() argument
378 if (mi_format_new(m, ni->mi.sbi, rno, 0, ni->mi.rno == MFT_REC_MFT)) { in ni_add_subrecord()
383 mi_get_ref(&ni->mi, &m->mrec->parent_ref); in ni_add_subrecord()
385 ni_add_mi(ni, m); in ni_add_subrecord()
393 int ni_remove_attr(struct ntfs_inode *ni, enum ATTR_TYPE type, in ni_remove_attr() argument
404 if (base_only || type == ATTR_LIST || !ni->attr_list.size) { in ni_remove_attr()
405 attr = mi_find_attr(ni, &ni->mi, NULL, type, name, name_len, in ni_remove_attr()
410 mi_remove_attr(ni, &ni->mi, attr); in ni_remove_attr()
418 le = al_enumerate(ni, le); in ni_remove_attr()
439 err = ni_load_mi(ni, le, &mi); in ni_remove_attr()
443 al_remove_le(ni, le); in ni_remove_attr()
445 attr = mi_find_attr(ni, mi, NULL, type, name, name_len, id); in ni_remove_attr()
449 mi_remove_attr(ni, mi, attr); in ni_remove_attr()
451 if (PtrOffset(ni->attr_list.le, le) >= ni->attr_list.size) in ni_remove_attr()
463 ni_ins_new_attr(struct ntfs_inode *ni, struct mft_inode *mi, in ni_ins_new_attr() argument
475 if (type != ATTR_LIST && !le && ni->attr_list.size) { in ni_ins_new_attr()
476 err = al_add_le(ni, type, name, name_len, svcn, cpu_to_le16(-1), in ni_ins_new_attr()
493 attr = mi_insert_attr(ni, mi, type, name, name_len, asize, name_off); in ni_ins_new_attr()
496 al_remove_le(ni, le); in ni_ins_new_attr()
510 ni->attr_list.dirty = true; in ni_ins_new_attr()
526 static int ni_repack(struct ntfs_inode *ni) in ni_repack() argument
532 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_repack()
544 while ((attr = ni_enum_attr_ex(ni, attr, &le, &mi))) { in ni_repack()
588 err = run_unpack(&run, sbi, ni->mi.rno, svcn, evcn, svcn, in ni_repack()
616 al_remove_le(ni, le); in ni_repack()
624 ni->attr_list.dirty = true; in ni_repack()
643 ntfs_inode_warn(&ni->vfs_inode, "repack problem"); in ni_repack()
662 static int ni_try_remove_attr_list(struct ntfs_inode *ni) in ni_try_remove_attr_list() argument
665 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_try_remove_attr_list()
674 if (!ni->attr_list.dirty) in ni_try_remove_attr_list()
677 err = ni_repack(ni); in ni_try_remove_attr_list()
681 attr_list = mi_find_attr(ni, &ni->mi, NULL, ATTR_LIST, NULL, 0, NULL); in ni_try_remove_attr_list()
688 free = sbi->record_size - le32_to_cpu(ni->mi.mrec->used) + asize; in ni_try_remove_attr_list()
689 mi_get_ref(&ni->mi, &ref); in ni_try_remove_attr_list()
692 while ((le = al_enumerate(ni, le))) { in ni_try_remove_attr_list()
699 mi = ni_find_mi(ni, ino_get(&le->ref)); in ni_try_remove_attr_list()
703 attr = mi_find_attr(ni, mi, NULL, le->type, le_name(le), in ni_try_remove_attr_list()
716 mrec = kmemdup(ni->mi.mrec, sbi->record_size, GFP_NOFS); in ni_try_remove_attr_list()
721 mi_remove_attr(NULL, &ni->mi, attr_list); in ni_try_remove_attr_list()
729 while ((le = al_enumerate(ni, le))) { in ni_try_remove_attr_list()
733 mi = ni_find_mi(ni, ino_get(&le->ref)); in ni_try_remove_attr_list()
739 attr = mi_find_attr(ni, mi, NULL, le->type, le_name(le), in ni_try_remove_attr_list()
748 attr_ins = mi_insert_attr(ni, &ni->mi, le->type, le_name(le), in ni_try_remove_attr_list()
768 while ((le = al_enumerate(ni, le))) { in ni_try_remove_attr_list()
772 mi = ni_find_mi(ni, ino_get(&le->ref)); in ni_try_remove_attr_list()
776 attr = mi_find_attr(ni, mi, NULL, le->type, le_name(le), in ni_try_remove_attr_list()
785 run_deallocate(sbi, &ni->attr_list.run, true); in ni_try_remove_attr_list()
786 run_close(&ni->attr_list.run); in ni_try_remove_attr_list()
787 ni->attr_list.size = 0; in ni_try_remove_attr_list()
788 kvfree(ni->attr_list.le); in ni_try_remove_attr_list()
789 ni->attr_list.le = NULL; in ni_try_remove_attr_list()
790 ni->attr_list.dirty = false; in ni_try_remove_attr_list()
796 swap(mrec, ni->mi.mrec); in ni_try_remove_attr_list()
804 int ni_create_attr_list(struct ntfs_inode *ni) in ni_create_attr_list() argument
806 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_create_attr_list()
819 is_mft = ni->mi.rno == MFT_REC_MFT; in ni_create_attr_list()
820 rec = ni->mi.mrec; in ni_create_attr_list()
831 mi_get_ref(&ni->mi, &le->ref); in ni_create_attr_list()
832 ni->attr_list.le = le; in ni_create_attr_list()
839 for (; (attr = mi_enum_attr(ni, &ni->mi, attr)); le = Add2Ptr(le, sz)) { in ni_create_attr_list()
846 if (le != ni->attr_list.le) in ni_create_attr_list()
847 le->ref = ni->attr_list.le->ref; in ni_create_attr_list()
867 lsize = PtrOffset(ni->attr_list.le, le); in ni_create_attr_list()
868 ni->attr_list.size = lsize; in ni_create_attr_list()
883 err = ntfs_look_free_mft(sbi, &rno, is_mft, ni, &mi); in ni_create_attr_list()
894 attr = mi_insert_attr(ni, mi, b->type, Add2Ptr(b, name_off), in ni_create_attr_list()
907 if (!mi_remove_attr(NULL, &ni->mi, b)) in ni_create_attr_list()
917 attr = mi_insert_attr(ni, &ni->mi, ATTR_LIST, NULL, 0, in ni_create_attr_list()
929 memcpy(resident_data_ex(attr, lsize), ni->attr_list.le, lsize); in ni_create_attr_list()
931 ni->attr_list.dirty = false; in ni_create_attr_list()
933 mark_inode_dirty(&ni->vfs_inode); in ni_create_attr_list()
937 kvfree(ni->attr_list.le); in ni_create_attr_list()
938 ni->attr_list.le = NULL; in ni_create_attr_list()
939 ni->attr_list.size = 0; in ni_create_attr_list()
946 static int ni_ins_attr_ext(struct ntfs_inode *ni, struct ATTR_LIST_ENTRY *le, in ni_ins_attr_ext() argument
959 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_ins_attr_ext()
961 is_mft = ni->mi.rno == MFT_REC_MFT; in ni_ins_attr_ext()
974 ni->mi.rno == MFT_REC_LOG) { in ni_ins_attr_ext()
980 if (!ni->attr_list.size) { in ni_ins_attr_ext()
981 err = ni_create_attr_list(ni); in ni_ins_attr_ext()
992 err = ni_load_all_mi(ni); in ni_ins_attr_ext()
997 for (node = rb_first(&ni->mi_tree); node; node = rb_next(node)) { in ni_ins_attr_ext()
1001 (mi_enum_attr(ni, mi, NULL) || in ni_ins_attr_ext()
1007 mi_find_attr(ni, mi, NULL, ATTR_DATA, NULL, 0, NULL)) { in ni_ins_attr_ext()
1016 mi_find_attr(ni, mi, NULL, type, name, name_len, NULL)) { in ni_ins_attr_ext()
1029 attr = ni_ins_new_attr(ni, mi, le, type, name, name_len, asize, in ni_ins_attr_ext()
1045 err = ntfs_look_free_mft(sbi, &rno, is_mft_data, ni, &mi); in ni_ins_attr_ext()
1054 attr = ni_ins_new_attr(ni, mi, le, type, name, name_len, asize, in ni_ins_attr_ext()
1074 ni_remove_mi(ni, mi); in ni_ins_attr_ext()
1097 static int ni_insert_attr(struct ntfs_inode *ni, enum ATTR_TYPE type, in ni_insert_attr() argument
1103 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_insert_attr()
1113 is_mft = ni->mi.rno == MFT_REC_MFT; in ni_insert_attr()
1114 rec = ni->mi.mrec; in ni_insert_attr()
1129 attr = ni_ins_new_attr(ni, &ni->mi, NULL, type, name, name_len, in ni_insert_attr()
1140 *ins_mi = &ni->mi; in ni_insert_attr()
1148 err = ni_ins_attr_ext(ni, NULL, type, name, name_len, asize, in ni_insert_attr()
1165 while ((attr = mi_enum_attr(ni, &ni->mi, attr))) { in ni_insert_attr()
1183 attr = mi_enum_attr(ni, &ni->mi, attr); in ni_insert_attr()
1195 if (ni->attr_list.size) { in ni_insert_attr()
1196 le = al_find_le(ni, NULL, attr); in ni_insert_attr()
1206 err = ni_ins_attr_ext(ni, le, attr->type, Add2Ptr(attr, t16), in ni_insert_attr()
1217 mi_remove_attr(NULL, &ni->mi, attr); in ni_insert_attr()
1226 attr = ni_ins_new_attr(ni, &ni->mi, NULL, type, name, name_len, asize, in ni_insert_attr()
1241 *ins_mi = &ni->mi; in ni_insert_attr()
1248 static int ni_expand_mft_list(struct ntfs_inode *ni) in ni_expand_mft_list() argument
1251 struct runs_tree *run = &ni->file.run; in ni_expand_mft_list()
1257 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_expand_mft_list()
1264 for (node = rb_first(&ni->mi_tree); node; node = rb_next(node)) { in ni_expand_mft_list()
1267 attr = mi_enum_attr(ni, mi, NULL); in ni_expand_mft_list()
1276 if (ntfs_look_free_mft(sbi, &mft_new, true, ni, &mi_new)) { in ni_expand_mft_list()
1285 ni_remove_mi(ni, mi_new); in ni_expand_mft_list()
1288 attr = mi_find_attr(ni, &ni->mi, NULL, ATTR_DATA, NULL, 0, NULL); in ni_expand_mft_list()
1325 le32_sub_cpu(&ni->mi.mrec->used, done); in ni_expand_mft_list()
1345 attr = ni_ins_new_attr(ni, mi_min, NULL, ATTR_DATA, NULL, 0, in ni_expand_mft_list()
1373 ni_remove_mi(ni, mi_new); in ni_expand_mft_list()
1382 int ni_expand_list(struct ntfs_inode *ni) in ni_expand_list() argument
1388 bool is_mft = ni->mi.rno == MFT_REC_MFT; in ni_expand_list()
1391 mi_get_ref(&ni->mi, &ref); in ni_expand_list()
1394 while ((le = al_enumerate(ni, le))) { in ni_expand_list()
1405 attr = rec_find_attr_le(ni, &ni->mi, le); in ni_expand_list()
1414 err = ni_ins_attr_ext(ni, le, attr->type, attr_name(attr), in ni_expand_list()
1425 mi_remove_attr(NULL, &ni->mi, attr); in ni_expand_list()
1437 err = ni_expand_mft_list(ni); in ni_expand_list()
1446 int ni_insert_nonresident(struct ntfs_inode *ni, enum ATTR_TYPE type, in ni_insert_nonresident() argument
1461 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_insert_nonresident()
1483 err = ni_insert_attr(ni, type, name, name_len, asize, name_off, svcn, in ni_insert_nonresident()
1505 svcn ? 0 : cpu_to_le64((u64)len << ni->mi.sbi->cluster_bits); in ni_insert_nonresident()
1522 int ni_insert_resident(struct ntfs_inode *ni, u32 data_size, in ni_insert_resident() argument
1532 err = ni_insert_attr(ni, type, name, name_len, asize, SIZEOF_RESIDENT, in ni_insert_resident()
1546 le16_add_cpu(&ni->mi.mrec->hard_links, 1); in ni_insert_resident()
1547 ni->mi.dirty = true; in ni_insert_resident()
1560 void ni_remove_attr_le(struct ntfs_inode *ni, struct ATTRIB *attr, in ni_remove_attr_le() argument
1563 mi_remove_attr(ni, mi, attr); in ni_remove_attr_le()
1566 al_remove_le(ni, le); in ni_remove_attr_le()
1574 int ni_delete_all(struct ntfs_inode *ni) in ni_delete_all() argument
1583 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_delete_all()
1587 while ((attr = ni_enum_attr_ex(ni, attr, &le, NULL))) { in ni_delete_all()
1591 mi_get_ref(&ni->mi, &ref); in ni_delete_all()
1617 run_unpack_ex(RUN_DEALLOCATE, sbi, ni->mi.rno, svcn, evcn, svcn, in ni_delete_all()
1621 if (ni->attr_list.size) { in ni_delete_all()
1622 run_deallocate(ni->mi.sbi, &ni->attr_list.run, true); in ni_delete_all()
1623 al_destroy(ni); in ni_delete_all()
1627 for (node = rb_first(&ni->mi_tree); node;) { in ni_delete_all()
1636 ni_remove_mi(ni, mi); in ni_delete_all()
1642 clear_rec_inuse(ni->mi.mrec); in ni_delete_all()
1643 ni->mi.dirty = true; in ni_delete_all()
1644 err = mi_write(&ni->mi, 0); in ni_delete_all()
1646 ntfs_mark_rec_free(sbi, ni->mi.rno, false); in ni_delete_all()
1655 struct ATTR_FILE_NAME *ni_fname_name(struct ntfs_inode *ni, in ni_fname_name() argument
1669 attr = ni_find_attr(ni, attr, le, ATTR_NAME, NULL, 0, NULL, mi); in ni_fname_name()
1697 struct ATTR_FILE_NAME *ni_fname_type(struct ntfs_inode *ni, u8 name_type, in ni_fname_type() argument
1711 attr = ni_find_attr(ni, attr, le, ATTR_NAME, NULL, 0, NULL, mi); in ni_fname_type()
1725 * NOTE: You need to set ni->std_fa = new_fa
1728 int ni_new_attr_flags(struct ntfs_inode *ni, enum FILE_ATTRIBUTE new_fa) in ni_new_attr_flags() argument
1735 attr = ni_find_attr(ni, NULL, NULL, ATTR_DATA, NULL, 0, NULL, &mi); in ni_new_attr_flags()
1756 ntfs_inode_warn(&ni->vfs_inode, in ni_new_attr_flags()
1766 &ni->vfs_inode, in ni_new_attr_flags()
1783 ni->vfs_inode.i_mapping->a_ops = &ntfs_aops; in ni_new_attr_flags()
1788 ni->vfs_inode.i_mapping->a_ops = &ntfs_aops_cmpr; in ni_new_attr_flags()
1793 ni->vfs_inode.i_mapping->a_ops = &ntfs_aops; in ni_new_attr_flags()
1808 enum REPARSE_SIGN ni_parse_reparse(struct ntfs_inode *ni, struct ATTRIB *attr, in ni_parse_reparse() argument
1825 if (!attr_load_runs_vcn(ni, ATTR_REPARSE, NULL, 0, &run, 0) && in ni_parse_reparse()
1826 !ntfs_read_run_nb(ni->mi.sbi, &run, 0, buffer, in ni_parse_reparse()
1887 ni_set_ext_compress_bits(ni, bits); in ni_parse_reparse()
1891 ni->ni_flags |= NI_FLAG_DEDUPLICATED; in ni_parse_reparse()
1914 int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo, in ni_fiemap() argument
1918 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_fiemap()
1924 u64 valid = ni->i_valid; in ni_fiemap()
1932 if (S_ISDIR(ni->vfs_inode.i_mode)) { in ni_fiemap()
1933 attr = ni_find_attr(ni, NULL, NULL, ATTR_ALLOC, I30_NAME, in ni_fiemap()
1936 attr = ni_find_attr(ni, NULL, NULL, ATTR_DATA, NULL, 0, NULL, in ni_fiemap()
1946 &ni->vfs_inode, in ni_fiemap()
1979 err = attr_load_runs_vcn(ni, attr->type, in ni_fiemap()
2006 if (S_ISDIR(ni->vfs_inode.i_mode)) { in ni_fiemap()
2011 err = attr_is_frame_compressed(ni, attr, in ni_fiemap()
2086 int ni_readpage_cmpr(struct ntfs_inode *ni, struct folio *folio) in ni_readpage_cmpr() argument
2089 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_readpage_cmpr()
2100 if (vbo >= i_size_read(&ni->vfs_inode)) { in ni_readpage_cmpr()
2107 if (ni->ni_flags & NI_FLAG_COMPRESSED_MASK) { in ni_readpage_cmpr()
2109 frame_bits = ni_ext_compress_bits(ni); in ni_readpage_cmpr()
2142 err = ni_read_frame(ni, frame_vbo, pages, pages_per_frame); in ni_readpage_cmpr()
2168 int ni_decompress_file(struct ntfs_inode *ni) in ni_decompress_file() argument
2170 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_decompress_file()
2171 struct inode *inode = &ni->vfs_inode; in ni_decompress_file()
2198 frame_bits = ni_ext_compress_bits(ni); in ni_decompress_file()
2226 err = attr_data_get_block(ni, vcn, cend - vcn, &lcn, in ni_decompress_file()
2247 err = ni_read_frame(ni, vbo, pages, pages_per_frame); in ni_decompress_file()
2250 down_read(&ni->file.run_lock); in ni_decompress_file()
2251 err = ntfs_bio_pages(sbi, &ni->file.run, pages, in ni_decompress_file()
2254 up_read(&ni->file.run_lock); in ni_decompress_file()
2275 while ((attr = ni_enum_attr_ex(ni, attr, &le, NULL))) { in ni_decompress_file()
2282 mi_get_ref(&ni->mi, &ref); in ni_decompress_file()
2310 run_unpack_ex(RUN_DEALLOCATE, sbi, ni->mi.rno, svcn, evcn, svcn, in ni_decompress_file()
2317 err = ni_remove_attr(ni, ATTR_DATA, WOF_NAME, ARRAY_SIZE(WOF_NAME), in ni_decompress_file()
2325 err = ni_remove_attr(ni, ATTR_REPARSE, NULL, 0, false, NULL); in ni_decompress_file()
2332 attr = ni_find_attr(ni, NULL, NULL, ATTR_DATA, NULL, 0, NULL, &mi); in ni_decompress_file()
2353 ni->std_fa &= ~(FILE_ATTRIBUTE_SPARSE_FILE | in ni_decompress_file()
2360 ni->ni_flags &= ~NI_FLAG_COMPRESSED_MASK; in ni_decompress_file()
2361 if (ni->file.offs_folio) { in ni_decompress_file()
2362 folio_put(ni->file.offs_folio); in ni_decompress_file()
2363 ni->file.offs_folio = NULL; in ni_decompress_file()
2444 int ni_read_frame(struct ntfs_inode *ni, u64 frame_vbo, struct page **pages, in ni_read_frame() argument
2448 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_read_frame()
2454 struct runs_tree *run = &ni->file.run; in ni_read_frame()
2455 u64 valid_size = ni->i_valid; in ni_read_frame()
2477 attr = ni_find_attr(ni, NULL, &le, ATTR_DATA, NULL, 0, NULL, NULL); in ni_read_frame()
2502 if (ni->ni_flags & NI_FLAG_COMPRESSED_MASK) { in ni_read_frame()
2507 loff_t i_size = i_size_read(&ni->vfs_inode); in ni_read_frame()
2508 u32 frame_bits = ni_ext_compress_bits(ni); in ni_read_frame()
2528 attr = ni_find_attr(ni, attr, &le, ATTR_DATA, WOF_NAME, in ni_read_frame()
2532 &ni->vfs_inode, in ni_read_frame()
2550 err = attr_wof_frame_info(ni, attr, run, frame64, frames, in ni_read_frame()
2581 err = attr_load_runs_range(ni, ATTR_DATA, WOF_NAME, in ni_read_frame()
2602 down_write(&ni->file.run_lock); in ni_read_frame()
2605 err = attr_is_frame_compressed(ni, attr, frame, &clst_data, in ni_read_frame()
2607 up_write(&ni->file.run_lock); in ni_read_frame()
2621 down_read(&ni->file.run_lock); in ni_read_frame()
2625 up_read(&ni->file.run_lock); in ni_read_frame()
2654 down_read(&ni->file.run_lock); in ni_read_frame()
2657 up_read(&ni->file.run_lock); in ni_read_frame()
2672 if (run != &ni->file.run) { in ni_read_frame()
2709 if (run != &ni->file.run) in ni_read_frame()
2729 int ni_write_frame(struct ntfs_inode *ni, struct page **pages, in ni_write_frame() argument
2733 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_write_frame()
2750 attr = ni_find_attr(ni, NULL, &le, ATTR_DATA, NULL, 0, NULL, &mi); in ni_write_frame()
2767 down_write(&ni->file.run_lock); in ni_write_frame()
2768 err = attr_make_nonresident(ni, attr, le, mi, in ni_write_frame()
2770 &ni->file.run, &attr, pages[0]); in ni_write_frame()
2771 up_write(&ni->file.run_lock); in ni_write_frame()
2854 down_write(&ni->file.run_lock); in ni_write_frame()
2855 run_truncate_around(&ni->file.run, le64_to_cpu(attr->nres.svcn)); in ni_write_frame()
2856 err = attr_allocate_frame(ni, frame, compr_size, ni->i_valid); in ni_write_frame()
2857 up_write(&ni->file.run_lock); in ni_write_frame()
2864 down_read(&ni->file.run_lock); in ni_write_frame()
2865 err = ntfs_bio_pages(sbi, &ni->file.run, in ni_write_frame()
2869 up_read(&ni->file.run_lock); in ni_write_frame()
2897 int ni_remove_name(struct ntfs_inode *dir_ni, struct ntfs_inode *ni, in ni_remove_name() argument
2901 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_remove_name()
2914 fname = ni_fname_name(ni, (struct le_str *)&de_name->name_len, in ni_remove_name()
2931 ni_remove_attr_le(ni, attr_from_name(fname), mi, le); in ni_remove_name()
2936 fname = ni_fname_type(ni, name_type, &mi, &le); in ni_remove_name()
2952 ni_remove_attr_le(ni, attr_from_name(fname), mi, le); in ni_remove_name()
2964 bool ni_remove_name_undo(struct ntfs_inode *dir_ni, struct ntfs_inode *ni, in ni_remove_name_undo() argument
2967 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_remove_name_undo()
2974 if (ni_insert_resident(ni, de_key_size, ATTR_NAME, NULL, 0, in ni_remove_name_undo()
2979 mi_get_ref(&ni->mi, &de2->ref); in ni_remove_name_undo()
2992 if (ni_insert_resident(ni, de_key_size, ATTR_NAME, NULL, 0, in ni_remove_name_undo()
2997 mi_get_ref(&ni->mi, &de->ref); in ni_remove_name_undo()
3009 int ni_add_name(struct ntfs_inode *dir_ni, struct ntfs_inode *ni, in ni_add_name() argument
3013 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_add_name()
3026 if (ni->mi.sbi->options->hide_dot_files) { in ni_add_name()
3029 ni->std_fa |= FILE_ATTRIBUTE_HIDDEN; in ni_add_name()
3031 ni->std_fa &= ~FILE_ATTRIBUTE_HIDDEN; in ni_add_name()
3034 mi_get_ref(&ni->mi, &de->ref); in ni_add_name()
3038 fname = ni_fname_name(ni, NULL, NULL, NULL, NULL); in ni_add_name()
3041 de_name->dup.fa = ni->std_fa; in ni_add_name()
3044 err = ni_insert_resident(ni, de_key_size, ATTR_NAME, NULL, 0, &attr, in ni_add_name()
3054 ni_remove_attr_le(ni, attr, mi, le); in ni_add_name()
3063 struct ntfs_inode *ni, struct NTFS_DE *de, struct NTFS_DE *new_de, in ni_rename() argument
3084 err = ni_add_name(new_dir_ni, ni, new_de); in ni_rename()
3086 err = ni_remove_name(dir_ni, ni, de, &de2, &undo); in ni_rename()
3087 if (err && ni_remove_name(new_dir_ni, ni, new_de, &de2, &undo)) in ni_rename()
3095 * err = ni_remove_name(dir_ni, ni, de, &de2, &undo); in ni_rename()
3097 * err = ni_add_name(new_dir_ni, ni, new_de); in ni_rename()
3098 * if (err && !ni_remove_name_undo(dir_ni, ni, de, de2, undo)) in ni_rename()
3107 * ni_is_dirty - Return: True if 'ni' requires ni_write_inode.
3111 struct ntfs_inode *ni = ntfs_i(inode); in ni_is_dirty() local
3114 if (ni->mi.dirty || ni->attr_list.dirty || in ni_is_dirty()
3115 (ni->ni_flags & NI_FLAG_UPDATE_PARENT)) in ni_is_dirty()
3118 for (node = rb_first(&ni->mi_tree); node; node = rb_next(node)) { in ni_is_dirty()
3131 static bool ni_update_parent(struct ntfs_inode *ni, struct NTFS_DUP_INFO *dup, in ni_update_parent() argument
3137 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_update_parent()
3141 if (ni->mi.mrec->flags & RECORD_FLAG_DIR) { in ni_update_parent()
3149 attr = ni_find_attr(ni, NULL, &le, ATTR_DATA, NULL, 0, NULL, in ni_update_parent()
3159 u64 new_valid = ni->i_valid; in ni_update_parent()
3183 if (ni->ni_flags & NI_FLAG_EA) { in ni_update_parent()
3184 attr = ni_find_attr(ni, attr, &le, ATTR_EA_INFO, NULL, 0, NULL, in ni_update_parent()
3199 while ((attr = ni_find_attr(ni, attr, &le, ATTR_NAME, NULL, 0, NULL, in ni_update_parent()
3209 if (ino_get(&fname->home) == ni->vfs_inode.i_ino) { in ni_update_parent()
3218 &ni->vfs_inode, in ni_update_parent()
3248 struct ntfs_inode *ni = ntfs_i(inode); in ni_write_inode() local
3262 if (!ni_trylock(ni)) { in ni_write_inode()
3263 /* 'ni' is under modification, skip for now. */ in ni_write_inode()
3268 if (!ni->mi.mrec) in ni_write_inode()
3271 if (is_rec_inuse(ni->mi.mrec) && in ni_write_inode()
3277 std = ni_std(ni); in ni_write_inode()
3305 dup.fa = ni->std_fa; in ni_write_inode()
3313 ni->mi.dirty = true; in ni_write_inode()
3316 (modified || (ni->ni_flags & NI_FLAG_UPDATE_PARENT)) in ni_write_inode()
3321 re_dirty = ni_update_parent(ni, &dup, sync); in ni_write_inode()
3324 ni->ni_flags |= NI_FLAG_UPDATE_PARENT; in ni_write_inode()
3326 ni->ni_flags &= ~NI_FLAG_UPDATE_PARENT; in ni_write_inode()
3330 if (ni->attr_list.size && ni->attr_list.dirty) { in ni_write_inode()
3332 err = ni_try_remove_attr_list(ni); in ni_write_inode()
3337 err = al_update(ni, sync); in ni_write_inode()
3343 for (node = rb_first(&ni->mi_tree); node; node = next) { in ni_write_inode()
3352 is_empty = !mi_enum_attr(ni, mi, NULL); in ni_write_inode()
3363 rb_erase(node, &ni->mi_tree); in ni_write_inode()
3368 if (ni->mi.dirty) { in ni_write_inode()
3369 err2 = mi_write(&ni->mi, sync); in ni_write_inode()
3374 ni_unlock(ni); in ni_write_inode()
3397 struct ntfs_inode *ni = ntfs_i(inode); in ni_set_compress() local
3401 if (is_compressed(ni) == !!compr) in ni_set_compress()
3404 if (is_sparsed(ni)) { in ni_set_compress()
3416 ni_lock(ni); in ni_set_compress()
3418 std = ni_std(ni); in ni_set_compress()
3425 err = attr_set_compress(ni, compr); in ni_set_compress()
3436 ni->std_fa = std->fa; in ni_set_compress()
3444 if (ni->std_fa != std->fa) { in ni_set_compress()
3445 ni->std_fa = std->fa; in ni_set_compress()
3446 ni->mi.dirty = true; in ni_set_compress()
3449 ni->ni_flags |= NI_FLAG_UPDATE_PARENT; in ni_set_compress()
3453 ni_unlock(ni); in ni_set_compress()