bitmap.c (3f3b442b5ad2455507c9bfdacf39a3792eb3a6d0) bitmap.c (195c52bdd5d5ecfdabf5a7c6159efe299e534f84)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 *
4 * Copyright (C) 2019-2021 Paragon Software GmbH, All rights reserved.
5 *
6 * This code builds two trees of free clusters extents.
7 * Trees are sorted by start of extent and by length of extent.
8 * NTFS_MAX_WND_EXTENTS defines the maximum number of elements in trees.

--- 119 unchanged lines hidden (view full) ---

128 * wnd_close
129 *
130 * Frees all resources
131 */
132void wnd_close(struct wnd_bitmap *wnd)
133{
134 struct rb_node *node, *next;
135
1// SPDX-License-Identifier: GPL-2.0
2/*
3 *
4 * Copyright (C) 2019-2021 Paragon Software GmbH, All rights reserved.
5 *
6 * This code builds two trees of free clusters extents.
7 * Trees are sorted by start of extent and by length of extent.
8 * NTFS_MAX_WND_EXTENTS defines the maximum number of elements in trees.

--- 119 unchanged lines hidden (view full) ---

128 * wnd_close
129 *
130 * Frees all resources
131 */
132void wnd_close(struct wnd_bitmap *wnd)
133{
134 struct rb_node *node, *next;
135
136 ntfs_free(wnd->free_bits);
136 kfree(wnd->free_bits);
137 run_close(&wnd->run);
138
139 node = rb_first(&wnd->start_tree);
140
141 while (node) {
142 next = rb_next(node);
143 rb_erase(node, &wnd->start_tree);
144 kmem_cache_free(ntfs_enode_cachep,

--- 533 unchanged lines hidden (view full) ---

678 wnd->total_zeroes = nbits;
679 wnd->extent_max = MINUS_ONE_T;
680 wnd->zone_bit = wnd->zone_end = 0;
681 wnd->nwnd = bytes_to_block(sb, bitmap_size(nbits));
682 wnd->bits_last = nbits & (wbits - 1);
683 if (!wnd->bits_last)
684 wnd->bits_last = wbits;
685
137 run_close(&wnd->run);
138
139 node = rb_first(&wnd->start_tree);
140
141 while (node) {
142 next = rb_next(node);
143 rb_erase(node, &wnd->start_tree);
144 kmem_cache_free(ntfs_enode_cachep,

--- 533 unchanged lines hidden (view full) ---

678 wnd->total_zeroes = nbits;
679 wnd->extent_max = MINUS_ONE_T;
680 wnd->zone_bit = wnd->zone_end = 0;
681 wnd->nwnd = bytes_to_block(sb, bitmap_size(nbits));
682 wnd->bits_last = nbits & (wbits - 1);
683 if (!wnd->bits_last)
684 wnd->bits_last = wbits;
685
686 wnd->free_bits = ntfs_zalloc(wnd->nwnd * sizeof(u16));
686 wnd->free_bits = kzalloc(wnd->nwnd * sizeof(u16), GFP_NOFS);
687 if (!wnd->free_bits)
688 return -ENOMEM;
689
690 err = wnd_rescan(wnd);
691 if (err)
692 return err;
693
694 wnd->inited = true;

--- 654 unchanged lines hidden (view full) ---

1349
1350 /* align to 8 byte boundary */
1351 new_wnd = bytes_to_block(sb, bitmap_size(new_bits));
1352 new_last = new_bits & (wbits - 1);
1353 if (!new_last)
1354 new_last = wbits;
1355
1356 if (new_wnd != wnd->nwnd) {
687 if (!wnd->free_bits)
688 return -ENOMEM;
689
690 err = wnd_rescan(wnd);
691 if (err)
692 return err;
693
694 wnd->inited = true;

--- 654 unchanged lines hidden (view full) ---

1349
1350 /* align to 8 byte boundary */
1351 new_wnd = bytes_to_block(sb, bitmap_size(new_bits));
1352 new_last = new_bits & (wbits - 1);
1353 if (!new_last)
1354 new_last = wbits;
1355
1356 if (new_wnd != wnd->nwnd) {
1357 new_free = ntfs_malloc(new_wnd * sizeof(u16));
1357 new_free = kmalloc(new_wnd * sizeof(u16), GFP_NOFS);
1358 if (!new_free)
1359 return -ENOMEM;
1360
1361 if (new_free != wnd->free_bits)
1362 memcpy(new_free, wnd->free_bits,
1363 wnd->nwnd * sizeof(short));
1364 memset(new_free + wnd->nwnd, 0,
1365 (new_wnd - wnd->nwnd) * sizeof(short));
1358 if (!new_free)
1359 return -ENOMEM;
1360
1361 if (new_free != wnd->free_bits)
1362 memcpy(new_free, wnd->free_bits,
1363 wnd->nwnd * sizeof(short));
1364 memset(new_free + wnd->nwnd, 0,
1365 (new_wnd - wnd->nwnd) * sizeof(short));
1366 ntfs_free(wnd->free_bits);
1366 kfree(wnd->free_bits);
1367 wnd->free_bits = new_free;
1368 }
1369
1370 /* Zero bits [old_bits,new_bits) */
1371 bits = new_bits - old_bits;
1372 b0 = old_bits & (wbits - 1);
1373
1374 for (iw = old_bits >> (sb->s_blocksize_bits + 3); bits; iw += 1) {

--- 145 unchanged lines hidden ---
1367 wnd->free_bits = new_free;
1368 }
1369
1370 /* Zero bits [old_bits,new_bits) */
1371 bits = new_bits - old_bits;
1372 b0 = old_bits & (wbits - 1);
1373
1374 for (iw = old_bits >> (sb->s_blocksize_bits + 3); bits; iw += 1) {

--- 145 unchanged lines hidden ---