frecord.c (fa3cacf544636b2dc48cfb2f277a2071f14d66a2) | frecord.c (195c52bdd5d5ecfdabf5a7c6159efe299e534f84) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * 4 * Copyright (C) 2019-2021 Paragon Software GmbH, All rights reserved. 5 * 6 */ 7 8#include <linux/blkdev.h> --- 374 unchanged lines hidden (view full) --- 383 * ni_add_subrecord 384 * 385 * allocate + format + attach a new subrecord 386 */ 387bool ni_add_subrecord(struct ntfs_inode *ni, CLST rno, struct mft_inode **mi) 388{ 389 struct mft_inode *m; 390 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * 4 * Copyright (C) 2019-2021 Paragon Software GmbH, All rights reserved. 5 * 6 */ 7 8#include <linux/blkdev.h> --- 374 unchanged lines hidden (view full) --- 383 * ni_add_subrecord 384 * 385 * allocate + format + attach a new subrecord 386 */ 387bool ni_add_subrecord(struct ntfs_inode *ni, CLST rno, struct mft_inode **mi) 388{ 389 struct mft_inode *m; 390 |
391 m = ntfs_zalloc(sizeof(struct mft_inode)); | 391 m = kzalloc(sizeof(struct mft_inode), GFP_NOFS); |
392 if (!m) 393 return false; 394 395 if (mi_format_new(m, ni->mi.sbi, rno, 0, ni->mi.rno == MFT_REC_MFT)) { 396 mi_put(m); 397 return false; 398 } 399 --- 347 unchanged lines hidden (view full) --- 747 748 /* remove from original record */ 749 mi_remove_attr(mi, attr); 750 } 751 752 run_deallocate(sbi, &ni->attr_list.run, true); 753 run_close(&ni->attr_list.run); 754 ni->attr_list.size = 0; | 392 if (!m) 393 return false; 394 395 if (mi_format_new(m, ni->mi.sbi, rno, 0, ni->mi.rno == MFT_REC_MFT)) { 396 mi_put(m); 397 return false; 398 } 399 --- 347 unchanged lines hidden (view full) --- 747 748 /* remove from original record */ 749 mi_remove_attr(mi, attr); 750 } 751 752 run_deallocate(sbi, &ni->attr_list.run, true); 753 run_close(&ni->attr_list.run); 754 ni->attr_list.size = 0; |
755 ntfs_free(ni->attr_list.le); | 755 kfree(ni->attr_list.le); |
756 ni->attr_list.le = NULL; 757 ni->attr_list.dirty = false; 758 759 return 0; 760} 761 762/* 763 * ni_create_attr_list --- 18 unchanged lines hidden (view full) --- 782 is_mft = ni->mi.rno == MFT_REC_MFT; 783 rec = ni->mi.mrec; 784 rs = sbi->record_size; 785 786 /* 787 * Skip estimating exact memory requirement 788 * Looks like one record_size is always enough 789 */ | 756 ni->attr_list.le = NULL; 757 ni->attr_list.dirty = false; 758 759 return 0; 760} 761 762/* 763 * ni_create_attr_list --- 18 unchanged lines hidden (view full) --- 782 is_mft = ni->mi.rno == MFT_REC_MFT; 783 rec = ni->mi.mrec; 784 rs = sbi->record_size; 785 786 /* 787 * Skip estimating exact memory requirement 788 * Looks like one record_size is always enough 789 */ |
790 le = ntfs_malloc(al_aligned(rs)); | 790 le = kmalloc(al_aligned(rs), GFP_NOFS); |
791 if (!le) { 792 err = -ENOMEM; 793 goto out; 794 } 795 796 mi_get_ref(&ni->mi, &le->ref); 797 ni->attr_list.le = le; 798 --- 89 unchanged lines hidden (view full) --- 888 memcpy(resident_data_ex(attr, lsize), ni->attr_list.le, lsize); 889 890 ni->attr_list.dirty = false; 891 892 mark_inode_dirty(&ni->vfs_inode); 893 goto out; 894 895out1: | 791 if (!le) { 792 err = -ENOMEM; 793 goto out; 794 } 795 796 mi_get_ref(&ni->mi, &le->ref); 797 ni->attr_list.le = le; 798 --- 89 unchanged lines hidden (view full) --- 888 memcpy(resident_data_ex(attr, lsize), ni->attr_list.le, lsize); 889 890 ni->attr_list.dirty = false; 891 892 mark_inode_dirty(&ni->vfs_inode); 893 goto out; 894 895out1: |
896 ntfs_free(ni->attr_list.le); | 896 kfree(ni->attr_list.le); |
897 ni->attr_list.le = NULL; 898 ni->attr_list.size = 0; 899 900out: 901 return err; 902} 903 904/* --- 1144 unchanged lines hidden (view full) --- 2049 frame_bits = NTFS_LZNT_CUNIT + sbi->cluster_bits; 2050 } 2051 frame_size = 1u << frame_bits; 2052 frame = vbo >> frame_bits; 2053 frame_vbo = (u64)frame << frame_bits; 2054 idx = (vbo - frame_vbo) >> PAGE_SHIFT; 2055 2056 pages_per_frame = frame_size >> PAGE_SHIFT; | 897 ni->attr_list.le = NULL; 898 ni->attr_list.size = 0; 899 900out: 901 return err; 902} 903 904/* --- 1144 unchanged lines hidden (view full) --- 2049 frame_bits = NTFS_LZNT_CUNIT + sbi->cluster_bits; 2050 } 2051 frame_size = 1u << frame_bits; 2052 frame = vbo >> frame_bits; 2053 frame_vbo = (u64)frame << frame_bits; 2054 idx = (vbo - frame_vbo) >> PAGE_SHIFT; 2055 2056 pages_per_frame = frame_size >> PAGE_SHIFT; |
2057 pages = ntfs_zalloc(pages_per_frame * sizeof(struct page *)); | 2057 pages = kzalloc(pages_per_frame * sizeof(struct page *), GFP_NOFS); |
2058 if (!pages) { 2059 err = -ENOMEM; 2060 goto out; 2061 } 2062 2063 pages[idx] = page; 2064 index = frame_vbo >> PAGE_SHIFT; 2065 gfp_mask = mapping_gfp_mask(mapping); --- 21 unchanged lines hidden (view full) --- 2087 if (i == idx) 2088 continue; 2089 unlock_page(pg); 2090 put_page(pg); 2091 } 2092 2093out: 2094 /* At this point, err contains 0 or -EIO depending on the "critical" page */ | 2058 if (!pages) { 2059 err = -ENOMEM; 2060 goto out; 2061 } 2062 2063 pages[idx] = page; 2064 index = frame_vbo >> PAGE_SHIFT; 2065 gfp_mask = mapping_gfp_mask(mapping); --- 21 unchanged lines hidden (view full) --- 2087 if (i == idx) 2088 continue; 2089 unlock_page(pg); 2090 put_page(pg); 2091 } 2092 2093out: 2094 /* At this point, err contains 0 or -EIO depending on the "critical" page */ |
2095 ntfs_free(pages); | 2095 kfree(pages); |
2096 unlock_page(page); 2097 2098 return err; 2099} 2100 2101#ifdef CONFIG_NTFS3_LZX_XPRESS 2102/* 2103 * decompress lzx/xpress compressed file --- 28 unchanged lines hidden (view full) --- 2132 if (cend > wnd_zeroes(&sbi->used.bitmap)) { 2133 err = -ENOSPC; 2134 goto out; 2135 } 2136 2137 frame_bits = ni_ext_compress_bits(ni); 2138 frame_size = 1u << frame_bits; 2139 pages_per_frame = frame_size >> PAGE_SHIFT; | 2096 unlock_page(page); 2097 2098 return err; 2099} 2100 2101#ifdef CONFIG_NTFS3_LZX_XPRESS 2102/* 2103 * decompress lzx/xpress compressed file --- 28 unchanged lines hidden (view full) --- 2132 if (cend > wnd_zeroes(&sbi->used.bitmap)) { 2133 err = -ENOSPC; 2134 goto out; 2135 } 2136 2137 frame_bits = ni_ext_compress_bits(ni); 2138 frame_size = 1u << frame_bits; 2139 pages_per_frame = frame_size >> PAGE_SHIFT; |
2140 pages = ntfs_zalloc(pages_per_frame * sizeof(struct page *)); | 2140 pages = kzalloc(pages_per_frame * sizeof(struct page *), GFP_NOFS); |
2141 if (!pages) { 2142 err = -ENOMEM; 2143 goto out; 2144 } 2145 2146 /* 2147 * Step 1: decompress data and copy to new allocated clusters 2148 */ --- 144 unchanged lines hidden (view full) --- 2293 ni->ni_flags &= ~NI_FLAG_COMPRESSED_MASK; 2294 if (ni->file.offs_page) { 2295 put_page(ni->file.offs_page); 2296 ni->file.offs_page = NULL; 2297 } 2298 mapping->a_ops = &ntfs_aops; 2299 2300out: | 2141 if (!pages) { 2142 err = -ENOMEM; 2143 goto out; 2144 } 2145 2146 /* 2147 * Step 1: decompress data and copy to new allocated clusters 2148 */ --- 144 unchanged lines hidden (view full) --- 2293 ni->ni_flags &= ~NI_FLAG_COMPRESSED_MASK; 2294 if (ni->file.offs_page) { 2295 put_page(ni->file.offs_page); 2296 ni->file.offs_page = NULL; 2297 } 2298 mapping->a_ops = &ntfs_aops; 2299 2300out: |
2301 ntfs_free(pages); | 2301 kfree(pages); |
2302 if (err) { 2303 make_bad_inode(inode); 2304 ntfs_set_state(sbi, NTFS_DIRTY_ERROR); 2305 } 2306 2307 return err; 2308} 2309 --- 249 unchanged lines hidden (view full) --- 2559 vbo_disk = frame_vbo; 2560 npages_disk = (ondisk_size + PAGE_SIZE - 1) >> PAGE_SHIFT; 2561 } else { 2562 __builtin_unreachable(); 2563 err = -EINVAL; 2564 goto out1; 2565 } 2566 | 2302 if (err) { 2303 make_bad_inode(inode); 2304 ntfs_set_state(sbi, NTFS_DIRTY_ERROR); 2305 } 2306 2307 return err; 2308} 2309 --- 249 unchanged lines hidden (view full) --- 2559 vbo_disk = frame_vbo; 2560 npages_disk = (ondisk_size + PAGE_SIZE - 1) >> PAGE_SHIFT; 2561 } else { 2562 __builtin_unreachable(); 2563 err = -EINVAL; 2564 goto out1; 2565 } 2566 |
2567 pages_disk = ntfs_zalloc(npages_disk * sizeof(struct page *)); | 2567 pages_disk = kzalloc(npages_disk * sizeof(struct page *), GFP_NOFS); |
2568 if (!pages_disk) { 2569 err = -ENOMEM; 2570 goto out2; 2571 } 2572 2573 for (i = 0; i < npages_disk; i++) { 2574 pg = alloc_page(GFP_KERNEL); 2575 if (!pg) { --- 52 unchanged lines hidden (view full) --- 2628 for (i = 0; i < npages_disk; i++) { 2629 pg = pages_disk[i]; 2630 if (pg) { 2631 kunmap(pg); 2632 unlock_page(pg); 2633 put_page(pg); 2634 } 2635 } | 2568 if (!pages_disk) { 2569 err = -ENOMEM; 2570 goto out2; 2571 } 2572 2573 for (i = 0; i < npages_disk; i++) { 2574 pg = alloc_page(GFP_KERNEL); 2575 if (!pg) { --- 52 unchanged lines hidden (view full) --- 2628 for (i = 0; i < npages_disk; i++) { 2629 pg = pages_disk[i]; 2630 if (pg) { 2631 kunmap(pg); 2632 unlock_page(pg); 2633 put_page(pg); 2634 } 2635 } |
2636 ntfs_free(pages_disk); | 2636 kfree(pages_disk); |
2637 2638out2: 2639#ifdef CONFIG_NTFS3_LZX_XPRESS 2640 if (run != &ni->file.run) 2641 run_free(run); 2642#endif 2643out1: 2644 vunmap(frame_mem); --- 59 unchanged lines hidden (view full) --- 2704 goto out; 2705 } 2706 2707 if (attr->nres.c_unit != NTFS_LZNT_CUNIT) { 2708 err = -EOPNOTSUPP; 2709 goto out; 2710 } 2711 | 2637 2638out2: 2639#ifdef CONFIG_NTFS3_LZX_XPRESS 2640 if (run != &ni->file.run) 2641 run_free(run); 2642#endif 2643out1: 2644 vunmap(frame_mem); --- 59 unchanged lines hidden (view full) --- 2704 goto out; 2705 } 2706 2707 if (attr->nres.c_unit != NTFS_LZNT_CUNIT) { 2708 err = -EOPNOTSUPP; 2709 goto out; 2710 } 2711 |
2712 pages_disk = ntfs_zalloc(pages_per_frame * sizeof(struct page *)); | 2712 pages_disk = kzalloc(pages_per_frame * sizeof(struct page *), 2713 GFP_NOFS); |
2713 if (!pages_disk) { 2714 err = -ENOMEM; 2715 goto out; 2716 } 2717 2718 for (i = 0; i < pages_per_frame; i++) { 2719 pg = alloc_page(GFP_KERNEL); 2720 if (!pg) { --- 43 unchanged lines hidden (view full) --- 2764 sbi->compress.lznt = lznt; 2765 lznt = NULL; 2766 } 2767 2768 /* compress: frame_mem -> frame_ondisk */ 2769 compr_size = compress_lznt(frame_mem, frame_size, frame_ondisk, 2770 frame_size, sbi->compress.lznt); 2771 mutex_unlock(&sbi->compress.mtx_lznt); | 2714 if (!pages_disk) { 2715 err = -ENOMEM; 2716 goto out; 2717 } 2718 2719 for (i = 0; i < pages_per_frame; i++) { 2720 pg = alloc_page(GFP_KERNEL); 2721 if (!pg) { --- 43 unchanged lines hidden (view full) --- 2765 sbi->compress.lznt = lznt; 2766 lznt = NULL; 2767 } 2768 2769 /* compress: frame_mem -> frame_ondisk */ 2770 compr_size = compress_lznt(frame_mem, frame_size, frame_ondisk, 2771 frame_size, sbi->compress.lznt); 2772 mutex_unlock(&sbi->compress.mtx_lznt); |
2772 ntfs_free(lznt); | 2773 kfree(lznt); |
2773 2774 if (compr_size + sbi->cluster_size > frame_size) { 2775 /* frame is not compressed */ 2776 compr_size = frame_size; 2777 ondisk_size = frame_size; 2778 } else if (compr_size) { 2779 /* frame is compressed */ 2780 ondisk_size = ntfs_up_cluster(sbi, compr_size); --- 32 unchanged lines hidden (view full) --- 2813 for (i = 0; i < pages_per_frame; i++) { 2814 pg = pages_disk[i]; 2815 if (pg) { 2816 kunmap(pg); 2817 unlock_page(pg); 2818 put_page(pg); 2819 } 2820 } | 2774 2775 if (compr_size + sbi->cluster_size > frame_size) { 2776 /* frame is not compressed */ 2777 compr_size = frame_size; 2778 ondisk_size = frame_size; 2779 } else if (compr_size) { 2780 /* frame is compressed */ 2781 ondisk_size = ntfs_up_cluster(sbi, compr_size); --- 32 unchanged lines hidden (view full) --- 2814 for (i = 0; i < pages_per_frame; i++) { 2815 pg = pages_disk[i]; 2816 if (pg) { 2817 kunmap(pg); 2818 unlock_page(pg); 2819 put_page(pg); 2820 } 2821 } |
2821 ntfs_free(pages_disk); | 2822 kfree(pages_disk); |
2822out: 2823 return err; 2824} 2825 2826/* 2827 * update duplicate info of ATTR_FILE_NAME in MFT and in parent directories 2828 */ 2829static bool ni_update_parent(struct ntfs_inode *ni, struct NTFS_DUP_INFO *dup, --- 246 unchanged lines hidden --- | 2823out: 2824 return err; 2825} 2826 2827/* 2828 * update duplicate info of ATTR_FILE_NAME in MFT and in parent directories 2829 */ 2830static bool ni_update_parent(struct ntfs_inode *ni, struct NTFS_DUP_INFO *dup, --- 246 unchanged lines hidden --- |