23#define CACHE_INCREMENTS 64
40 ERR(
"excise_extents returned %08lx\n",
Status);
49 ERR(
"flush_fcb returned %08lx\n",
Status);
74 ERR(
"error - find_item returned %08lx\n",
Status);
85 ERR(
"delete_tree_item returned %08lx\n",
Status);
102 le =
Vcb->chunks.Flink;
103 while (le != &
Vcb->chunks) {
130 if (
Vcb->space_root) {
137 ERR(
"find_item returned %08lx\n",
Status);
144 ERR(
"delete_tree_item returned %08lx\n",
Status);
160 le =
Vcb->chunks.Flink;
161 while (le != &
Vcb->chunks) {
164 if (!
c->cache_loaded) {
169 ERR(
"load_cache_chunk(%I64x) returned %08lx\n",
c->offset,
Status);
176 c->space_changed =
true;
196 ERR(
"out of memory\n");
241 le = list_size->
Flink;
242 while (le != list_size) {
264 for (
i = 0;
i <
Vcb->superblock.sector_size /
sizeof(
uint32_t);
i++) {
265 dwords[
i] = ~dwords[
i];
268 len =
Vcb->superblock.sector_size * 8;
275 while (runlength != 0) {
307 le = list_size->
Flink;
309 while (le != list_size) {
312 if (
s2->size <=
s->size) {
331 for (
i = 0;
i <
len;
i++) {
337 while (le != stripes) {
340 if (
ss->stripe == off +
i) {
353 ERR(
"out of memory\n");
357 ss->stripe = off +
i;
389 ERR(
"add_superblock_stripe returned %08lx\n",
Status);
407 ERR(
"add_superblock_stripe returned %08lx\n",
Status);
425 ERR(
"add_superblock_stripe returned %08lx\n",
Status);
438 ERR(
"add_superblock_stripe returned %08lx\n",
Status);
475 uint64_t num_entries, num_bitmaps, extent_length, bmpnum, off, total_space = 0, superblock_size;
488 ERR(
"error - find_item returned %08lx\n",
Status);
505 WARN(
"cache pointed to something other than an INODE_ITEM\n");
515 ERR(
"open_fcb returned %08lx\n",
Status);
522 if (
c->cache->inode_item.st_size == 0) {
523 WARN(
"cache had zero length\n");
531 if (num_entries == 0 && num_bitmaps == 0)
539 ERR(
"out of memory\n");
545 if (
c->chunk_item->size < 0x6400000) {
546 WARN(
"deleting free space cache for chunk smaller than 100MB\n");
552 ERR(
"read_file returned %08lx\n",
Status);
555 c->cache->deleted =
true;
563 if (
size >
c->cache->inode_item.st_size)
566 num_sectors =
size >>
Vcb->sector_shift;
577 num_valid_sectors = (
ULONG)((
sector_align(extent_length,
Vcb->superblock.sector_size) >>
Vcb->sector_shift) + num_bitmaps);
579 if (num_valid_sectors > num_sectors) {
580 ERR(
"free space cache for %I64x was %u sectors, expected at least %u\n",
c->offset, num_sectors, num_valid_sectors);
587 if (
i <<
Vcb->sector_shift >
sizeof(
uint32_t) * num_sectors)
589 else if ((
i + 1) <<
Vcb->sector_shift <
sizeof(
uint32_t) * num_sectors)
594 if (
crc32 != checksums[
i]) {
595 WARN(
"checksum %u was %08x, expected %08x\n",
i,
crc32, checksums[
i]);
612 ERR(
"add_space_entry returned %08lx\n",
Status);
617 total_space += fse->
size;
619 ERR(
"unknown free-space type %x\n", fse->
type);
625 if (num_bitmaps > 0) {
649 ERR(
"get_superblock_size returned %08lx\n",
Status);
654 if (
c->chunk_item->size -
c->used != total_space + superblock_size) {
655 WARN(
"invalidating cache for chunk %I64x: space was %I64x, expected %I64x\n",
c->offset, total_space + superblock_size,
c->chunk_item->size -
c->used);
660 while (le != &
c->space) {
664 if (le2 != &
c->space) {
667 if (
s2->address ==
s->address +
s->size) {
695 ERR(
"delete_tree_item returned %08lx\n",
Status);
701 ERR(
"excise_extents returned %08lx\n",
Status);
708 c->cache->deleted =
true;
711 c->old_cache =
c->cache;
715 while (le != &
c->space) {
739 if (!
Vcb->space_root)
744 searchkey.
offset =
c->chunk_item->size;
748 ERR(
"find_item returned %08lx\n",
Status);
771 ERR(
"add_space_entry returned %08lx\n",
Status);
791 if (bmplen < tp.item->
size) {
798 ERR(
"out of memory\n");
814 while (runlength != 0) {
820 if (
index + runlength >= bmpl) {
821 runlength = bmpl -
index;
828 runend = runstart + (runlength <<
Vcb->sector_shift);
830 if (runstart > lastoff) {
833 ERR(
"add_space_entry returned %08lx\n",
Status);
847 ERR(
"add_space_entry returned %08lx\n",
Status);
859 while (le != &
c->space) {
863 if (le2 != &
c->space) {
866 if (
s2->address ==
s->address +
s->size) {
898 ERR(
"load_stored_free_space_tree returned %08lx\n",
Status);
901 }
else if (
Vcb->superblock.generation - 1 ==
Vcb->superblock.cache_generation) {
905 ERR(
"load_stored_free_space_cache returned %08lx\n",
Status);
912 TRACE(
"generating free space cache for chunk %I64x\n",
c->offset);
920 ERR(
"error - find_item returned %08lx\n",
Status);
924 lastaddr =
c->offset;
935 ERR(
"out of memory\n");
939 s->address = lastaddr;
945 TRACE(
"(%I64x,%I64x)\n",
s->address,
s->size);
959 if (lastaddr < c->
offset +
c->chunk_item->size) {
963 ERR(
"out of memory\n");
967 s->address = lastaddr;
968 s->size =
c->offset +
c->chunk_item->size - lastaddr;
973 TRACE(
"(%I64x,%I64x)\n",
s->address,
s->size);
988 ERR(
"load_free_space_cache returned %08lx\n",
Status);
994 c->cache_loaded =
true;
1007 while (le != &
fcb->
Vcb->chunks) {
1010 if (!
c->readonly && !
c->reloc) {
1013 if (
c->chunk_item->type ==
flags && (
c->chunk_item->size -
c->used) >=
length) {
1014 if (
insert_extent_chunk(
fcb->
Vcb,
fcb,
c,
start,
length,
false,
NULL,
NULL,
rollback,
BTRFS_COMPRESSION_NONE,
length,
false, 0))
1027 ERR(
"alloc_chunk returned %08lx\n",
Status);
1033 if (
c->chunk_item->type ==
flags && (
c->chunk_item->size -
c->used) >=
length) {
1034 if (
insert_extent_chunk(
fcb->
Vcb,
fcb,
c,
start,
length,
false,
NULL,
NULL,
rollback,
BTRFS_COMPRESSION_NONE,
length,
false, 0))
1046 uint64_t num_entries, new_cache_size,
i;
1048 bool realloc_extents =
false;
1062 while (le != &
c->space) {
1071 while (le != &
c->deleting) {
1086 for (
i = 0;
i < num_entries;
i++) {
1087 if ((new_cache_size >>
Vcb->sector_shift) != ((new_cache_size +
sizeof(
FREE_SPACE_ENTRY)) >>
Vcb->sector_shift))
1088 new_cache_size =
sector_align(new_cache_size,
Vcb->superblock.sector_size);
1095 TRACE(
"chunk %I64x: cache_size = %I64x, new_cache_size = %I64x\n",
c->offset,
c->cache ?
c->cache->inode_item.st_size : 0, new_cache_size);
1098 if (new_cache_size >
c->cache->inode_item.st_size)
1099 realloc_extents =
true;
1101 le =
c->cache->extents.
Flink;
1103 while (le != &
c->cache->extents) {
1113 realloc_extents =
true;
1133 ERR(
"out of memory\n");
1137 c->cache->Vcb =
Vcb;
1139 c->cache->inode_item.st_size = new_cache_size;
1140 c->cache->inode_item.st_blocks = new_cache_size;
1141 c->cache->inode_item.st_nlink = 1;
1146 c->cache->Header.AllocationSize.QuadPart = 0;
1147 c->cache->Header.FileSize.QuadPart = 0;
1148 c->cache->Header.ValidDataLength.QuadPart = 0;
1150 c->cache->subvol =
Vcb->root_root;
1156 c->cache->created =
true;
1162 ERR(
"out of memory\n");
1174 ERR(
"error - find_item returned %08lx\n",
Status);
1184 ERR(
"delete_tree_item returned %08lx\n",
Status);
1198 ERR(
"insert_tree_item returned %08lx\n",
Status);
1209 ERR(
"insert_cache_extent returned %08lx\n",
Status);
1215 c->cache->extents_changed =
true;
1222 ERR(
"flush_fcb returned %08lx\n",
Status);
1229 }
else if (realloc_extents) {
1233 TRACE(
"reallocating extents\n");
1243 ERR(
"error - find_item returned %08lx\n",
Status);
1248 ERR(
"could not find (%I64x,%x,%I64x) in root_root\n", searchkey.
obj_id, searchkey.
obj_type, searchkey.
offset);
1261 if (
c->cache->inode_item.st_size > 0) {
1262 le =
c->cache->extents.
Flink;
1264 while (le != &
c->cache->extents) {
1285 ERR(
"excise_extents returned %08lx\n",
Status);
1294 ERR(
"insert_cache_extent returned %08lx\n",
Status);
1300 c->cache->inode_item.st_size = new_cache_size;
1301 c->cache->inode_item.st_blocks = new_cache_size;
1305 ERR(
"flush_fcb returned %08lx\n",
Status);
1316 searchkey.
obj_id =
c->cache->inode;
1322 ERR(
"error - find_item returned %08lx\n",
Status);
1331 ERR(
"out of memory\n");
1339 ERR(
"insert_tree_item returned %08lx\n",
Status);
1360 ERR(
"error - find_item returned %08lx\n",
Status);
1365 ERR(
"could not find (%I64x,%x,%I64x) in root_root\n", searchkey.
obj_id, searchkey.
obj_type, searchkey.
offset);
1392 le =
Vcb->chunks.Flink;
1393 while (le != &
Vcb->chunks) {
1396 if (
c->space_changed &&
c->chunk_item->size >= 0x6400000) {
1407 ERR(
"allocate_cache_chunk(%I64x) returned %08lx\n",
c->offset,
Status);
1421 ERR(
"commit_batch_list returned %08lx\n",
Status);
1433 ERR(
"out of memory\n");
1454 ERR(
"out of memory\n");
1488 while (
s2->list_entry.Blink !=
list) {
1512 while (
s2->list_entry.Flink !=
list) {
1545 while (
s2->list_entry.Blink !=
list) {
1577 while (
s2->list_entry.Flink !=
list) {
1606 ERR(
"out of memory\n");
1624 }
while (le !=
list);
1642 ERR(
"out of memory\n");
1660 while (le != deleting) {
1672 le = old_list->
Flink;
1673 while (le != old_list) {
1679 ERR(
"out of memory\n");
1683 s2->address =
s->address;
1700 uint64_t num_entries, *cachegen, off;
1706 ERR(
"out of memory\n");
1717 ERR(
"copy_space_list returned %08lx\n",
Status);
1723 ERR(
"copy_space_list returned %08lx\n",
Status);
1735 num_sectors = (
uint32_t)(
c->cache->inode_item.st_size >>
Vcb->sector_shift);
1749 fse->
size =
s->size;
1758 c->cache->inode_item.generation =
Vcb->superblock.generation;
1759 c->cache->inode_item.transid =
Vcb->superblock.generation;
1760 c->cache->inode_item.sequence++;
1761 c->cache->inode_item.st_ctime = *
now;
1765 ERR(
"flush_fcb returned %08lx\n",
Status);
1777 ERR(
"error - find_item returned %08lx\n",
Status);
1782 ERR(
"could not find (%I64x,%x,%I64x) in root_root\n", searchkey.
obj_id, searchkey.
obj_type, searchkey.
offset);
1802 *cachegen =
Vcb->superblock.generation;
1811 if (
i <<
Vcb->sector_shift >
sizeof(
uint32_t) * num_sectors)
1813 else if ((
i + 1) <<
Vcb->sector_shift <
sizeof(
uint32_t) * num_sectors)
1816 checksums[
i] = ~calc_crc32c(0xffffffff, (
uint8_t*)
data + (
sizeof(
uint32_t) * num_sectors), ((
i + 1) <<
Vcb->sector_shift) - (
sizeof(
uint32_t) * num_sectors));
1823 ERR(
"do_write_file returned %08lx\n",
Status);
1849 ERR(
"copy_space_list returned %08lx\n",
Status);
1857 searchkey.
offset = 0xffffffffffffffff;
1861 goto after_tree_walk;
1863 ERR(
"find_item returned %08lx\n",
Status);
1884 ERR(
"insert_tree_item returned %08lx\n",
Status);
1910 ERR(
"delete_tree_item returned %08lx\n",
Status);
1922 ERR(
"delete_tree_item returned %08lx\n",
Status);
1933 goto after_tree_walk;
1946 ERR(
"delete_tree_item returned %08lx\n",
Status);
1966 ERR(
"insert_tree_item returned %08lx\n",
Status);
1984 searchkey.
offset =
c->chunk_item->size;
1988 ERR(
"find_item returned %08lx\n",
Status);
2000 fsi->
count = fsi_count;
2007 if (
t->paritem &&
t->paritem->ignore) {
2008 t->paritem->ignore =
false;
2009 t->parent->header.num_items++;
2013 t->header.generation =
Vcb->superblock.generation;
2026 ERR(
"out of memory\n");
2030 fsi->
count = fsi_count;
2036 ERR(
"insert_tree_item returned %08lx\n",
Status);
2055 le =
Vcb->chunks.Flink;
2056 while (le != &
Vcb->chunks) {
2059 if (
c->space_changed &&
c->chunk_item->size >= 0x6400000) {
2065 ERR(
"update_chunk_cache(%I64x) returned %08lx\n",
c->offset,
Status);
2076 ERR(
"commit_batch_list returned %08lx\n",
Status);
2080 le =
Vcb->chunks.Flink;
2081 while (le != &
Vcb->chunks) {
2098 ERR(
"flush_partial_stripe returned %08lx\n",
Status);
2122 le =
Vcb->chunks.Flink;
2123 while (le != &
Vcb->chunks) {
2126 if (
c->space_changed) {
2132 ERR(
"update_chunk_cache_tree(%I64x) returned %08lx\n",
c->offset,
Status);
2150 c->space_changed =
true;
2163 while (le !=
list) {
2188 ERR(
"out of memory\n");
2192 s->address =
s2->address;
2236 c->space_changed =
true;
unsigned short int uint16_t
NTSTATUS read_file(fcb *fcb, uint8_t *data, uint64_t start, uint64_t length, ULONG *pbr, PIRP Irp) __attribute__((nonnull(1
#define acquire_chunk_lock(c, Vcb)
#define InterlockedIncrement64(a)
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool _In_opt_ void _In_opt_ PIRP _In_ LIST_ENTRY * rollback
static __inline FAST_IO_POSSIBLE fast_io_possible(fcb *fcb)
NTSTATUS flush_fcb(fcb *fcb, bool cache, LIST_ENTRY *batchlist, PIRP Irp)
#define keycmp(key1, key2)
NTSTATUS alloc_chunk(device_extension *Vcb, uint64_t flags, chunk **pc, bool full_size) __attribute__((nonnull(1
NTSTATUS NTSTATUS NTSTATUS NTSTATUS NTSTATUS excise_extents(device_extension *Vcb, fcb *fcb, uint64_t start_data, uint64_t end_data, PIRP Irp, LIST_ENTRY *rollback) __attribute__((nonnull(1
void void void add_rollback(_In_ LIST_ENTRY *rollback, _In_ enum rollback_type type, _In_ __drv_aliasesMem void *ptr) __attribute__((nonnull(1
void void void NTSTATUS commit_batch_list(_Requires_exclusive_lock_held_(_Curr_->tree_lock) device_extension *Vcb, LIST_ENTRY *batchlist, PIRP Irp) __attribute__((nonnull(1
static __inline void win_time_to_unix(LARGE_INTEGER t, BTRFS_TIME *out)
NTSTATUS do_write_file(fcb *fcb, uint64_t start_data, uint64_t end_data, void *data, PIRP Irp, bool file_write, uint32_t irp_offset, LIST_ENTRY *rollback) __attribute__((nonnull(1
NTSTATUS flush_partial_stripe(device_extension *Vcb, chunk *c, partial_stripe *ps)
NTSTATUS NTSTATUS NTSTATUS NTSTATUS NTSTATUS chunk * get_chunk_from_address(device_extension *Vcb, uint64_t address) __attribute__((nonnull(1)))
void do_rollback(device_extension *Vcb, LIST_ENTRY *rollback) __attribute__((nonnull(1
void void void NTSTATUS void clear_batch_list(device_extension *Vcb, LIST_ENTRY *batchlist) __attribute__((nonnull(1
@ ROLLBACK_SUBTRACT_SPACE
NTSTATUS open_fcb(_Requires_lock_held_(_Curr_->tree_lock) _Requires_exclusive_lock_held_(_Curr_->fcb_lock) device_extension *Vcb, root *subvol, uint64_t inode, uint8_t type, PANSI_STRING utf8, bool always_add_hl, fcb *parent, fcb **pfcb, POOL_TYPE pooltype, PIRP Irp)
void add_fcb_to_subvol(_In_ _Requires_exclusive_lock_held_(_Curr_->Vcb->fcb_lock) fcb *fcb)
NTSTATUS insert_tree_item(_In_ _Requires_exclusive_lock_held_(_Curr_->tree_lock) device_extension *Vcb, _In_ root *r, _In_ uint64_t obj_id, _In_ uint8_t obj_type, _In_ uint64_t offset, _In_reads_bytes_opt_(size) _When_(return >=0, __drv_aliasesMem) void *data, _In_ uint16_t size, _Out_opt_ traverse_ptr *ptp, _In_opt_ PIRP Irp) __attribute__((nonnull(1
NTSTATUS NTSTATUS void clear_rollback(LIST_ENTRY *rollback) __attribute__((nonnull(1)))
fcb * create_fcb(device_extension *Vcb, POOL_TYPE pool_type)
NTSTATUS NTSTATUS bool find_next_item(_Requires_lock_held_(_Curr_->tree_lock) device_extension *Vcb, const traverse_ptr *tp, traverse_ptr *next_tp, bool ignore, PIRP Irp) __attribute__((nonnull(1
#define release_chunk_lock(c, Vcb)
NTSTATUS NTSTATUS delete_tree_item(_In_ _Requires_exclusive_lock_held_(_Curr_->tree_lock) device_extension *Vcb, _Inout_ traverse_ptr *tp) __attribute__((nonnull(1
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
#define NT_SUCCESS(StatCode)
#define crc32(crc, buf, len)
static const WCHAR *const ext[]
static LONG find_item(PropertyBag *This, LPCOLESTR name)
void mark_fcb_dirty(_In_ fcb *fcb)
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
void free_fcb(_Inout_ fcb *fcb)
void protect_superblocks(_Inout_ chunk *c)
_In_ uint64_t _In_ uint64_t _In_ uint64_t generation
#define FREE_SPACE_CACHE_ID
#define TYPE_FREE_SPACE_EXTENT
#define EXTENT_TYPE_PREALLOC
#define BTRFS_COMPAT_RO_FLAGS_FREE_SPACE_CACHE
static const uint64_t superblock_addrs[]
#define TYPE_FREE_SPACE_BITMAP
#define BTRFS_COMPAT_RO_FLAGS_FREE_SPACE_CACHE_VALID
#define FREE_SPACE_EXTENT
#define EXTENT_TYPE_REGULAR
#define BTRFS_COMPRESSION_NONE
#define TYPE_FREE_SPACE_INFO
#define TYPE_METADATA_ITEM
#define FREE_SPACE_BITMAP
bool insert_extent_chunk(_In_ device_extension *Vcb, _In_ fcb *fcb, _In_ chunk *c, _In_ uint64_t start_data, _In_ uint64_t length, _In_ bool prealloc, _In_opt_ void *data, _In_opt_ PIRP Irp, _In_ LIST_ENTRY *rollback, _In_ uint8_t compression, _In_ uint64_t decoded_size, _In_ bool file_write, _In_ uint64_t irp_offset)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
#define KeQuerySystemTime(t)
#define ExAcquireResourceExclusiveLite(res, wait)
#define RemoveHeadList(ListHead)
#define InitializeListHead(ListHead)
#define ExAcquireResourceSharedLite(res, wait)
NTSTATUS load_stored_free_space_cache(device_extension *Vcb, chunk *c, bool load_only, PIRP Irp)
static NTSTATUS copy_space_list(LIST_ENTRY *old_list, LIST_ENTRY *new_list)
static NTSTATUS add_superblock_stripe(LIST_ENTRY *stripes, uint64_t off, uint64_t len)
static NTSTATUS get_superblock_size(chunk *c, uint64_t *size)
static void add_rollback_space(LIST_ENTRY *rollback, bool add, LIST_ENTRY *list, LIST_ENTRY *list_size, uint64_t address, uint64_t length, chunk *c)
static NTSTATUS update_chunk_cache(device_extension *Vcb, chunk *c, BTRFS_TIME *now, LIST_ENTRY *batchlist, PIRP Irp, LIST_ENTRY *rollback)
static NTSTATUS load_free_space_cache(device_extension *Vcb, chunk *c, PIRP Irp)
static NTSTATUS allocate_cache_chunk(device_extension *Vcb, chunk *c, bool *changed, LIST_ENTRY *batchlist, PIRP Irp, LIST_ENTRY *rollback)
NTSTATUS load_cache_chunk(device_extension *Vcb, chunk *c, PIRP Irp)
void space_list_add2(LIST_ENTRY *list, LIST_ENTRY *list_size, uint64_t address, uint64_t length, chunk *c, LIST_ENTRY *rollback)
NTSTATUS add_space_entry(LIST_ENTRY *list, LIST_ENTRY *list_size, uint64_t offset, uint64_t size)
static void load_free_space_bitmap(device_extension *Vcb, chunk *c, uint64_t offset, void *data, uint64_t *total_space)
static void order_space_entry(space *s, LIST_ENTRY *list_size)
void space_list_subtract2(LIST_ENTRY *list, LIST_ENTRY *list_size, uint64_t address, uint64_t length, chunk *c, LIST_ENTRY *rollback)
static NTSTATUS insert_cache_extent(fcb *fcb, uint64_t start, uint64_t length, LIST_ENTRY *rollback)
NTSTATUS update_chunk_caches(device_extension *Vcb, PIRP Irp, LIST_ENTRY *rollback)
static NTSTATUS update_chunk_cache_tree(device_extension *Vcb, chunk *c, PIRP Irp)
static NTSTATUS remove_free_space_inode(device_extension *Vcb, uint64_t inode, LIST_ENTRY *batchlist, PIRP Irp, LIST_ENTRY *rollback)
NTSTATUS clear_free_space_cache(device_extension *Vcb, LIST_ENTRY *batchlist, PIRP Irp)
NTSTATUS update_chunk_caches_tree(device_extension *Vcb, PIRP Irp)
void space_list_add(chunk *c, uint64_t address, uint64_t length, LIST_ENTRY *rollback)
static NTSTATUS load_stored_free_space_tree(device_extension *Vcb, chunk *c, PIRP Irp)
void space_list_merge(LIST_ENTRY *spacelist, LIST_ENTRY *spacelist_size, LIST_ENTRY *deleting)
NTSTATUS allocate_cache(device_extension *Vcb, bool *changed, PIRP Irp, LIST_ENTRY *rollback)
void space_list_subtract(chunk *c, uint64_t address, uint64_t length, LIST_ENTRY *rollback)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLboolean GLboolean GLboolean b
GLuint GLsizei GLsizei * length
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
NTSYSAPI ULONG WINAPI RtlFindNextForwardRunClear(PCRTL_BITMAP, ULONG, PULONG)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
#define STATUS_INTERNAL_ERROR
#define BTRFS_INODE_PREALLOC
#define BTRFS_INODE_NOCOMPRESS
#define BTRFS_INODE_NODATASUM
#define BTRFS_INODE_NODATACOW
#define BLOCK_FLAG_RAID10
struct _LIST_ENTRY * Blink
struct _LIST_ENTRY * Flink
struct _device_extension * Vcb
LIST_ENTRY list_entry_size
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INSUFFICIENT_RESOURCES
NTSYSAPI ULONG NTAPI RtlFindFirstRunClear(_In_ PRTL_BITMAP BitMapHeader, _Out_ PULONG StartingIndex)