mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 06:15:52 +00:00
[BTRFS] Upgrade to 1.1
CORE-15452
This commit is contained in:
parent
e8d16d0a7d
commit
eb7fbc253f
61 changed files with 22605 additions and 596 deletions
|
@ -107,13 +107,13 @@ static NTSTATUS add_metadata_reloc(_Requires_exclusive_lock_held_(_Curr_->tree_l
|
|||
c = get_chunk_from_address(Vcb, tp->item->key.obj_id);
|
||||
|
||||
if (c) {
|
||||
ExAcquireResourceExclusiveLite(&c->lock, TRUE);
|
||||
acquire_chunk_lock(c, Vcb);
|
||||
|
||||
c->used -= Vcb->superblock.node_size;
|
||||
|
||||
space_list_add(c, tp->item->key.obj_id, Vcb->superblock.node_size, rollback);
|
||||
|
||||
ExReleaseResourceLite(&c->lock);
|
||||
release_chunk_lock(c, Vcb);
|
||||
}
|
||||
|
||||
ei = (EXTENT_ITEM*)tp->item->data;
|
||||
|
@ -747,7 +747,7 @@ static NTSTATUS write_metadata_items(_Requires_exclusive_lock_held_(_Curr_->tree
|
|||
flags = Vcb->metadata_flags;
|
||||
|
||||
if (newchunk) {
|
||||
ExAcquireResourceExclusiveLite(&newchunk->lock, TRUE);
|
||||
acquire_chunk_lock(newchunk, Vcb);
|
||||
|
||||
if (newchunk->chunk_item->type == flags && find_metadata_address_in_chunk(Vcb, newchunk, &mr->new_address)) {
|
||||
newchunk->used += Vcb->superblock.node_size;
|
||||
|
@ -755,7 +755,7 @@ static NTSTATUS write_metadata_items(_Requires_exclusive_lock_held_(_Curr_->tree
|
|||
done = TRUE;
|
||||
}
|
||||
|
||||
ExReleaseResourceLite(&newchunk->lock);
|
||||
release_chunk_lock(newchunk, Vcb);
|
||||
}
|
||||
|
||||
if (!done) {
|
||||
|
@ -766,20 +766,20 @@ static NTSTATUS write_metadata_items(_Requires_exclusive_lock_held_(_Curr_->tree
|
|||
chunk* c2 = CONTAINING_RECORD(le2, chunk, list_entry);
|
||||
|
||||
if (!c2->readonly && !c2->reloc && c2 != newchunk && c2->chunk_item->type == flags) {
|
||||
ExAcquireResourceExclusiveLite(&c2->lock, TRUE);
|
||||
acquire_chunk_lock(c2, Vcb);
|
||||
|
||||
if ((c2->chunk_item->size - c2->used) >= Vcb->superblock.node_size) {
|
||||
if (find_metadata_address_in_chunk(Vcb, c2, &mr->new_address)) {
|
||||
c2->used += Vcb->superblock.node_size;
|
||||
space_list_subtract(c2, FALSE, mr->new_address, Vcb->superblock.node_size, rollback);
|
||||
ExReleaseResourceLite(&c2->lock);
|
||||
release_chunk_lock(c2, Vcb);
|
||||
newchunk = c2;
|
||||
done = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ExReleaseResourceLite(&c2->lock);
|
||||
release_chunk_lock(c2, Vcb);
|
||||
}
|
||||
|
||||
le2 = le2->Flink;
|
||||
|
@ -795,12 +795,12 @@ static NTSTATUS write_metadata_items(_Requires_exclusive_lock_held_(_Curr_->tree
|
|||
goto end;
|
||||
}
|
||||
|
||||
ExAcquireResourceExclusiveLite(&newchunk->lock, TRUE);
|
||||
acquire_chunk_lock(newchunk, Vcb);
|
||||
|
||||
newchunk->balance_num = Vcb->balance.balance_num;
|
||||
|
||||
if (!find_metadata_address_in_chunk(Vcb, newchunk, &mr->new_address)) {
|
||||
ExReleaseResourceLite(&newchunk->lock);
|
||||
release_chunk_lock(newchunk, Vcb);
|
||||
ExReleaseResourceLite(&Vcb->chunk_lock);
|
||||
ERR("could not find address in new chunk\n");
|
||||
Status = STATUS_DISK_FULL;
|
||||
|
@ -810,7 +810,7 @@ static NTSTATUS write_metadata_items(_Requires_exclusive_lock_held_(_Curr_->tree
|
|||
space_list_subtract(newchunk, FALSE, mr->new_address, Vcb->superblock.node_size, rollback);
|
||||
}
|
||||
|
||||
ExReleaseResourceLite(&newchunk->lock);
|
||||
release_chunk_lock(newchunk, Vcb);
|
||||
}
|
||||
|
||||
ExReleaseResourceLite(&Vcb->chunk_lock);
|
||||
|
@ -1340,13 +1340,13 @@ static NTSTATUS add_data_reloc(_Requires_exclusive_lock_held_(_Curr_->tree_lock)
|
|||
c = get_chunk_from_address(Vcb, tp->item->key.obj_id);
|
||||
|
||||
if (c) {
|
||||
ExAcquireResourceExclusiveLite(&c->lock, TRUE);
|
||||
acquire_chunk_lock(c, Vcb);
|
||||
|
||||
c->used -= tp->item->key.offset;
|
||||
|
||||
space_list_add(c, tp->item->key.obj_id, tp->item->key.offset, rollback);
|
||||
|
||||
ExReleaseResourceLite(&c->lock);
|
||||
release_chunk_lock(c, Vcb);
|
||||
}
|
||||
|
||||
ei = (EXTENT_ITEM*)tp->item->data;
|
||||
|
@ -1756,7 +1756,7 @@ static NTSTATUS balance_data_chunk(device_extension* Vcb, chunk* c, BOOL* change
|
|||
ULONG runlength, index, lastoff;
|
||||
|
||||
if (newchunk) {
|
||||
ExAcquireResourceExclusiveLite(&newchunk->lock, TRUE);
|
||||
acquire_chunk_lock(newchunk, Vcb);
|
||||
|
||||
if (find_data_address_in_chunk(Vcb, newchunk, dr->size, &dr->new_address)) {
|
||||
newchunk->used += dr->size;
|
||||
|
@ -1764,7 +1764,7 @@ static NTSTATUS balance_data_chunk(device_extension* Vcb, chunk* c, BOOL* change
|
|||
done = TRUE;
|
||||
}
|
||||
|
||||
ExReleaseResourceLite(&newchunk->lock);
|
||||
release_chunk_lock(newchunk, Vcb);
|
||||
}
|
||||
|
||||
if (!done) {
|
||||
|
@ -1775,20 +1775,20 @@ static NTSTATUS balance_data_chunk(device_extension* Vcb, chunk* c, BOOL* change
|
|||
chunk* c2 = CONTAINING_RECORD(le2, chunk, list_entry);
|
||||
|
||||
if (!c2->readonly && !c2->reloc && c2 != newchunk && c2->chunk_item->type == Vcb->data_flags) {
|
||||
ExAcquireResourceExclusiveLite(&c2->lock, TRUE);
|
||||
acquire_chunk_lock(c2, Vcb);
|
||||
|
||||
if ((c2->chunk_item->size - c2->used) >= dr->size) {
|
||||
if (find_data_address_in_chunk(Vcb, c2, dr->size, &dr->new_address)) {
|
||||
c2->used += dr->size;
|
||||
space_list_subtract(c2, FALSE, dr->new_address, dr->size, &rollback);
|
||||
ExReleaseResourceLite(&c2->lock);
|
||||
release_chunk_lock(c2, Vcb);
|
||||
newchunk = c2;
|
||||
done = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ExReleaseResourceLite(&c2->lock);
|
||||
release_chunk_lock(c2, Vcb);
|
||||
}
|
||||
|
||||
le2 = le2->Flink;
|
||||
|
@ -1804,12 +1804,12 @@ static NTSTATUS balance_data_chunk(device_extension* Vcb, chunk* c, BOOL* change
|
|||
goto end;
|
||||
}
|
||||
|
||||
ExAcquireResourceExclusiveLite(&newchunk->lock, TRUE);
|
||||
acquire_chunk_lock(newchunk, Vcb);
|
||||
|
||||
newchunk->balance_num = Vcb->balance.balance_num;
|
||||
|
||||
if (!find_data_address_in_chunk(Vcb, newchunk, dr->size, &dr->new_address)) {
|
||||
ExReleaseResourceLite(&newchunk->lock);
|
||||
release_chunk_lock(newchunk, Vcb);
|
||||
ExReleaseResourceLite(&Vcb->chunk_lock);
|
||||
ERR("could not find address in new chunk\n");
|
||||
Status = STATUS_DISK_FULL;
|
||||
|
@ -1819,7 +1819,7 @@ static NTSTATUS balance_data_chunk(device_extension* Vcb, chunk* c, BOOL* change
|
|||
space_list_subtract(newchunk, FALSE, dr->new_address, dr->size, &rollback);
|
||||
}
|
||||
|
||||
ExReleaseResourceLite(&newchunk->lock);
|
||||
release_chunk_lock(newchunk, Vcb);
|
||||
}
|
||||
|
||||
ExReleaseResourceLite(&Vcb->chunk_lock);
|
||||
|
@ -2957,6 +2957,8 @@ static NTSTATUS try_consolidation(device_extension* Vcb, UINT64 flags, chunk** n
|
|||
ERR("do_write returned %08x\n", Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
free_trees(Vcb);
|
||||
}
|
||||
|
||||
ExAcquireResourceExclusiveLite(&Vcb->chunk_lock, TRUE);
|
||||
|
@ -3108,7 +3110,7 @@ void NTAPI balance_thread(void* context) {
|
|||
chunk* c = CONTAINING_RECORD(le, chunk, list_entry);
|
||||
UINT8 sort;
|
||||
|
||||
ExAcquireResourceExclusiveLite(&c->lock, TRUE);
|
||||
acquire_chunk_lock(c, Vcb);
|
||||
|
||||
if (c->chunk_item->type & BLOCK_FLAG_DATA)
|
||||
sort = BALANCE_OPTS_DATA;
|
||||
|
@ -3118,7 +3120,7 @@ void NTAPI balance_thread(void* context) {
|
|||
sort = BALANCE_OPTS_SYSTEM;
|
||||
else {
|
||||
ERR("unexpected chunk type %llx\n", c->chunk_item->type);
|
||||
ExReleaseResourceLite(&c->lock);
|
||||
release_chunk_lock(c, Vcb);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -3142,13 +3144,13 @@ void NTAPI balance_thread(void* context) {
|
|||
if (!NT_SUCCESS(Status)) {
|
||||
ERR("load_cache_chunk returned %08x\n", Status);
|
||||
Vcb->balance.status = Status;
|
||||
ExReleaseResourceLite(&c->lock);
|
||||
release_chunk_lock(c, Vcb);
|
||||
ExReleaseResourceLite(&Vcb->chunk_lock);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
ExReleaseResourceLite(&c->lock);
|
||||
release_chunk_lock(c, Vcb);
|
||||
|
||||
le = le->Flink;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue