Lines Matching refs:ni

19 static struct mft_inode *ni_ins_mi(struct ntfs_inode *ni, struct rb_root *tree,  in ni_ins_mi()  argument
49 static struct mft_inode *ni_find_mi(struct ntfs_inode *ni, CLST rno) in ni_find_mi() argument
51 return ni_ins_mi(ni, &ni->mi_tree, rno, NULL); in ni_find_mi()
57 static void ni_add_mi(struct ntfs_inode *ni, struct mft_inode *mi) in ni_add_mi() argument
59 ni_ins_mi(ni, &ni->mi_tree, mi->rno, &mi->node); in ni_add_mi()
65 void ni_remove_mi(struct ntfs_inode *ni, struct mft_inode *mi) in ni_remove_mi() argument
67 rb_erase(&mi->node, &ni->mi_tree); in ni_remove_mi()
73 struct ATTR_STD_INFO *ni_std(struct ntfs_inode *ni) in ni_std() argument
77 attr = mi_find_attr(&ni->mi, NULL, ATTR_STD, NULL, 0, NULL); in ni_std()
87 struct ATTR_STD_INFO5 *ni_std5(struct ntfs_inode *ni) in ni_std5() argument
91 attr = mi_find_attr(&ni->mi, NULL, ATTR_STD, NULL, 0, NULL); in ni_std5()
100 void ni_clear(struct ntfs_inode *ni) in ni_clear() argument
104 if (!ni->vfs_inode.i_nlink && is_rec_inuse(ni->mi.mrec)) in ni_clear()
105 ni_delete_all(ni); in ni_clear()
107 al_destroy(ni); in ni_clear()
109 for (node = rb_first(&ni->mi_tree); node;) { in ni_clear()
113 rb_erase(node, &ni->mi_tree); in ni_clear()
119 if (ni->ni_flags & NI_FLAG_DIR) in ni_clear()
120 indx_clear(&ni->dir); in ni_clear()
122 run_close(&ni->file.run); in ni_clear()
124 if (ni->file.offs_page) { in ni_clear()
126 put_page(ni->file.offs_page); in ni_clear()
127 ni->file.offs_page = NULL; in ni_clear()
132 mi_clear(&ni->mi); in ni_clear()
138 int ni_load_mi_ex(struct ntfs_inode *ni, CLST rno, struct mft_inode **mi) in ni_load_mi_ex() argument
143 r = ni_find_mi(ni, rno); in ni_load_mi_ex()
147 err = mi_get(ni->mi.sbi, rno, &r); in ni_load_mi_ex()
151 ni_add_mi(ni, r); in ni_load_mi_ex()
162 int ni_load_mi(struct ntfs_inode *ni, const struct ATTR_LIST_ENTRY *le, in ni_load_mi() argument
168 *mi = &ni->mi; in ni_load_mi()
173 if (rno == ni->mi.rno) { in ni_load_mi()
174 *mi = &ni->mi; in ni_load_mi()
177 return ni_load_mi_ex(ni, rno, mi); in ni_load_mi()
185 struct ATTRIB *ni_find_attr(struct ntfs_inode *ni, struct ATTRIB *attr, in ni_find_attr() argument
193 if (!ni->attr_list.size || in ni_find_attr()
198 *mi = &ni->mi; in ni_find_attr()
201 return mi_find_attr(&ni->mi, attr, type, name, name_len, NULL); in ni_find_attr()
205 le = al_find_ex(ni, le_o ? *le_o : NULL, type, name, name_len, vcn); in ni_find_attr()
213 if (ni_load_mi(ni, le, &m)) in ni_find_attr()
238 ntfs_set_state(ni->mi.sbi, NTFS_DIRTY_ERROR); in ni_find_attr()
245 struct ATTRIB *ni_enum_attr_ex(struct ntfs_inode *ni, struct ATTRIB *attr, in ni_enum_attr_ex() argument
253 if (!ni->attr_list.size) { in ni_enum_attr_ex()
256 *mi = &ni->mi; in ni_enum_attr_ex()
258 return mi_enum_attr(&ni->mi, attr); in ni_enum_attr_ex()
262 le2 = *le = al_enumerate(ni, attr ? *le : NULL); in ni_enum_attr_ex()
267 if (ni_load_mi(ni, le2, &mi2)) in ni_enum_attr_ex()
280 struct ATTRIB *ni_load_attr(struct ntfs_inode *ni, enum ATTR_TYPE type, in ni_load_attr() argument
289 if (!ni->attr_list.size) { in ni_load_attr()
291 *pmi = &ni->mi; in ni_load_attr()
292 return mi_find_attr(&ni->mi, NULL, type, name, name_len, NULL); in ni_load_attr()
295 le = al_find_ex(ni, NULL, type, name, name_len, NULL); in ni_load_attr()
306 next = al_find_ex(ni, le, type, name, name_len, NULL); in ni_load_attr()
312 if (ni_load_mi(ni, le, &mi)) in ni_load_attr()
335 int ni_load_all_mi(struct ntfs_inode *ni) in ni_load_all_mi() argument
340 if (!ni->attr_list.size) in ni_load_all_mi()
345 while ((le = al_enumerate(ni, le))) { in ni_load_all_mi()
348 if (rno == ni->mi.rno) in ni_load_all_mi()
351 err = ni_load_mi_ex(ni, rno, NULL); in ni_load_all_mi()
362 bool ni_add_subrecord(struct ntfs_inode *ni, CLST rno, struct mft_inode **mi) in ni_add_subrecord() argument
370 if (mi_format_new(m, ni->mi.sbi, rno, 0, ni->mi.rno == MFT_REC_MFT)) { in ni_add_subrecord()
375 mi_get_ref(&ni->mi, &m->mrec->parent_ref); in ni_add_subrecord()
377 ni_add_mi(ni, m); in ni_add_subrecord()
385 int ni_remove_attr(struct ntfs_inode *ni, enum ATTR_TYPE type, in ni_remove_attr() argument
396 if (base_only || type == ATTR_LIST || !ni->attr_list.size) { in ni_remove_attr()
397 attr = mi_find_attr(&ni->mi, NULL, type, name, name_len, id); in ni_remove_attr()
401 mi_remove_attr(ni, &ni->mi, attr); in ni_remove_attr()
409 le = al_enumerate(ni, le); in ni_remove_attr()
430 err = ni_load_mi(ni, le, &mi); in ni_remove_attr()
434 al_remove_le(ni, le); in ni_remove_attr()
440 mi_remove_attr(ni, mi, attr); in ni_remove_attr()
442 if (PtrOffset(ni->attr_list.le, le) >= ni->attr_list.size) in ni_remove_attr()
454 ni_ins_new_attr(struct ntfs_inode *ni, struct mft_inode *mi, in ni_ins_new_attr() argument
466 if (type != ATTR_LIST && !le && ni->attr_list.size) { in ni_ins_new_attr()
467 err = al_add_le(ni, type, name, name_len, svcn, cpu_to_le16(-1), in ni_ins_new_attr()
487 al_remove_le(ni, le); in ni_ins_new_attr()
501 ni->attr_list.dirty = true; in ni_ins_new_attr()
517 static int ni_repack(struct ntfs_inode *ni) in ni_repack() argument
520 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_repack()
532 while ((attr = ni_enum_attr_ex(ni, attr, &le, &mi))) { in ni_repack()
570 err = run_unpack(&run, sbi, ni->mi.rno, svcn, evcn, svcn, in ni_repack()
598 al_remove_le(ni, le); in ni_repack()
606 ni->attr_list.dirty = true; in ni_repack()
625 ntfs_inode_warn(&ni->vfs_inode, "repack problem"); in ni_repack()
643 static int ni_try_remove_attr_list(struct ntfs_inode *ni) in ni_try_remove_attr_list() argument
646 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_try_remove_attr_list()
654 if (!ni->attr_list.dirty) in ni_try_remove_attr_list()
657 err = ni_repack(ni); in ni_try_remove_attr_list()
661 attr_list = mi_find_attr(&ni->mi, NULL, ATTR_LIST, NULL, 0, NULL); in ni_try_remove_attr_list()
668 free = sbi->record_size - le32_to_cpu(ni->mi.mrec->used) + asize; in ni_try_remove_attr_list()
669 mi_get_ref(&ni->mi, &ref); in ni_try_remove_attr_list()
672 while ((le = al_enumerate(ni, le))) { in ni_try_remove_attr_list()
679 mi = ni_find_mi(ni, ino_get(&le->ref)); in ni_try_remove_attr_list()
696 mi_remove_attr(NULL, &ni->mi, attr_list); in ni_try_remove_attr_list()
703 while ((le = al_enumerate(ni, le))) { in ni_try_remove_attr_list()
707 mi = ni_find_mi(ni, ino_get(&le->ref)); in ni_try_remove_attr_list()
722 attr_ins = mi_insert_attr(&ni->mi, le->type, le_name(le), in ni_try_remove_attr_list()
744 run_deallocate(sbi, &ni->attr_list.run, true); in ni_try_remove_attr_list()
745 run_close(&ni->attr_list.run); in ni_try_remove_attr_list()
746 ni->attr_list.size = 0; in ni_try_remove_attr_list()
747 kfree(ni->attr_list.le); in ni_try_remove_attr_list()
748 ni->attr_list.le = NULL; in ni_try_remove_attr_list()
749 ni->attr_list.dirty = false; in ni_try_remove_attr_list()
753 ntfs_inode_err(&ni->vfs_inode, "Internal error"); in ni_try_remove_attr_list()
754 make_bad_inode(&ni->vfs_inode); in ni_try_remove_attr_list()
761 int ni_create_attr_list(struct ntfs_inode *ni) in ni_create_attr_list() argument
763 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_create_attr_list()
776 is_mft = ni->mi.rno == MFT_REC_MFT; in ni_create_attr_list()
777 rec = ni->mi.mrec; in ni_create_attr_list()
790 mi_get_ref(&ni->mi, &le->ref); in ni_create_attr_list()
791 ni->attr_list.le = le; in ni_create_attr_list()
798 for (; (attr = mi_enum_attr(&ni->mi, attr)); le = Add2Ptr(le, sz)) { in ni_create_attr_list()
805 if (le != ni->attr_list.le) in ni_create_attr_list()
806 le->ref = ni->attr_list.le->ref; in ni_create_attr_list()
826 lsize = PtrOffset(ni->attr_list.le, le); in ni_create_attr_list()
827 ni->attr_list.size = lsize; in ni_create_attr_list()
842 err = ntfs_look_free_mft(sbi, &rno, is_mft, ni, &mi); in ni_create_attr_list()
864 WARN_ON(!mi_remove_attr(NULL, &ni->mi, b)); in ni_create_attr_list()
872 attr = mi_insert_attr(&ni->mi, ATTR_LIST, NULL, 0, in ni_create_attr_list()
883 memcpy(resident_data_ex(attr, lsize), ni->attr_list.le, lsize); in ni_create_attr_list()
885 ni->attr_list.dirty = false; in ni_create_attr_list()
887 mark_inode_dirty(&ni->vfs_inode); in ni_create_attr_list()
891 kfree(ni->attr_list.le); in ni_create_attr_list()
892 ni->attr_list.le = NULL; in ni_create_attr_list()
893 ni->attr_list.size = 0; in ni_create_attr_list()
902 static int ni_ins_attr_ext(struct ntfs_inode *ni, struct ATTR_LIST_ENTRY *le, in ni_ins_attr_ext() argument
915 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_ins_attr_ext()
917 is_mft = ni->mi.rno == MFT_REC_MFT; in ni_ins_attr_ext()
930 ni->mi.rno == MFT_REC_LOG) { in ni_ins_attr_ext()
936 if (!ni->attr_list.size) { in ni_ins_attr_ext()
937 err = ni_create_attr_list(ni); in ni_ins_attr_ext()
948 err = ni_load_all_mi(ni); in ni_ins_attr_ext()
953 for (node = rb_first(&ni->mi_tree); node; node = rb_next(node)) { in ni_ins_attr_ext()
985 attr = ni_ins_new_attr(ni, mi, le, type, name, name_len, asize, in ni_ins_attr_ext()
999 err = ntfs_look_free_mft(sbi, &rno, is_mft_data, ni, &mi); in ni_ins_attr_ext()
1008 attr = ni_ins_new_attr(ni, mi, le, type, name, name_len, asize, in ni_ins_attr_ext()
1021 ni_remove_mi(ni, mi); in ni_ins_attr_ext()
1045 static int ni_insert_attr(struct ntfs_inode *ni, enum ATTR_TYPE type, in ni_insert_attr() argument
1051 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_insert_attr()
1061 is_mft = ni->mi.rno == MFT_REC_MFT; in ni_insert_attr()
1062 rec = ni->mi.mrec; in ni_insert_attr()
1077 attr = ni_ins_new_attr(ni, &ni->mi, NULL, type, name, name_len, in ni_insert_attr()
1083 *ins_mi = &ni->mi; in ni_insert_attr()
1091 err = ni_ins_attr_ext(ni, NULL, type, name, name_len, asize, in ni_insert_attr()
1108 while ((attr = mi_enum_attr(&ni->mi, attr))) { in ni_insert_attr()
1126 attr = mi_enum_attr(&ni->mi, attr); in ni_insert_attr()
1138 if (ni->attr_list.size) { in ni_insert_attr()
1139 le = al_find_le(ni, NULL, attr); in ni_insert_attr()
1149 err = ni_ins_attr_ext(ni, le, attr->type, Add2Ptr(attr, t16), in ni_insert_attr()
1160 mi_remove_attr(NULL, &ni->mi, attr); in ni_insert_attr()
1169 attr = ni_ins_new_attr(ni, &ni->mi, NULL, type, name, name_len, asize, in ni_insert_attr()
1179 *ins_mi = &ni->mi; in ni_insert_attr()
1186 static int ni_expand_mft_list(struct ntfs_inode *ni) in ni_expand_mft_list() argument
1189 struct runs_tree *run = &ni->file.run; in ni_expand_mft_list()
1195 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_expand_mft_list()
1202 for (node = rb_first(&ni->mi_tree); node; node = rb_next(node)) { in ni_expand_mft_list()
1214 if (ntfs_look_free_mft(sbi, &mft_new, true, ni, &mi_new)) { in ni_expand_mft_list()
1223 ni_remove_mi(ni, mi_new); in ni_expand_mft_list()
1226 attr = mi_find_attr(&ni->mi, NULL, ATTR_DATA, NULL, 0, NULL); in ni_expand_mft_list()
1263 le32_sub_cpu(&ni->mi.mrec->used, done); in ni_expand_mft_list()
1283 attr = ni_ins_new_attr(ni, mi_min, NULL, ATTR_DATA, NULL, 0, in ni_expand_mft_list()
1305 ni_remove_mi(ni, mi_new); in ni_expand_mft_list()
1314 int ni_expand_list(struct ntfs_inode *ni) in ni_expand_list() argument
1320 bool is_mft = ni->mi.rno == MFT_REC_MFT; in ni_expand_list()
1323 mi_get_ref(&ni->mi, &ref); in ni_expand_list()
1326 while ((le = al_enumerate(ni, le))) { in ni_expand_list()
1337 attr = rec_find_attr_le(&ni->mi, le); in ni_expand_list()
1346 err = ni_ins_attr_ext(ni, le, attr->type, attr_name(attr), in ni_expand_list()
1357 mi_remove_attr(NULL, &ni->mi, attr); in ni_expand_list()
1369 err = ni_expand_mft_list(ni); in ni_expand_list()
1380 int ni_insert_nonresident(struct ntfs_inode *ni, enum ATTR_TYPE type, in ni_insert_nonresident() argument
1395 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_insert_nonresident()
1416 err = ni_insert_attr(ni, type, name, name_len, asize, name_off, svcn, in ni_insert_nonresident()
1438 svcn ? 0 : cpu_to_le64((u64)len << ni->mi.sbi->cluster_bits); in ni_insert_nonresident()
1455 int ni_insert_resident(struct ntfs_inode *ni, u32 data_size, in ni_insert_resident() argument
1465 err = ni_insert_attr(ni, type, name, name_len, asize, SIZEOF_RESIDENT, in ni_insert_resident()
1479 le16_add_cpu(&ni->mi.mrec->hard_links, 1); in ni_insert_resident()
1480 ni->mi.dirty = true; in ni_insert_resident()
1493 void ni_remove_attr_le(struct ntfs_inode *ni, struct ATTRIB *attr, in ni_remove_attr_le() argument
1496 mi_remove_attr(ni, mi, attr); in ni_remove_attr_le()
1499 al_remove_le(ni, le); in ni_remove_attr_le()
1507 int ni_delete_all(struct ntfs_inode *ni) in ni_delete_all() argument
1516 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_delete_all()
1520 while ((attr = ni_enum_attr_ex(ni, attr, &le, NULL))) { in ni_delete_all()
1524 mi_get_ref(&ni->mi, &ref); in ni_delete_all()
1545 run_unpack_ex(RUN_DEALLOCATE, sbi, ni->mi.rno, svcn, evcn, svcn, in ni_delete_all()
1549 if (ni->attr_list.size) { in ni_delete_all()
1550 run_deallocate(ni->mi.sbi, &ni->attr_list.run, true); in ni_delete_all()
1551 al_destroy(ni); in ni_delete_all()
1555 for (node = rb_first(&ni->mi_tree); node;) { in ni_delete_all()
1564 ni_remove_mi(ni, mi); in ni_delete_all()
1570 clear_rec_inuse(ni->mi.mrec); in ni_delete_all()
1571 ni->mi.dirty = true; in ni_delete_all()
1572 err = mi_write(&ni->mi, 0); in ni_delete_all()
1574 ntfs_mark_rec_free(sbi, ni->mi.rno); in ni_delete_all()
1583 struct ATTR_FILE_NAME *ni_fname_name(struct ntfs_inode *ni, in ni_fname_name() argument
1596 attr = ni_find_attr(ni, attr, le, ATTR_NAME, NULL, 0, NULL, mi); in ni_fname_name()
1625 struct ATTR_FILE_NAME *ni_fname_type(struct ntfs_inode *ni, u8 name_type, in ni_fname_type() argument
1639 attr = ni_find_attr(ni, attr, le, ATTR_NAME, NULL, 0, NULL, mi); in ni_fname_type()
1656 int ni_new_attr_flags(struct ntfs_inode *ni, enum FILE_ATTRIBUTE new_fa) in ni_new_attr_flags() argument
1663 attr = ni_find_attr(ni, NULL, NULL, ATTR_DATA, NULL, 0, NULL, &mi); in ni_new_attr_flags()
1684 ntfs_inode_warn(&ni->vfs_inode, in ni_new_attr_flags()
1694 &ni->vfs_inode, in ni_new_attr_flags()
1711 ni->vfs_inode.i_mapping->a_ops = &ntfs_aops; in ni_new_attr_flags()
1716 ni->vfs_inode.i_mapping->a_ops = &ntfs_aops_cmpr; in ni_new_attr_flags()
1721 ni->vfs_inode.i_mapping->a_ops = &ntfs_aops; in ni_new_attr_flags()
1736 enum REPARSE_SIGN ni_parse_reparse(struct ntfs_inode *ni, struct ATTRIB *attr, in ni_parse_reparse() argument
1753 if (!attr_load_runs_vcn(ni, ATTR_REPARSE, NULL, 0, &run, 0) && in ni_parse_reparse()
1754 !ntfs_read_run_nb(ni->mi.sbi, &run, 0, buffer, in ni_parse_reparse()
1815 ni_set_ext_compress_bits(ni, bits); in ni_parse_reparse()
1819 ni->ni_flags |= NI_FLAG_DEDUPLICATED; in ni_parse_reparse()
1842 int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo, in ni_fiemap() argument
1846 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_fiemap()
1853 u64 valid = ni->i_valid; in ni_fiemap()
1860 if (S_ISDIR(ni->vfs_inode.i_mode)) { in ni_fiemap()
1861 run = &ni->dir.alloc_run; in ni_fiemap()
1862 attr = ni_find_attr(ni, NULL, NULL, ATTR_ALLOC, I30_NAME, in ni_fiemap()
1864 run_lock = &ni->dir.run_lock; in ni_fiemap()
1866 run = &ni->file.run; in ni_fiemap()
1867 attr = ni_find_attr(ni, NULL, NULL, ATTR_DATA, NULL, 0, NULL, in ni_fiemap()
1877 &ni->vfs_inode, in ni_fiemap()
1881 run_lock = &ni->file.run_lock; in ni_fiemap()
1916 err = attr_load_runs_vcn(ni, attr->type, in ni_fiemap()
1946 if (S_ISDIR(ni->vfs_inode.i_mode)) { in ni_fiemap()
1952 ni, attr, vcn >> attr->nres.c_unit, &clst_data); in ni_fiemap()
2021 int ni_readpage_cmpr(struct ntfs_inode *ni, struct page *page) in ni_readpage_cmpr() argument
2024 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_readpage_cmpr()
2035 if (vbo >= ni->vfs_inode.i_size) { in ni_readpage_cmpr()
2041 if (ni->ni_flags & NI_FLAG_COMPRESSED_MASK) { in ni_readpage_cmpr()
2043 frame_bits = ni_ext_compress_bits(ni); in ni_readpage_cmpr()
2076 err = ni_read_frame(ni, frame_vbo, pages, pages_per_frame); in ni_readpage_cmpr()
2105 int ni_decompress_file(struct ntfs_inode *ni) in ni_decompress_file() argument
2107 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_decompress_file()
2108 struct inode *inode = &ni->vfs_inode; in ni_decompress_file()
2135 frame_bits = ni_ext_compress_bits(ni); in ni_decompress_file()
2163 err = attr_data_get_block(ni, vcn, cend - vcn, &lcn, in ni_decompress_file()
2184 err = ni_read_frame(ni, vbo, pages, pages_per_frame); in ni_decompress_file()
2187 down_read(&ni->file.run_lock); in ni_decompress_file()
2188 err = ntfs_bio_pages(sbi, &ni->file.run, pages, in ni_decompress_file()
2191 up_read(&ni->file.run_lock); in ni_decompress_file()
2212 while ((attr = ni_enum_attr_ex(ni, attr, &le, NULL))) { in ni_decompress_file()
2219 mi_get_ref(&ni->mi, &ref); in ni_decompress_file()
2242 run_unpack_ex(RUN_DEALLOCATE, sbi, ni->mi.rno, svcn, evcn, svcn, in ni_decompress_file()
2249 err = ni_remove_attr(ni, ATTR_DATA, WOF_NAME, ARRAY_SIZE(WOF_NAME), in ni_decompress_file()
2257 err = ni_remove_attr(ni, ATTR_REPARSE, NULL, 0, false, NULL); in ni_decompress_file()
2264 attr = ni_find_attr(ni, NULL, NULL, ATTR_DATA, NULL, 0, NULL, &mi); in ni_decompress_file()
2285 ni->std_fa &= ~(FILE_ATTRIBUTE_SPARSE_FILE | in ni_decompress_file()
2292 ni->ni_flags &= ~NI_FLAG_COMPRESSED_MASK; in ni_decompress_file()
2293 if (ni->file.offs_page) { in ni_decompress_file()
2294 put_page(ni->file.offs_page); in ni_decompress_file()
2295 ni->file.offs_page = NULL; in ni_decompress_file()
2378 int ni_read_frame(struct ntfs_inode *ni, u64 frame_vbo, struct page **pages, in ni_read_frame() argument
2382 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_read_frame()
2388 struct runs_tree *run = &ni->file.run; in ni_read_frame()
2389 u64 valid_size = ni->i_valid; in ni_read_frame()
2411 attr = ni_find_attr(ni, NULL, &le, ATTR_DATA, NULL, 0, NULL, NULL); in ni_read_frame()
2436 if (ni->ni_flags & NI_FLAG_COMPRESSED_MASK) { in ni_read_frame()
2441 u32 frame_bits = ni_ext_compress_bits(ni); in ni_read_frame()
2461 attr = ni_find_attr(ni, attr, &le, ATTR_DATA, WOF_NAME, in ni_read_frame()
2465 &ni->vfs_inode, in ni_read_frame()
2481 frames = (ni->vfs_inode.i_size - 1) >> frame_bits; in ni_read_frame()
2483 err = attr_wof_frame_info(ni, attr, run, frame64, frames, in ni_read_frame()
2489 unc_size = 1 + ((ni->vfs_inode.i_size - 1) & in ni_read_frame()
2515 err = attr_load_runs_range(ni, ATTR_DATA, WOF_NAME, in ni_read_frame()
2536 down_write(&ni->file.run_lock); in ni_read_frame()
2539 err = attr_is_frame_compressed(ni, attr, frame, &clst_data); in ni_read_frame()
2540 up_write(&ni->file.run_lock); in ni_read_frame()
2554 down_read(&ni->file.run_lock); in ni_read_frame()
2558 up_read(&ni->file.run_lock); in ni_read_frame()
2587 down_read(&ni->file.run_lock); in ni_read_frame()
2590 up_read(&ni->file.run_lock); in ni_read_frame()
2605 if (run != &ni->file.run) { in ni_read_frame()
2642 if (run != &ni->file.run) in ni_read_frame()
2663 int ni_write_frame(struct ntfs_inode *ni, struct page **pages, in ni_write_frame() argument
2667 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_write_frame()
2683 attr = ni_find_attr(ni, NULL, &le, ATTR_DATA, NULL, 0, NULL, &mi); in ni_write_frame()
2700 down_write(&ni->file.run_lock); in ni_write_frame()
2701 err = attr_make_nonresident(ni, attr, le, mi, in ni_write_frame()
2703 &ni->file.run, &attr, pages[0]); in ni_write_frame()
2704 up_write(&ni->file.run_lock); in ni_write_frame()
2787 down_write(&ni->file.run_lock); in ni_write_frame()
2788 run_truncate_around(&ni->file.run, le64_to_cpu(attr->nres.svcn)); in ni_write_frame()
2789 err = attr_allocate_frame(ni, frame, compr_size, ni->i_valid); in ni_write_frame()
2790 up_write(&ni->file.run_lock); in ni_write_frame()
2797 down_read(&ni->file.run_lock); in ni_write_frame()
2798 err = ntfs_bio_pages(sbi, &ni->file.run, in ni_write_frame()
2802 up_read(&ni->file.run_lock); in ni_write_frame()
2830 int ni_remove_name(struct ntfs_inode *dir_ni, struct ntfs_inode *ni, in ni_remove_name() argument
2834 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_remove_name()
2847 fname = ni_fname_name(ni, (struct cpu_str *)&de_name->name_len, in ni_remove_name()
2864 ni_remove_attr_le(ni, attr_from_name(fname), mi, le); in ni_remove_name()
2869 fname = ni_fname_type(ni, name_type, &mi, &le); in ni_remove_name()
2885 ni_remove_attr_le(ni, attr_from_name(fname), mi, le); in ni_remove_name()
2897 bool ni_remove_name_undo(struct ntfs_inode *dir_ni, struct ntfs_inode *ni, in ni_remove_name_undo() argument
2900 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_remove_name_undo()
2906 if (ni_insert_resident(ni, de_key_size, ATTR_NAME, NULL, 0, in ni_remove_name_undo()
2912 mi_get_ref(&ni->mi, &de2->ref); in ni_remove_name_undo()
2927 if (ni_insert_resident(ni, de_key_size, ATTR_NAME, NULL, 0, in ni_remove_name_undo()
2933 mi_get_ref(&ni->mi, &de->ref); in ni_remove_name_undo()
2945 int ni_add_name(struct ntfs_inode *dir_ni, struct ntfs_inode *ni, in ni_add_name() argument
2955 mi_get_ref(&ni->mi, &de->ref); in ni_add_name()
2959 err = ni_insert_resident(ni, de_key_size, ATTR_NAME, NULL, 0, &attr, in ni_add_name()
2967 err = indx_insert_entry(&dir_ni->dir, dir_ni, de, ni->mi.sbi, NULL, 0); in ni_add_name()
2969 ni_remove_attr_le(ni, attr, mi, le); in ni_add_name()
2978 struct ntfs_inode *ni, struct NTFS_DE *de, struct NTFS_DE *new_de, in ni_rename() argument
2999 err = ni_add_name(new_dir_ni, ni, new_de); in ni_rename()
3001 err = ni_remove_name(dir_ni, ni, de, &de2, &undo); in ni_rename()
3002 if (err && ni_remove_name(new_dir_ni, ni, new_de, &de2, &undo)) in ni_rename()
3026 struct ntfs_inode *ni = ntfs_i(inode); in ni_is_dirty() local
3029 if (ni->mi.dirty || ni->attr_list.dirty || in ni_is_dirty()
3030 (ni->ni_flags & NI_FLAG_UPDATE_PARENT)) in ni_is_dirty()
3033 for (node = rb_first(&ni->mi_tree); node; node = rb_next(node)) { in ni_is_dirty()
3046 static bool ni_update_parent(struct ntfs_inode *ni, struct NTFS_DUP_INFO *dup, in ni_update_parent() argument
3052 struct ntfs_sb_info *sbi = ni->mi.sbi; in ni_update_parent()
3056 if (ni->mi.mrec->flags & RECORD_FLAG_DIR) { in ni_update_parent()
3064 attr = ni_find_attr(ni, NULL, &le, ATTR_DATA, NULL, 0, NULL, in ni_update_parent()
3074 u64 new_valid = ni->i_valid; in ni_update_parent()
3098 if (ni->ni_flags & NI_FLAG_EA) { in ni_update_parent()
3099 attr = ni_find_attr(ni, attr, &le, ATTR_EA_INFO, NULL, 0, NULL, in ni_update_parent()
3114 while ((attr = ni_find_attr(ni, attr, &le, ATTR_NAME, NULL, 0, NULL, in ni_update_parent()
3127 &ni->vfs_inode, in ni_update_parent()
3157 struct ntfs_inode *ni = ntfs_i(inode); in ni_write_inode() local
3168 if (!ni_trylock(ni)) { in ni_write_inode()
3174 if (is_rec_inuse(ni->mi.mrec) && in ni_write_inode()
3179 std = ni_std(ni); in ni_write_inode()
3204 dup.fa = ni->std_fa; in ni_write_inode()
3211 ni->mi.dirty = true; in ni_write_inode()
3214 (modified || (ni->ni_flags & NI_FLAG_UPDATE_PARENT)) in ni_write_inode()
3219 re_dirty = ni_update_parent(ni, &dup, sync); in ni_write_inode()
3222 ni->ni_flags |= NI_FLAG_UPDATE_PARENT; in ni_write_inode()
3224 ni->ni_flags &= ~NI_FLAG_UPDATE_PARENT; in ni_write_inode()
3228 if (ni->attr_list.size && ni->attr_list.dirty) { in ni_write_inode()
3230 err = ni_try_remove_attr_list(ni); in ni_write_inode()
3235 err = al_update(ni, sync); in ni_write_inode()
3241 for (node = rb_first(&ni->mi_tree); node; node = next) { in ni_write_inode()
3261 rb_erase(node, &ni->mi_tree); in ni_write_inode()
3266 if (ni->mi.dirty) { in ni_write_inode()
3267 err2 = mi_write(&ni->mi, sync); in ni_write_inode()
3272 ni_unlock(ni); in ni_write_inode()