1 // SPDX-License-Identifier: GPL-2.0
4 * Copyright (C) 2019-2021 Paragon Software GmbH, All rights reserved.
8 #include <linux/blkdev.h>
9 #include <linux/buffer_head.h>
11 #include <linux/nls.h>
17 static const struct INDEX_NAMES
{
20 } s_index_names
[INDEX_MUTEX_TOTAL
] = {
21 { I30_NAME
, ARRAY_SIZE(I30_NAME
) }, { SII_NAME
, ARRAY_SIZE(SII_NAME
) },
22 { SDH_NAME
, ARRAY_SIZE(SDH_NAME
) }, { SO_NAME
, ARRAY_SIZE(SO_NAME
) },
23 { SQ_NAME
, ARRAY_SIZE(SQ_NAME
) }, { SR_NAME
, ARRAY_SIZE(SR_NAME
) },
27 * cmp_fnames - Compare two names in index.
30 * Both names are little endian on-disk ATTR_FILE_NAME structs.
32 * key1 - cpu_str, key2 - ATTR_FILE_NAME
34 static int cmp_fnames(const void *key1
, size_t l1
, const void *key2
, size_t l2
,
37 const struct ATTR_FILE_NAME
*f2
= key2
;
38 const struct ntfs_sb_info
*sbi
= data
;
39 const struct ATTR_FILE_NAME
*f1
;
43 if (l2
<= offsetof(struct ATTR_FILE_NAME
, name
))
46 fsize2
= fname_full_size(f2
);
50 both_case
= f2
->type
!= FILE_NAME_DOS
/*&& !sbi->options.nocase*/;
52 const struct le_str
*s2
= (struct le_str
*)&f2
->name_len
;
55 * If names are equal (case insensitive)
56 * try to compare it case sensitive.
58 return ntfs_cmp_names_cpu(key1
, s2
, sbi
->upcase
, both_case
);
62 return ntfs_cmp_names(f1
->name
, f1
->name_len
, f2
->name
, f2
->name_len
,
63 sbi
->upcase
, both_case
);
67 * cmp_uint - $SII of $Secure and $Q of Quota
69 static int cmp_uint(const void *key1
, size_t l1
, const void *key2
, size_t l2
,
86 * cmp_sdh - $SDH of $Secure
88 static int cmp_sdh(const void *key1
, size_t l1
, const void *key2
, size_t l2
,
91 const struct SECURITY_KEY
*k1
= key1
;
92 const struct SECURITY_KEY
*k2
= key2
;
95 if (l2
< sizeof(struct SECURITY_KEY
))
98 t1
= le32_to_cpu(k1
->hash
);
99 t2
= le32_to_cpu(k2
->hash
);
101 /* First value is a hash value itself. */
107 /* Second value is security Id. */
109 t1
= le32_to_cpu(k1
->sec_id
);
110 t2
= le32_to_cpu(k2
->sec_id
);
121 * cmp_uints - $O of ObjId and "$R" for Reparse.
123 static int cmp_uints(const void *key1
, size_t l1
, const void *key2
, size_t l2
,
126 const __le32
*k1
= key1
;
127 const __le32
*k2
= key2
;
130 if ((size_t)data
== 1) {
132 * ni_delete_all -> ntfs_remove_reparse ->
133 * delete all with this reference.
134 * k1, k2 - pointers to REPARSE_KEY
137 k1
+= 1; // Skip REPARSE_KEY.ReparseTag
138 k2
+= 1; // Skip REPARSE_KEY.ReparseTag
139 if (l2
<= sizeof(int))
142 if (l1
<= sizeof(int))
147 if (l2
< sizeof(int))
150 for (count
= min(l1
, l2
) >> 2; count
> 0; --count
, ++k1
, ++k2
) {
151 u32 t1
= le32_to_cpu(*k1
);
152 u32 t2
= le32_to_cpu(*k2
);
168 static inline NTFS_CMP_FUNC
get_cmp_func(const struct INDEX_ROOT
*root
)
170 switch (root
->type
) {
172 if (root
->rule
== NTFS_COLLATION_TYPE_FILENAME
)
176 switch (root
->rule
) {
177 case NTFS_COLLATION_TYPE_UINT
:
179 case NTFS_COLLATION_TYPE_SECURITY_HASH
:
181 case NTFS_COLLATION_TYPE_UINTS
:
196 struct mft_inode
*mi
;
197 struct buffer_head
*bh
;
204 static int bmp_buf_get(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
205 size_t bit
, struct bmp_buf
*bbuf
)
208 size_t data_size
, valid_size
, vbo
, off
= bit
>> 3;
209 struct ntfs_sb_info
*sbi
= ni
->mi
.sbi
;
210 CLST vcn
= off
>> sbi
->cluster_bits
;
211 struct ATTR_LIST_ENTRY
*le
= NULL
;
212 struct buffer_head
*bh
;
213 struct super_block
*sb
;
215 const struct INDEX_NAMES
*in
= &s_index_names
[indx
->type
];
219 b
= ni_find_attr(ni
, NULL
, &le
, ATTR_BITMAP
, in
->name
, in
->name_len
,
226 data_size
= le32_to_cpu(b
->res
.data_size
);
228 if (off
>= data_size
)
231 bbuf
->buf
= (ulong
*)resident_data(b
);
233 bbuf
->nbits
= data_size
* 8;
238 data_size
= le64_to_cpu(b
->nres
.data_size
);
239 if (WARN_ON(off
>= data_size
)) {
240 /* Looks like filesystem error. */
244 valid_size
= le64_to_cpu(b
->nres
.valid_size
);
246 bh
= ntfs_bread_run(sbi
, &indx
->bitmap_run
, off
);
255 if (buffer_locked(bh
))
256 __wait_on_buffer(bh
);
261 blocksize
= sb
->s_blocksize
;
263 vbo
= off
& ~(size_t)sbi
->block_mask
;
265 bbuf
->new_valid
= vbo
+ blocksize
;
266 if (bbuf
->new_valid
<= valid_size
)
268 else if (bbuf
->new_valid
> data_size
)
269 bbuf
->new_valid
= data_size
;
271 if (vbo
>= valid_size
) {
272 memset(bh
->b_data
, 0, blocksize
);
273 } else if (vbo
+ blocksize
> valid_size
) {
274 u32 voff
= valid_size
& sbi
->block_mask
;
276 memset(bh
->b_data
+ voff
, 0, blocksize
- voff
);
279 bbuf
->buf
= (ulong
*)bh
->b_data
;
280 bbuf
->bit
= 8 * (off
& ~(size_t)sbi
->block_mask
);
281 bbuf
->nbits
= 8 * blocksize
;
286 static void bmp_buf_put(struct bmp_buf
*bbuf
, bool dirty
)
288 struct buffer_head
*bh
= bbuf
->bh
;
289 struct ATTRIB
*b
= bbuf
->b
;
292 if (b
&& !b
->non_res
&& dirty
)
293 bbuf
->mi
->dirty
= true;
300 if (bbuf
->new_valid
) {
301 b
->nres
.valid_size
= cpu_to_le64(bbuf
->new_valid
);
302 bbuf
->mi
->dirty
= true;
305 set_buffer_uptodate(bh
);
306 mark_buffer_dirty(bh
);
314 * indx_mark_used - Mark the bit @bit as used.
316 static int indx_mark_used(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
322 err
= bmp_buf_get(indx
, ni
, bit
, &bbuf
);
326 __set_bit(bit
- bbuf
.bit
, bbuf
.buf
);
328 bmp_buf_put(&bbuf
, true);
334 * indx_mark_free - Mark the bit @bit as free.
336 static int indx_mark_free(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
342 err
= bmp_buf_get(indx
, ni
, bit
, &bbuf
);
346 __clear_bit(bit
- bbuf
.bit
, bbuf
.buf
);
348 bmp_buf_put(&bbuf
, true);
356 * If ntfs_readdir calls this function (indx_used_bit -> scan_nres_bitmap),
357 * inode is shared locked and no ni_lock.
358 * Use rw_semaphore for read/write access to bitmap_run.
360 static int scan_nres_bitmap(struct ntfs_inode
*ni
, struct ATTRIB
*bitmap
,
361 struct ntfs_index
*indx
, size_t from
,
362 bool (*fn
)(const ulong
*buf
, u32 bit
, u32 bits
,
366 struct ntfs_sb_info
*sbi
= ni
->mi
.sbi
;
367 struct super_block
*sb
= sbi
->sb
;
368 struct runs_tree
*run
= &indx
->bitmap_run
;
369 struct rw_semaphore
*lock
= &indx
->run_lock
;
370 u32 nbits
= sb
->s_blocksize
* 8;
371 u32 blocksize
= sb
->s_blocksize
;
372 u64 valid_size
= le64_to_cpu(bitmap
->nres
.valid_size
);
373 u64 data_size
= le64_to_cpu(bitmap
->nres
.data_size
);
374 sector_t eblock
= bytes_to_block(sb
, data_size
);
375 size_t vbo
= from
>> 3;
376 sector_t blk
= (vbo
& sbi
->cluster_mask
) >> sb
->s_blocksize_bits
;
377 sector_t vblock
= vbo
>> sb
->s_blocksize_bits
;
378 sector_t blen
, block
;
379 CLST lcn
, clen
, vcn
, vcn_next
;
381 struct buffer_head
*bh
;
386 if (vblock
>= eblock
)
390 vcn
= vbo
>> sbi
->cluster_bits
;
393 ok
= run_lookup_entry(run
, vcn
, &lcn
, &clen
, &idx
);
399 const struct INDEX_NAMES
*name
= &s_index_names
[indx
->type
];
402 err
= attr_load_runs_vcn(ni
, ATTR_BITMAP
, name
->name
,
403 name
->name_len
, run
, vcn
);
408 ok
= run_lookup_entry(run
, vcn
, &lcn
, &clen
, &idx
);
414 blen
= (sector_t
)clen
* sbi
->blocks_per_cluster
;
415 block
= (sector_t
)lcn
* sbi
->blocks_per_cluster
;
417 for (; blk
< blen
; blk
++, from
= 0) {
418 bh
= ntfs_bread(sb
, block
+ blk
);
422 vbo
= (u64
)vblock
<< sb
->s_blocksize_bits
;
423 if (vbo
>= valid_size
) {
424 memset(bh
->b_data
, 0, blocksize
);
425 } else if (vbo
+ blocksize
> valid_size
) {
426 u32 voff
= valid_size
& sbi
->block_mask
;
428 memset(bh
->b_data
+ voff
, 0, blocksize
- voff
);
431 if (vbo
+ blocksize
> data_size
)
432 nbits
= 8 * (data_size
- vbo
);
434 ok
= nbits
> from
? (*fn
)((ulong
*)bh
->b_data
, from
, nbits
, ret
)
443 if (++vblock
>= eblock
) {
449 vcn_next
= vcn
+ clen
;
451 ok
= run_get_entry(run
, ++idx
, &vcn
, &lcn
, &clen
) && vcn
== vcn_next
;
458 static bool scan_for_free(const ulong
*buf
, u32 bit
, u32 bits
, size_t *ret
)
460 size_t pos
= find_next_zero_bit(buf
, bits
, bit
);
469 * indx_find_free - Look for free bit.
471 * Return: -1 if no free bits.
473 static int indx_find_free(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
474 size_t *bit
, struct ATTRIB
**bitmap
)
477 struct ATTR_LIST_ENTRY
*le
= NULL
;
478 const struct INDEX_NAMES
*in
= &s_index_names
[indx
->type
];
481 b
= ni_find_attr(ni
, NULL
, &le
, ATTR_BITMAP
, in
->name
, in
->name_len
,
491 u32 nbits
= 8 * le32_to_cpu(b
->res
.data_size
);
492 size_t pos
= find_next_zero_bit(resident_data(b
), nbits
, 0);
497 err
= scan_nres_bitmap(ni
, b
, indx
, 0, &scan_for_free
, bit
);
506 static bool scan_for_used(const ulong
*buf
, u32 bit
, u32 bits
, size_t *ret
)
508 size_t pos
= find_next_bit(buf
, bits
, bit
);
517 * indx_used_bit - Look for used bit.
519 * Return: MINUS_ONE_T if no used bits.
521 int indx_used_bit(struct ntfs_index
*indx
, struct ntfs_inode
*ni
, size_t *bit
)
524 struct ATTR_LIST_ENTRY
*le
= NULL
;
526 const struct INDEX_NAMES
*in
= &s_index_names
[indx
->type
];
529 b
= ni_find_attr(ni
, NULL
, &le
, ATTR_BITMAP
, in
->name
, in
->name_len
,
538 u32 nbits
= le32_to_cpu(b
->res
.data_size
) * 8;
539 size_t pos
= find_next_bit(resident_data(b
), nbits
, from
);
544 err
= scan_nres_bitmap(ni
, b
, indx
, from
, &scan_for_used
, bit
);
555 * Find a point at which the index allocation buffer would like to be split.
556 * NOTE: This function should never return 'END' entry NULL returns on error.
558 static const struct NTFS_DE
*hdr_find_split(const struct INDEX_HDR
*hdr
)
561 const struct NTFS_DE
*e
= hdr_first_de(hdr
);
562 u32 used_2
= le32_to_cpu(hdr
->used
) >> 1;
565 if (!e
|| de_is_last(e
))
568 esize
= le16_to_cpu(e
->size
);
569 for (o
= le32_to_cpu(hdr
->de_off
) + esize
; o
< used_2
; o
+= esize
) {
570 const struct NTFS_DE
*p
= e
;
574 /* We must not return END entry. */
578 esize
= le16_to_cpu(e
->size
);
585 * hdr_insert_head - Insert some entries at the beginning of the buffer.
587 * It is used to insert entries into a newly-created buffer.
589 static const struct NTFS_DE
*hdr_insert_head(struct INDEX_HDR
*hdr
,
590 const void *ins
, u32 ins_bytes
)
593 struct NTFS_DE
*e
= hdr_first_de(hdr
);
594 u32 used
= le32_to_cpu(hdr
->used
);
599 /* Now we just make room for the inserted entries and jam it in. */
600 to_move
= used
- le32_to_cpu(hdr
->de_off
);
601 memmove(Add2Ptr(e
, ins_bytes
), e
, to_move
);
602 memcpy(e
, ins
, ins_bytes
);
603 hdr
->used
= cpu_to_le32(used
+ ins_bytes
);
608 void fnd_clear(struct ntfs_fnd
*fnd
)
612 for (i
= 0; i
< fnd
->level
; i
++) {
613 struct indx_node
*n
= fnd
->nodes
[i
];
619 fnd
->nodes
[i
] = NULL
;
625 static int fnd_push(struct ntfs_fnd
*fnd
, struct indx_node
*n
,
631 if (i
< 0 || i
>= ARRAY_SIZE(fnd
->nodes
))
639 static struct indx_node
*fnd_pop(struct ntfs_fnd
*fnd
)
646 fnd
->nodes
[i
] = NULL
;
652 static bool fnd_is_empty(struct ntfs_fnd
*fnd
)
655 return !fnd
->root_de
;
657 return !fnd
->de
[fnd
->level
- 1];
661 * hdr_find_e - Locate an entry the index buffer.
663 * If no matching entry is found, it returns the first entry which is greater
664 * than the desired entry If the search key is greater than all the entries the
665 * buffer, it returns the 'end' entry. This function does a binary search of the
666 * current index buffer, for the first entry that is <= to the search value.
668 * Return: NULL if error.
670 static struct NTFS_DE
*hdr_find_e(const struct ntfs_index
*indx
,
671 const struct INDEX_HDR
*hdr
, const void *key
,
672 size_t key_len
, const void *ctx
, int *diff
)
675 NTFS_CMP_FUNC cmp
= indx
->cmp
;
676 u32 e_size
, e_key_len
;
677 u32 end
= le32_to_cpu(hdr
->used
);
678 u32 off
= le32_to_cpu(hdr
->de_off
);
680 #ifdef NTFS3_INDEX_BINARY_SEARCH
681 int max_idx
= 0, fnd
, min_idx
;
688 offs
= kmalloc(sizeof(u16
) * nslots
, GFP_NOFS
);
692 /* Use binary search algorithm. */
694 if (off
+ sizeof(struct NTFS_DE
) > end
) {
698 e
= Add2Ptr(hdr
, off
);
699 e_size
= le16_to_cpu(e
->size
);
701 if (e_size
< sizeof(struct NTFS_DE
) || off
+ e_size
> end
) {
706 if (max_idx
>= nslots
) {
708 int new_slots
= ALIGN(2 * nslots
, 8);
710 ptr
= kmalloc(sizeof(u16
) * new_slots
, GFP_NOFS
);
712 memcpy(ptr
, offs
, sizeof(u16
) * max_idx
);
720 /* Store entry table. */
723 if (!de_is_last(e
)) {
730 * Table of pointers is created.
731 * Use binary search to find entry that is <= to the search value.
736 while (min_idx
<= max_idx
) {
737 int mid_idx
= min_idx
+ ((max_idx
- min_idx
) >> 1);
740 e
= Add2Ptr(hdr
, offs
[mid_idx
]);
742 e_key_len
= le16_to_cpu(e
->key_size
);
744 diff2
= (*cmp
)(key
, key_len
, e
+ 1, e_key_len
, ctx
);
752 max_idx
= mid_idx
- 1;
757 min_idx
= mid_idx
+ 1;
767 e
= Add2Ptr(hdr
, offs
[fnd
]);
777 * Entries index are sorted.
778 * Enumerate all entries until we find entry
779 * that is <= to the search value.
781 if (off
+ sizeof(struct NTFS_DE
) > end
)
784 e
= Add2Ptr(hdr
, off
);
785 e_size
= le16_to_cpu(e
->size
);
787 if (e_size
< sizeof(struct NTFS_DE
) || off
+ e_size
> end
)
792 e_key_len
= le16_to_cpu(e
->key_size
);
794 *diff
= (*cmp
)(key
, key_len
, e
+ 1, e_key_len
, ctx
);
809 * hdr_insert_de - Insert an index entry into the buffer.
811 * 'before' should be a pointer previously returned from hdr_find_e.
813 static struct NTFS_DE
*hdr_insert_de(const struct ntfs_index
*indx
,
814 struct INDEX_HDR
*hdr
,
815 const struct NTFS_DE
*de
,
816 struct NTFS_DE
*before
, const void *ctx
)
819 size_t off
= PtrOffset(hdr
, before
);
820 u32 used
= le32_to_cpu(hdr
->used
);
821 u32 total
= le32_to_cpu(hdr
->total
);
822 u16 de_size
= le16_to_cpu(de
->size
);
824 /* First, check to see if there's enough room. */
825 if (used
+ de_size
> total
)
828 /* We know there's enough space, so we know we'll succeed. */
830 /* Check that before is inside Index. */
831 if (off
>= used
|| off
< le32_to_cpu(hdr
->de_off
) ||
832 off
+ le16_to_cpu(before
->size
) > total
) {
837 /* No insert point is applied. Get it manually. */
838 before
= hdr_find_e(indx
, hdr
, de
+ 1, le16_to_cpu(de
->key_size
), ctx
,
842 off
= PtrOffset(hdr
, before
);
845 /* Now we just make room for the entry and jam it in. */
846 memmove(Add2Ptr(before
, de_size
), before
, used
- off
);
848 hdr
->used
= cpu_to_le32(used
+ de_size
);
849 memcpy(before
, de
, de_size
);
855 * hdr_delete_de - Remove an entry from the index buffer.
857 static inline struct NTFS_DE
*hdr_delete_de(struct INDEX_HDR
*hdr
,
860 u32 used
= le32_to_cpu(hdr
->used
);
861 u16 esize
= le16_to_cpu(re
->size
);
862 u32 off
= PtrOffset(hdr
, re
);
863 int bytes
= used
- (off
+ esize
);
865 if (off
>= used
|| esize
< sizeof(struct NTFS_DE
) ||
866 bytes
< sizeof(struct NTFS_DE
))
869 hdr
->used
= cpu_to_le32(used
- esize
);
870 memmove(re
, Add2Ptr(re
, esize
), bytes
);
875 void indx_clear(struct ntfs_index
*indx
)
877 run_close(&indx
->alloc_run
);
878 run_close(&indx
->bitmap_run
);
881 int indx_init(struct ntfs_index
*indx
, struct ntfs_sb_info
*sbi
,
882 const struct ATTRIB
*attr
, enum index_mutex_classed type
)
885 const struct INDEX_ROOT
*root
= resident_data(attr
);
887 /* Check root fields. */
888 if (!root
->index_block_clst
)
892 indx
->idx2vbn_bits
= __ffs(root
->index_block_clst
);
894 t32
= le32_to_cpu(root
->index_block_size
);
895 indx
->index_bits
= blksize_bits(t32
);
897 /* Check index record size. */
898 if (t32
< sbi
->cluster_size
) {
899 /* Index record is smaller than a cluster, use 512 blocks. */
900 if (t32
!= root
->index_block_clst
* SECTOR_SIZE
)
903 /* Check alignment to a cluster. */
904 if ((sbi
->cluster_size
>> SECTOR_SHIFT
) &
905 (root
->index_block_clst
- 1)) {
909 indx
->vbn2vbo_bits
= SECTOR_SHIFT
;
911 /* Index record must be a multiple of cluster size. */
912 if (t32
!= root
->index_block_clst
<< sbi
->cluster_bits
)
915 indx
->vbn2vbo_bits
= sbi
->cluster_bits
;
918 init_rwsem(&indx
->run_lock
);
920 indx
->cmp
= get_cmp_func(root
);
921 return indx
->cmp
? 0 : -EINVAL
;
924 static struct indx_node
*indx_new(struct ntfs_index
*indx
,
925 struct ntfs_inode
*ni
, CLST vbn
,
926 const __le64
*sub_vbn
)
931 struct INDEX_HDR
*hdr
;
932 struct INDEX_BUFFER
*index
;
933 u64 vbo
= (u64
)vbn
<< indx
->vbn2vbo_bits
;
934 u32 bytes
= 1u << indx
->index_bits
;
938 r
= kzalloc(sizeof(struct indx_node
), GFP_NOFS
);
940 return ERR_PTR(-ENOMEM
);
942 index
= kzalloc(bytes
, GFP_NOFS
);
945 return ERR_PTR(-ENOMEM
);
948 err
= ntfs_get_bh(ni
->mi
.sbi
, &indx
->alloc_run
, vbo
, bytes
, &r
->nb
);
957 index
->rhdr
.sign
= NTFS_INDX_SIGNATURE
;
958 index
->rhdr
.fix_off
= cpu_to_le16(sizeof(struct INDEX_BUFFER
)); // 0x28
959 fn
= (bytes
>> SECTOR_SHIFT
) + 1; // 9
960 index
->rhdr
.fix_num
= cpu_to_le16(fn
);
961 index
->vbn
= cpu_to_le64(vbn
);
963 eo
= ALIGN(sizeof(struct INDEX_BUFFER
) + fn
* sizeof(short), 8);
964 hdr
->de_off
= cpu_to_le32(eo
);
966 e
= Add2Ptr(hdr
, eo
);
969 e
->flags
= NTFS_IE_LAST
| NTFS_IE_HAS_SUBNODES
;
970 e
->size
= cpu_to_le16(sizeof(struct NTFS_DE
) + sizeof(u64
));
972 cpu_to_le32(eo
+ sizeof(struct NTFS_DE
) + sizeof(u64
));
973 de_set_vbn_le(e
, *sub_vbn
);
976 e
->size
= cpu_to_le16(sizeof(struct NTFS_DE
));
977 hdr
->used
= cpu_to_le32(eo
+ sizeof(struct NTFS_DE
));
978 e
->flags
= NTFS_IE_LAST
;
981 hdr
->total
= cpu_to_le32(bytes
- offsetof(struct INDEX_BUFFER
, ihdr
));
987 struct INDEX_ROOT
*indx_get_root(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
988 struct ATTRIB
**attr
, struct mft_inode
**mi
)
990 struct ATTR_LIST_ENTRY
*le
= NULL
;
992 const struct INDEX_NAMES
*in
= &s_index_names
[indx
->type
];
994 a
= ni_find_attr(ni
, NULL
, &le
, ATTR_ROOT
, in
->name
, in
->name_len
, NULL
,
1002 return resident_data_ex(a
, sizeof(struct INDEX_ROOT
));
1005 static int indx_write(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
1006 struct indx_node
*node
, int sync
)
1008 struct INDEX_BUFFER
*ib
= node
->index
;
1010 return ntfs_write_bh(ni
->mi
.sbi
, &ib
->rhdr
, &node
->nb
, sync
);
1016 * If ntfs_readdir calls this function
1017 * inode is shared locked and no ni_lock.
1018 * Use rw_semaphore for read/write access to alloc_run.
1020 int indx_read(struct ntfs_index
*indx
, struct ntfs_inode
*ni
, CLST vbn
,
1021 struct indx_node
**node
)
1024 struct INDEX_BUFFER
*ib
;
1025 struct runs_tree
*run
= &indx
->alloc_run
;
1026 struct rw_semaphore
*lock
= &indx
->run_lock
;
1027 u64 vbo
= (u64
)vbn
<< indx
->vbn2vbo_bits
;
1028 u32 bytes
= 1u << indx
->index_bits
;
1029 struct indx_node
*in
= *node
;
1030 const struct INDEX_NAMES
*name
;
1033 in
= kzalloc(sizeof(struct indx_node
), GFP_NOFS
);
1042 ib
= kmalloc(bytes
, GFP_NOFS
);
1050 err
= ntfs_read_bh(ni
->mi
.sbi
, run
, vbo
, &ib
->rhdr
, bytes
, &in
->nb
);
1055 if (err
== -E_NTFS_FIXUP
)
1061 name
= &s_index_names
[indx
->type
];
1063 err
= attr_load_runs_range(ni
, ATTR_ALLOC
, name
->name
, name
->name_len
,
1064 run
, vbo
, vbo
+ bytes
);
1070 err
= ntfs_read_bh(ni
->mi
.sbi
, run
, vbo
, &ib
->rhdr
, bytes
, &in
->nb
);
1072 if (err
== -E_NTFS_FIXUP
)
1079 if (err
== -E_NTFS_FIXUP
) {
1080 ntfs_write_bh(ni
->mi
.sbi
, &ib
->rhdr
, &in
->nb
, 0);
1088 if (ib
!= in
->index
)
1100 * indx_find - Scan NTFS directory for given entry.
1102 int indx_find(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
1103 const struct INDEX_ROOT
*root
, const void *key
, size_t key_len
,
1104 const void *ctx
, int *diff
, struct NTFS_DE
**entry
,
1105 struct ntfs_fnd
*fnd
)
1109 const struct INDEX_HDR
*hdr
;
1110 struct indx_node
*node
;
1113 root
= indx_get_root(&ni
->dir
, ni
, NULL
, NULL
);
1123 e
= fnd
->level
? fnd
->de
[fnd
->level
- 1] : fnd
->root_de
;
1124 if (e
&& !de_is_last(e
) &&
1125 !(*indx
->cmp
)(key
, key_len
, e
+ 1, le16_to_cpu(e
->key_size
), ctx
)) {
1131 /* Soft finder reset. */
1134 /* Lookup entry that is <= to the search value. */
1135 e
= hdr_find_e(indx
, hdr
, key
, key_len
, ctx
, diff
);
1146 if (*diff
>= 0 || !de_has_vcn_ex(e
)) {
1151 /* Read next level. */
1152 err
= indx_read(indx
, ni
, de_get_vbn(e
), &node
);
1156 /* Lookup entry that is <= to the search value. */
1157 e
= hdr_find_e(indx
, &node
->index
->ihdr
, key
, key_len
, ctx
,
1161 put_indx_node(node
);
1165 fnd_push(fnd
, node
, e
);
1172 int indx_find_sort(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
1173 const struct INDEX_ROOT
*root
, struct NTFS_DE
**entry
,
1174 struct ntfs_fnd
*fnd
)
1177 struct indx_node
*n
= NULL
;
1180 int level
= fnd
->level
;
1184 e
= hdr_first_de(&root
->ihdr
);
1189 } else if (!level
) {
1190 if (de_is_last(fnd
->root_de
)) {
1195 e
= hdr_next_de(&root
->ihdr
, fnd
->root_de
);
1200 n
= fnd
->nodes
[level
- 1];
1201 e
= fnd
->de
[level
- 1];
1206 e
= hdr_next_de(&n
->index
->ihdr
, e
);
1210 fnd
->de
[level
- 1] = e
;
1213 /* Just to avoid tree cycle. */
1218 while (de_has_vcn_ex(e
)) {
1219 if (le16_to_cpu(e
->size
) <
1220 sizeof(struct NTFS_DE
) + sizeof(u64
)) {
1228 /* Read next level. */
1229 err
= indx_read(indx
, ni
, de_get_vbn(e
), &n
);
1233 /* Try next level. */
1234 e
= hdr_first_de(&n
->index
->ihdr
);
1240 fnd_push(fnd
, n
, e
);
1243 if (le16_to_cpu(e
->size
) > sizeof(struct NTFS_DE
)) {
1253 /* Pop one level. */
1262 n
= fnd
->nodes
[level
- 1];
1263 e
= fnd
->de
[level
- 1];
1264 } else if (fnd
->root_de
) {
1267 fnd
->root_de
= NULL
;
1273 if (le16_to_cpu(e
->size
) > sizeof(struct NTFS_DE
)) {
1282 int indx_find_raw(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
1283 const struct INDEX_ROOT
*root
, struct NTFS_DE
**entry
,
1284 size_t *off
, struct ntfs_fnd
*fnd
)
1287 struct indx_node
*n
= NULL
;
1288 struct NTFS_DE
*e
= NULL
;
1293 u32 record_size
= ni
->mi
.sbi
->record_size
;
1295 /* Use non sorted algorithm. */
1297 /* This is the first call. */
1298 e
= hdr_first_de(&root
->ihdr
);
1304 /* The first call with setup of initial element. */
1305 if (*off
>= record_size
) {
1306 next_vbn
= (((*off
- record_size
) >> indx
->index_bits
))
1307 << indx
->idx2vbn_bits
;
1308 /* Jump inside cycle 'for'. */
1312 /* Start enumeration from root. */
1314 } else if (!fnd
->root_de
)
1318 /* Check if current entry can be used. */
1319 if (e
&& le16_to_cpu(e
->size
) > sizeof(struct NTFS_DE
))
1323 /* Continue to enumerate root. */
1324 if (!de_is_last(fnd
->root_de
)) {
1325 e
= hdr_next_de(&root
->ihdr
, fnd
->root_de
);
1332 /* Start to enumerate indexes from 0. */
1335 /* Continue to enumerate indexes. */
1336 e2
= fnd
->de
[fnd
->level
- 1];
1338 n
= fnd
->nodes
[fnd
->level
- 1];
1340 if (!de_is_last(e2
)) {
1341 e
= hdr_next_de(&n
->index
->ihdr
, e2
);
1344 fnd
->de
[fnd
->level
- 1] = e
;
1348 /* Continue with next index. */
1349 next_vbn
= le64_to_cpu(n
->index
->vbn
) +
1350 root
->index_block_clst
;
1354 /* Release current index. */
1361 /* Skip all free indexes. */
1362 bit
= next_vbn
>> indx
->idx2vbn_bits
;
1363 err
= indx_used_bit(indx
, ni
, &bit
);
1364 if (err
== -ENOENT
|| bit
== MINUS_ONE_T
) {
1365 /* No used indexes. */
1370 next_used_vbn
= bit
<< indx
->idx2vbn_bits
;
1372 /* Read buffer into memory. */
1373 err
= indx_read(indx
, ni
, next_used_vbn
, &n
);
1377 e
= hdr_first_de(&n
->index
->ihdr
);
1378 fnd_push(fnd
, n
, e
);
1384 /* Return offset to restore enumerator if necessary. */
1386 /* 'e' points in root, */
1387 *off
= PtrOffset(&root
->ihdr
, e
);
1389 /* 'e' points in index, */
1390 *off
= (le64_to_cpu(n
->index
->vbn
) << indx
->vbn2vbo_bits
) +
1391 record_size
+ PtrOffset(&n
->index
->ihdr
, e
);
1399 * indx_create_allocate - Create "Allocation + Bitmap" attributes.
1401 static int indx_create_allocate(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
1405 struct ntfs_sb_info
*sbi
= ni
->mi
.sbi
;
1406 struct ATTRIB
*bitmap
;
1407 struct ATTRIB
*alloc
;
1408 u32 data_size
= 1u << indx
->index_bits
;
1409 u32 alloc_size
= ntfs_up_cluster(sbi
, data_size
);
1410 CLST len
= alloc_size
>> sbi
->cluster_bits
;
1411 const struct INDEX_NAMES
*in
= &s_index_names
[indx
->type
];
1413 struct runs_tree run
;
1417 err
= attr_allocate_clusters(sbi
, &run
, 0, 0, len
, NULL
, 0, &alen
, 0,
1422 err
= ni_insert_nonresident(ni
, ATTR_ALLOC
, in
->name
, in
->name_len
,
1423 &run
, 0, len
, 0, &alloc
, NULL
);
1427 alloc
->nres
.valid_size
= alloc
->nres
.data_size
= cpu_to_le64(data_size
);
1429 err
= ni_insert_resident(ni
, bitmap_size(1), ATTR_BITMAP
, in
->name
,
1430 in
->name_len
, &bitmap
, NULL
, NULL
);
1434 if (in
->name
== I30_NAME
) {
1435 ni
->vfs_inode
.i_size
= data_size
;
1436 inode_set_bytes(&ni
->vfs_inode
, alloc_size
);
1439 memcpy(&indx
->alloc_run
, &run
, sizeof(run
));
1446 mi_remove_attr(NULL
, &ni
->mi
, alloc
);
1449 run_deallocate(sbi
, &run
, false);
1456 * indx_add_allocate - Add clusters to index.
1458 static int indx_add_allocate(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
1464 u64 bmp_size
, bmp_size_v
;
1465 struct ATTRIB
*bmp
, *alloc
;
1466 struct mft_inode
*mi
;
1467 const struct INDEX_NAMES
*in
= &s_index_names
[indx
->type
];
1469 err
= indx_find_free(indx
, ni
, &bit
, &bmp
);
1473 if (bit
!= MINUS_ONE_T
) {
1477 bmp_size
= le64_to_cpu(bmp
->nres
.data_size
);
1478 bmp_size_v
= le64_to_cpu(bmp
->nres
.valid_size
);
1480 bmp_size
= bmp_size_v
= le32_to_cpu(bmp
->res
.data_size
);
1483 bit
= bmp_size
<< 3;
1486 data_size
= (u64
)(bit
+ 1) << indx
->index_bits
;
1489 /* Increase bitmap. */
1490 err
= attr_set_size(ni
, ATTR_BITMAP
, in
->name
, in
->name_len
,
1491 &indx
->bitmap_run
, bitmap_size(bit
+ 1),
1497 alloc
= ni_find_attr(ni
, NULL
, NULL
, ATTR_ALLOC
, in
->name
, in
->name_len
,
1506 /* Increase allocation. */
1507 err
= attr_set_size(ni
, ATTR_ALLOC
, in
->name
, in
->name_len
,
1508 &indx
->alloc_run
, data_size
, &data_size
, true,
1516 *vbn
= bit
<< indx
->idx2vbn_bits
;
1521 /* Ops. No space? */
1522 attr_set_size(ni
, ATTR_BITMAP
, in
->name
, in
->name_len
,
1523 &indx
->bitmap_run
, bmp_size
, &bmp_size_v
, false, NULL
);
1530 * indx_insert_into_root - Attempt to insert an entry into the index root.
1532 * @undo - True if we undoing previous remove.
1533 * If necessary, it will twiddle the index b-tree.
1535 static int indx_insert_into_root(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
1536 const struct NTFS_DE
*new_de
,
1537 struct NTFS_DE
*root_de
, const void *ctx
,
1538 struct ntfs_fnd
*fnd
, bool undo
)
1541 struct NTFS_DE
*e
, *e0
, *re
;
1542 struct mft_inode
*mi
;
1543 struct ATTRIB
*attr
;
1544 struct INDEX_HDR
*hdr
;
1545 struct indx_node
*n
;
1547 __le64
*sub_vbn
, t_vbn
;
1549 u32 hdr_used
, hdr_total
, asize
, to_move
;
1550 u32 root_size
, new_root_size
;
1551 struct ntfs_sb_info
*sbi
;
1553 struct INDEX_ROOT
*root
, *a_root
;
1555 /* Get the record this root placed in. */
1556 root
= indx_get_root(indx
, ni
, &attr
, &mi
);
1562 * hdr_insert_de will succeed if there's
1563 * room the root for the new entry.
1567 new_de_size
= le16_to_cpu(new_de
->size
);
1568 hdr_used
= le32_to_cpu(hdr
->used
);
1569 hdr_total
= le32_to_cpu(hdr
->total
);
1570 asize
= le32_to_cpu(attr
->size
);
1571 root_size
= le32_to_cpu(attr
->res
.data_size
);
1573 ds_root
= new_de_size
+ hdr_used
- hdr_total
;
1575 /* If 'undo' is set then reduce requirements. */
1576 if ((undo
|| asize
+ ds_root
< sbi
->max_bytes_per_attr
) &&
1577 mi_resize_attr(mi
, attr
, ds_root
)) {
1578 hdr
->total
= cpu_to_le32(hdr_total
+ ds_root
);
1579 e
= hdr_insert_de(indx
, hdr
, new_de
, root_de
, ctx
);
1587 /* Make a copy of root attribute to restore if error. */
1588 a_root
= kmemdup(attr
, asize
, GFP_NOFS
);
1593 * Copy all the non-end entries from
1594 * the index root to the new buffer.
1597 e0
= hdr_first_de(hdr
);
1599 /* Calculate the size to copy. */
1600 for (e
= e0
;; e
= hdr_next_de(hdr
, e
)) {
1608 to_move
+= le16_to_cpu(e
->size
);
1614 re
= kmemdup(e0
, to_move
, GFP_NOFS
);
1622 if (de_has_vcn(e
)) {
1623 t_vbn
= de_get_vbn_le(e
);
1627 new_root_size
= sizeof(struct INDEX_ROOT
) + sizeof(struct NTFS_DE
) +
1629 ds_root
= new_root_size
- root_size
;
1631 if (ds_root
> 0 && asize
+ ds_root
> sbi
->max_bytes_per_attr
) {
1632 /* Make root external. */
1638 mi_resize_attr(mi
, attr
, ds_root
);
1640 /* Fill first entry (vcn will be set later). */
1641 e
= (struct NTFS_DE
*)(root
+ 1);
1642 memset(e
, 0, sizeof(struct NTFS_DE
));
1643 e
->size
= cpu_to_le16(sizeof(struct NTFS_DE
) + sizeof(u64
));
1644 e
->flags
= NTFS_IE_HAS_SUBNODES
| NTFS_IE_LAST
;
1647 hdr
->used
= hdr
->total
=
1648 cpu_to_le32(new_root_size
- offsetof(struct INDEX_ROOT
, ihdr
));
1650 fnd
->root_de
= hdr_first_de(hdr
);
1653 /* Create alloc and bitmap attributes (if not). */
1654 err
= run_is_empty(&indx
->alloc_run
)
1655 ? indx_create_allocate(indx
, ni
, &new_vbn
)
1656 : indx_add_allocate(indx
, ni
, &new_vbn
);
1658 /* Layout of record may be changed, so rescan root. */
1659 root
= indx_get_root(indx
, ni
, &attr
, &mi
);
1662 ntfs_set_state(sbi
, NTFS_DIRTY_ERROR
);
1669 if (mi_resize_attr(mi
, attr
, -ds_root
))
1670 memcpy(attr
, a_root
, asize
);
1673 ntfs_set_state(sbi
, NTFS_DIRTY_ERROR
);
1678 e
= (struct NTFS_DE
*)(root
+ 1);
1679 *(__le64
*)(e
+ 1) = cpu_to_le64(new_vbn
);
1682 /* Now we can create/format the new buffer and copy the entries into. */
1683 n
= indx_new(indx
, ni
, new_vbn
, sub_vbn
);
1689 hdr
= &n
->index
->ihdr
;
1690 hdr_used
= le32_to_cpu(hdr
->used
);
1691 hdr_total
= le32_to_cpu(hdr
->total
);
1693 /* Copy root entries into new buffer. */
1694 hdr_insert_head(hdr
, re
, to_move
);
1696 /* Update bitmap attribute. */
1697 indx_mark_used(indx
, ni
, new_vbn
>> indx
->idx2vbn_bits
);
1699 /* Check if we can insert new entry new index buffer. */
1700 if (hdr_used
+ new_de_size
> hdr_total
) {
1702 * This occurs if MFT record is the same or bigger than index
1703 * buffer. Move all root new index and have no space to add
1704 * new entry classic case when MFT record is 1K and index
1705 * buffer 4K the problem should not occurs.
1708 indx_write(indx
, ni
, n
, 0);
1712 err
= indx_insert_entry(indx
, ni
, new_de
, ctx
, fnd
, undo
);
1717 * Now root is a parent for new index buffer.
1718 * Insert NewEntry a new buffer.
1720 e
= hdr_insert_de(indx
, hdr
, new_de
, NULL
, ctx
);
1725 fnd_push(fnd
, n
, e
);
1727 /* Just write updates index into disk. */
1728 indx_write(indx
, ni
, n
, 0);
1742 * indx_insert_into_buffer
1744 * Attempt to insert an entry into an Index Allocation Buffer.
1745 * If necessary, it will split the buffer.
1748 indx_insert_into_buffer(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
1749 struct INDEX_ROOT
*root
, const struct NTFS_DE
*new_de
,
1750 const void *ctx
, int level
, struct ntfs_fnd
*fnd
)
1753 const struct NTFS_DE
*sp
;
1754 struct NTFS_DE
*e
, *de_t
, *up_e
= NULL
;
1755 struct indx_node
*n2
= NULL
;
1756 struct indx_node
*n1
= fnd
->nodes
[level
];
1757 struct INDEX_HDR
*hdr1
= &n1
->index
->ihdr
;
1758 struct INDEX_HDR
*hdr2
;
1761 __le64 t_vbn
, *sub_vbn
;
1764 /* Try the most easy case. */
1765 e
= fnd
->level
- 1 == level
? fnd
->de
[level
] : NULL
;
1766 e
= hdr_insert_de(indx
, hdr1
, new_de
, e
, ctx
);
1769 /* Just write updated index into disk. */
1770 indx_write(indx
, ni
, n1
, 0);
1775 * No space to insert into buffer. Split it.
1777 * - Save split point ('cause index buffers will be changed)
1778 * - Allocate NewBuffer and copy all entries <= sp into new buffer
1779 * - Remove all entries (sp including) from TargetBuffer
1780 * - Insert NewEntry into left or right buffer (depending on sp <=>
1782 * - Insert sp into parent buffer (or root)
1783 * - Make sp a parent for new buffer
1785 sp
= hdr_find_split(hdr1
);
1789 sp_size
= le16_to_cpu(sp
->size
);
1790 up_e
= kmalloc(sp_size
+ sizeof(u64
), GFP_NOFS
);
1793 memcpy(up_e
, sp
, sp_size
);
1796 up_e
->flags
|= NTFS_IE_HAS_SUBNODES
;
1797 up_e
->size
= cpu_to_le16(sp_size
+ sizeof(u64
));
1800 t_vbn
= de_get_vbn_le(up_e
);
1804 /* Allocate on disk a new index allocation buffer. */
1805 err
= indx_add_allocate(indx
, ni
, &new_vbn
);
1809 /* Allocate and format memory a new index buffer. */
1810 n2
= indx_new(indx
, ni
, new_vbn
, sub_vbn
);
1816 hdr2
= &n2
->index
->ihdr
;
1818 /* Make sp a parent for new buffer. */
1819 de_set_vbn(up_e
, new_vbn
);
1821 /* Copy all the entries <= sp into the new buffer. */
1822 de_t
= hdr_first_de(hdr1
);
1823 to_copy
= PtrOffset(de_t
, sp
);
1824 hdr_insert_head(hdr2
, de_t
, to_copy
);
1826 /* Remove all entries (sp including) from hdr1. */
1827 used
= le32_to_cpu(hdr1
->used
) - to_copy
- sp_size
;
1828 memmove(de_t
, Add2Ptr(sp
, sp_size
), used
- le32_to_cpu(hdr1
->de_off
));
1829 hdr1
->used
= cpu_to_le32(used
);
1832 * Insert new entry into left or right buffer
1833 * (depending on sp <=> new_de).
1836 (*indx
->cmp
)(new_de
+ 1, le16_to_cpu(new_de
->key_size
),
1837 up_e
+ 1, le16_to_cpu(up_e
->key_size
),
1843 indx_mark_used(indx
, ni
, new_vbn
>> indx
->idx2vbn_bits
);
1845 indx_write(indx
, ni
, n1
, 0);
1846 indx_write(indx
, ni
, n2
, 0);
1851 * We've finished splitting everybody, so we are ready to
1852 * insert the promoted entry into the parent.
1855 /* Insert in root. */
1856 err
= indx_insert_into_root(indx
, ni
, up_e
, NULL
, ctx
, fnd
, 0);
1861 * The target buffer's parent is another index buffer.
1862 * TODO: Remove recursion.
1864 err
= indx_insert_into_buffer(indx
, ni
, root
, up_e
, ctx
,
1877 * indx_insert_entry - Insert new entry into index.
1879 * @undo - True if we undoing previous remove.
1881 int indx_insert_entry(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
1882 const struct NTFS_DE
*new_de
, const void *ctx
,
1883 struct ntfs_fnd
*fnd
, bool undo
)
1888 struct ntfs_fnd
*fnd_a
= NULL
;
1889 struct INDEX_ROOT
*root
;
1900 root
= indx_get_root(indx
, ni
, NULL
, NULL
);
1906 if (fnd_is_empty(fnd
)) {
1908 * Find the spot the tree where we want to
1909 * insert the new entry.
1911 err
= indx_find(indx
, ni
, root
, new_de
+ 1,
1912 le16_to_cpu(new_de
->key_size
), ctx
, &diff
, &e
,
1925 * The root is also a leaf, so we'll insert the
1926 * new entry into it.
1928 err
= indx_insert_into_root(indx
, ni
, new_de
, fnd
->root_de
, ctx
,
1934 * Found a leaf buffer, so we'll insert the new entry into it.
1936 err
= indx_insert_into_buffer(indx
, ni
, root
, new_de
, ctx
,
1937 fnd
->level
- 1, fnd
);
1949 * indx_find_buffer - Locate a buffer from the tree.
1951 static struct indx_node
*indx_find_buffer(struct ntfs_index
*indx
,
1952 struct ntfs_inode
*ni
,
1953 const struct INDEX_ROOT
*root
,
1954 __le64 vbn
, struct indx_node
*n
)
1957 const struct NTFS_DE
*e
;
1958 struct indx_node
*r
;
1959 const struct INDEX_HDR
*hdr
= n
? &n
->index
->ihdr
: &root
->ihdr
;
1961 /* Step 1: Scan one level. */
1962 for (e
= hdr_first_de(hdr
);; e
= hdr_next_de(hdr
, e
)) {
1964 return ERR_PTR(-EINVAL
);
1966 if (de_has_vcn(e
) && vbn
== de_get_vbn_le(e
))
1973 /* Step2: Do recursion. */
1974 e
= Add2Ptr(hdr
, le32_to_cpu(hdr
->de_off
));
1976 if (de_has_vcn_ex(e
)) {
1977 err
= indx_read(indx
, ni
, de_get_vbn(e
), &n
);
1979 return ERR_PTR(err
);
1981 r
= indx_find_buffer(indx
, ni
, root
, vbn
, n
);
1989 e
= Add2Ptr(e
, le16_to_cpu(e
->size
));
1996 * indx_shrink - Deallocate unused tail indexes.
1998 static int indx_shrink(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
2005 struct ATTR_LIST_ENTRY
*le
= NULL
;
2006 const struct INDEX_NAMES
*in
= &s_index_names
[indx
->type
];
2008 b
= ni_find_attr(ni
, NULL
, &le
, ATTR_BITMAP
, in
->name
, in
->name_len
,
2016 const unsigned long *bm
= resident_data(b
);
2018 nbits
= (size_t)le32_to_cpu(b
->res
.data_size
) * 8;
2023 pos
= find_next_bit(bm
, nbits
, bit
);
2027 size_t used
= MINUS_ONE_T
;
2029 nbits
= le64_to_cpu(b
->nres
.data_size
) * 8;
2034 err
= scan_nres_bitmap(ni
, b
, indx
, bit
, &scan_for_used
, &used
);
2038 if (used
!= MINUS_ONE_T
)
2042 new_data
= (u64
)bit
<< indx
->index_bits
;
2044 err
= attr_set_size(ni
, ATTR_ALLOC
, in
->name
, in
->name_len
,
2045 &indx
->alloc_run
, new_data
, &new_data
, false, NULL
);
2049 bpb
= bitmap_size(bit
);
2050 if (bpb
* 8 == nbits
)
2053 err
= attr_set_size(ni
, ATTR_BITMAP
, in
->name
, in
->name_len
,
2054 &indx
->bitmap_run
, bpb
, &bpb
, false, NULL
);
2059 static int indx_free_children(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
2060 const struct NTFS_DE
*e
, bool trim
)
2063 struct indx_node
*n
;
2064 struct INDEX_HDR
*hdr
;
2065 CLST vbn
= de_get_vbn(e
);
2068 err
= indx_read(indx
, ni
, vbn
, &n
);
2072 hdr
= &n
->index
->ihdr
;
2073 /* First, recurse into the children, if any. */
2074 if (hdr_has_subnode(hdr
)) {
2075 for (e
= hdr_first_de(hdr
); e
; e
= hdr_next_de(hdr
, e
)) {
2076 indx_free_children(indx
, ni
, e
, false);
2084 i
= vbn
>> indx
->idx2vbn_bits
;
2086 * We've gotten rid of the children; add this buffer to the free list.
2088 indx_mark_free(indx
, ni
, i
);
2094 * If there are no used indexes after current free index
2095 * then we can truncate allocation and bitmap.
2096 * Use bitmap to estimate the case.
2098 indx_shrink(indx
, ni
, i
+ 1);
2103 * indx_get_entry_to_replace
2105 * Find a replacement entry for a deleted entry.
2106 * Always returns a node entry:
2107 * NTFS_IE_HAS_SUBNODES is set the flags and the size includes the sub_vcn.
2109 static int indx_get_entry_to_replace(struct ntfs_index
*indx
,
2110 struct ntfs_inode
*ni
,
2111 const struct NTFS_DE
*de_next
,
2112 struct NTFS_DE
**de_to_replace
,
2113 struct ntfs_fnd
*fnd
)
2118 struct NTFS_DE
*e
, *te
, *re
;
2119 struct indx_node
*n
;
2120 struct INDEX_BUFFER
*ib
;
2122 *de_to_replace
= NULL
;
2124 /* Find first leaf entry down from de_next. */
2125 vbn
= de_get_vbn(de_next
);
2128 err
= indx_read(indx
, ni
, vbn
, &n
);
2132 e
= hdr_first_de(&n
->index
->ihdr
);
2133 fnd_push(fnd
, n
, e
);
2135 if (!de_is_last(e
)) {
2137 * This buffer is non-empty, so its first entry
2138 * could be used as the replacement entry.
2140 level
= fnd
->level
- 1;
2146 /* This buffer is a node. Continue to go down. */
2147 vbn
= de_get_vbn(e
);
2153 n
= fnd
->nodes
[level
];
2154 te
= hdr_first_de(&n
->index
->ihdr
);
2155 /* Copy the candidate entry into the replacement entry buffer. */
2156 re
= kmalloc(le16_to_cpu(te
->size
) + sizeof(u64
), GFP_NOFS
);
2162 *de_to_replace
= re
;
2163 memcpy(re
, te
, le16_to_cpu(te
->size
));
2165 if (!de_has_vcn(re
)) {
2167 * The replacement entry we found doesn't have a sub_vcn.
2168 * increase its size to hold one.
2170 le16_add_cpu(&re
->size
, sizeof(u64
));
2171 re
->flags
|= NTFS_IE_HAS_SUBNODES
;
2174 * The replacement entry we found was a node entry, which
2175 * means that all its child buffers are empty. Return them
2178 indx_free_children(indx
, ni
, te
, true);
2182 * Expunge the replacement entry from its former location,
2183 * and then write that buffer.
2186 e
= hdr_delete_de(&ib
->ihdr
, te
);
2189 indx_write(indx
, ni
, n
, 0);
2191 /* Check to see if this action created an empty leaf. */
2192 if (ib_is_leaf(ib
) && ib_is_empty(ib
))
2201 * indx_delete_entry - Delete an entry from the index.
2203 int indx_delete_entry(struct ntfs_index
*indx
, struct ntfs_inode
*ni
,
2204 const void *key
, u32 key_len
, const void *ctx
)
2207 struct INDEX_ROOT
*root
;
2208 struct INDEX_HDR
*hdr
;
2209 struct ntfs_fnd
*fnd
, *fnd2
;
2210 struct INDEX_BUFFER
*ib
;
2211 struct NTFS_DE
*e
, *re
, *next
, *prev
, *me
;
2212 struct indx_node
*n
, *n2d
= NULL
;
2215 struct ATTRIB
*attr
;
2216 struct mft_inode
*mi
;
2217 u32 e_size
, root_size
, new_root_size
;
2219 const struct INDEX_NAMES
*in
;
2233 root
= indx_get_root(indx
, ni
, &attr
, &mi
);
2239 /* Locate the entry to remove. */
2240 err
= indx_find(indx
, ni
, root
, key
, key_len
, ctx
, &diff
, &e
, fnd
);
2252 n
= fnd
->nodes
[level
- 1];
2253 e
= fnd
->de
[level
- 1];
2262 e_size
= le16_to_cpu(e
->size
);
2264 if (!de_has_vcn_ex(e
)) {
2265 /* The entry to delete is a leaf, so we can just rip it out. */
2266 hdr_delete_de(hdr
, e
);
2269 hdr
->total
= hdr
->used
;
2271 /* Shrink resident root attribute. */
2272 mi_resize_attr(mi
, attr
, 0 - e_size
);
2276 indx_write(indx
, ni
, n
, 0);
2279 * Check to see if removing that entry made
2282 if (ib_is_leaf(ib
) && ib_is_empty(ib
)) {
2284 fnd_push(fnd2
, n
, e
);
2288 * The entry we wish to delete is a node buffer, so we
2289 * have to find a replacement for it.
2291 next
= de_get_next(e
);
2293 err
= indx_get_entry_to_replace(indx
, ni
, next
, &re
, fnd2
);
2298 de_set_vbn_le(re
, de_get_vbn_le(e
));
2299 hdr_delete_de(hdr
, e
);
2301 err
= level
? indx_insert_into_buffer(indx
, ni
, root
,
2305 : indx_insert_into_root(indx
, ni
, re
, e
,
2313 * There is no replacement for the current entry.
2314 * This means that the subtree rooted at its node
2315 * is empty, and can be deleted, which turn means
2316 * that the node can just inherit the deleted
2319 indx_free_children(indx
, ni
, next
, true);
2321 de_set_vbn_le(next
, de_get_vbn_le(e
));
2322 hdr_delete_de(hdr
, e
);
2324 indx_write(indx
, ni
, n
, 0);
2326 hdr
->total
= hdr
->used
;
2328 /* Shrink resident root attribute. */
2329 mi_resize_attr(mi
, attr
, 0 - e_size
);
2334 /* Delete a branch of tree. */
2335 if (!fnd2
|| !fnd2
->level
)
2338 /* Reinit root 'cause it can be changed. */
2339 root
= indx_get_root(indx
, ni
, &attr
, &mi
);
2346 sub_vbn
= fnd2
->nodes
[0]->index
->vbn
;
2350 hdr
= level
? &fnd
->nodes
[level
- 1]->index
->ihdr
: &root
->ihdr
;
2352 /* Scan current level. */
2353 for (e
= hdr_first_de(hdr
);; e
= hdr_next_de(hdr
, e
)) {
2359 if (de_has_vcn(e
) && sub_vbn
== de_get_vbn_le(e
))
2362 if (de_is_last(e
)) {
2369 /* Do slow search from root. */
2370 struct indx_node
*in
;
2374 in
= indx_find_buffer(indx
, ni
, root
, sub_vbn
, NULL
);
2381 fnd_push(fnd
, in
, NULL
);
2384 /* Merge fnd2 -> fnd. */
2385 for (level
= 0; level
< fnd2
->level
; level
++) {
2386 fnd_push(fnd
, fnd2
->nodes
[level
], fnd2
->de
[level
]);
2387 fnd2
->nodes
[level
] = NULL
;
2392 for (level
= fnd
->level
; level
; level
--) {
2393 struct indx_node
*in
= fnd
->nodes
[level
- 1];
2396 if (ib_is_empty(ib
)) {
2409 e
= hdr_first_de(hdr
);
2415 if (hdr
!= &root
->ihdr
|| !de_is_last(e
)) {
2417 while (!de_is_last(e
)) {
2418 if (de_has_vcn(e
) && sub_vbn
== de_get_vbn_le(e
))
2421 e
= hdr_next_de(hdr
, e
);
2428 if (sub_vbn
!= de_get_vbn_le(e
)) {
2430 * Didn't find the parent entry, although this buffer
2431 * is the parent trail. Something is corrupt.
2437 if (de_is_last(e
)) {
2439 * Since we can't remove the end entry, we'll remove
2440 * its predecessor instead. This means we have to
2441 * transfer the predecessor's sub_vcn to the end entry.
2442 * Note: This index block is not empty, so the
2443 * predecessor must exist.
2450 if (de_has_vcn(prev
)) {
2451 de_set_vbn_le(e
, de_get_vbn_le(prev
));
2452 } else if (de_has_vcn(e
)) {
2453 le16_sub_cpu(&e
->size
, sizeof(u64
));
2454 e
->flags
&= ~NTFS_IE_HAS_SUBNODES
;
2455 le32_sub_cpu(&hdr
->used
, sizeof(u64
));
2461 * Copy the current entry into a temporary buffer (stripping
2462 * off its down-pointer, if any) and delete it from the current
2463 * buffer or root, as appropriate.
2465 e_size
= le16_to_cpu(e
->size
);
2466 me
= kmemdup(e
, e_size
, GFP_NOFS
);
2472 if (de_has_vcn(me
)) {
2473 me
->flags
&= ~NTFS_IE_HAS_SUBNODES
;
2474 le16_sub_cpu(&me
->size
, sizeof(u64
));
2477 hdr_delete_de(hdr
, e
);
2479 if (hdr
== &root
->ihdr
) {
2481 hdr
->total
= hdr
->used
;
2483 /* Shrink resident root attribute. */
2484 mi_resize_attr(mi
, attr
, 0 - e_size
);
2486 indx_write(indx
, ni
, n2d
, 0);
2490 /* Mark unused buffers as free. */
2492 for (; level
< fnd
->level
; level
++) {
2493 ib
= fnd
->nodes
[level
]->index
;
2494 if (ib_is_empty(ib
)) {
2495 size_t k
= le64_to_cpu(ib
->vbn
) >>
2498 indx_mark_free(indx
, ni
, k
);
2505 /*fnd->root_de = NULL;*/
2508 * Re-insert the entry into the tree.
2509 * Find the spot the tree where we want to insert the new entry.
2511 err
= indx_insert_entry(indx
, ni
, me
, ctx
, fnd
, 0);
2517 indx_shrink(indx
, ni
, trim_bit
);
2520 * This tree needs to be collapsed down to an empty root.
2521 * Recreate the index root as an empty leaf and free all
2522 * the bits the index allocation bitmap.
2527 in
= &s_index_names
[indx
->type
];
2529 err
= attr_set_size(ni
, ATTR_ALLOC
, in
->name
, in
->name_len
,
2530 &indx
->alloc_run
, 0, NULL
, false, NULL
);
2531 err
= ni_remove_attr(ni
, ATTR_ALLOC
, in
->name
, in
->name_len
,
2533 run_close(&indx
->alloc_run
);
2535 err
= attr_set_size(ni
, ATTR_BITMAP
, in
->name
, in
->name_len
,
2536 &indx
->bitmap_run
, 0, NULL
, false, NULL
);
2537 err
= ni_remove_attr(ni
, ATTR_BITMAP
, in
->name
, in
->name_len
,
2539 run_close(&indx
->bitmap_run
);
2541 root
= indx_get_root(indx
, ni
, &attr
, &mi
);
2547 root_size
= le32_to_cpu(attr
->res
.data_size
);
2549 sizeof(struct INDEX_ROOT
) + sizeof(struct NTFS_DE
);
2551 if (new_root_size
!= root_size
&&
2552 !mi_resize_attr(mi
, attr
, new_root_size
- root_size
)) {
2557 /* Fill first entry. */
2558 e
= (struct NTFS_DE
*)(root
+ 1);
2562 e
->size
= cpu_to_le16(sizeof(struct NTFS_DE
));
2563 e
->flags
= NTFS_IE_LAST
; // 0x02
2569 hdr
->used
= hdr
->total
= cpu_to_le32(
2570 new_root_size
- offsetof(struct INDEX_ROOT
, ihdr
));
2583 * Update duplicated information in directory entry
2584 * 'dup' - info from MFT record
2586 int indx_update_dup(struct ntfs_inode
*ni
, struct ntfs_sb_info
*sbi
,
2587 const struct ATTR_FILE_NAME
*fname
,
2588 const struct NTFS_DUP_INFO
*dup
, int sync
)
2591 struct NTFS_DE
*e
= NULL
;
2592 struct ATTR_FILE_NAME
*e_fname
;
2593 struct ntfs_fnd
*fnd
;
2594 struct INDEX_ROOT
*root
;
2595 struct mft_inode
*mi
;
2596 struct ntfs_index
*indx
= &ni
->dir
;
2602 root
= indx_get_root(indx
, ni
, NULL
, &mi
);
2608 /* Find entry in directory. */
2609 err
= indx_find(indx
, ni
, root
, fname
, fname_full_size(fname
), sbi
,
2624 e_fname
= (struct ATTR_FILE_NAME
*)(e
+ 1);
2626 if (!memcmp(&e_fname
->dup
, dup
, sizeof(*dup
))) {
2628 * Nothing to update in index! Try to avoid this call.
2633 memcpy(&e_fname
->dup
, dup
, sizeof(*dup
));
2636 /* Directory entry in index. */
2637 err
= indx_write(indx
, ni
, fnd
->nodes
[fnd
->level
- 1], sync
);
2639 /* Directory entry in directory MFT record. */
2642 err
= mi_write(mi
, 1);
2644 mark_inode_dirty(&ni
->vfs_inode
);