Parche limpiador del btrfs que no ha logrado servir
This commit is contained in:
parent
54e8d6e03c
commit
a9de2403e4
1 changed files with 90 additions and 0 deletions
|
@ -0,0 +1,90 @@
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.cmds-check.c.swp and btrfs-progs-v4.0.1/.cmds-check.c.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.ctree.c.swp and btrfs-progs-v4.0.1/.ctree.c.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.ctree.h.swp and btrfs-progs-v4.0.1/.ctree.h.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.disk-io.c.swp and btrfs-progs-v4.0.1/.disk-io.c.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.extent-cache.c.swp and btrfs-progs-v4.0.1/.extent-cache.c.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.extent-cache.h.swp and btrfs-progs-v4.0.1/.extent-cache.h.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.extent-tree.c.swp and btrfs-progs-v4.0.1/.extent-tree.c.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.extent_io.c.swp and btrfs-progs-v4.0.1/.extent_io.c.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.kerncompat.h.swp and btrfs-progs-v4.0.1/.kerncompat.h.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.list.h.swp and btrfs-progs-v4.0.1/.list.h.swp differ
|
||||||
|
Binary files btrfs-progs-v4.0.1.orig/.repair.h.swp and btrfs-progs-v4.0.1/.repair.h.swp differ
|
||||||
|
diff -uriN btrfs-progs-v4.0.1.orig/cmds-check.c btrfs-progs-v4.0.1/cmds-check.c
|
||||||
|
--- btrfs-progs-v4.0.1.orig/cmds-check.c 2015-05-20 08:12:44.000000000 -0500
|
||||||
|
+++ btrfs-progs-v4.0.1/cmds-check.c 2015-06-28 05:30:08.000000000 -0500
|
||||||
|
@@ -3222,11 +3222,14 @@
|
||||||
|
struct btrfs_path *path;
|
||||||
|
struct btrfs_corrupt_block *corrupt;
|
||||||
|
struct cache_extent *cache;
|
||||||
|
+ struct cache_tree corrupt_not_found;
|
||||||
|
struct btrfs_key key;
|
||||||
|
u64 offset;
|
||||||
|
int level;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
+ cache_tree_init(&corrupt_not_found);
|
||||||
|
+
|
||||||
|
if (cache_tree_empty(corrupt_blocks))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
@@ -3276,6 +3279,15 @@
|
||||||
|
ret = btrfs_free_extent(trans, root, offset, root->nodesize,
|
||||||
|
0, root->root_key.objectid,
|
||||||
|
level - 1, 0);
|
||||||
|
+ fprintf(stderr, "btrfs_free_extent - ret = %d bytenr = %llu num_bytes = %llu parent = %d root_objectid = %llu owner = %d offset = %d\n", ret, offset, root->nodesize,
|
||||||
|
+ 0, root->root_key.objectid,
|
||||||
|
+ level - 1, 0);
|
||||||
|
+ /* Add unfound cache extents to remove list */
|
||||||
|
+ if ( ret == -EIO ) {
|
||||||
|
+ fprintf(stderr, "Extent (%llu, %llu, %llu) not found. Added to remove list.\n",
|
||||||
|
+ cache->objectid, cache->start, cache->size);
|
||||||
|
+ insert_cache_extent(&corrupt_not_found, cache);
|
||||||
|
+ }
|
||||||
|
cache = next_cache_extent(cache);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -3293,6 +3305,17 @@
|
||||||
|
btrfs_release_path(path);
|
||||||
|
cache = next_cache_extent(cache);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ /* Remove not found corrupt cache extents */
|
||||||
|
+ cache = first_cache_extent(&corrupt_not_found);
|
||||||
|
+ while (cache) {
|
||||||
|
+ fprintf(stderr, "Removing not found corrupt extent (%llu, %llu, %llu).\n",
|
||||||
|
+ cache->objectid, cache->start, cache->size);
|
||||||
|
+ remove_cache_extent(&corrupt_not_found, cache);
|
||||||
|
+ cache = next_cache_extent(cache);
|
||||||
|
+ }
|
||||||
|
+ free_extent_cache_tree(&corrupt_not_found);
|
||||||
|
+
|
||||||
|
out:
|
||||||
|
btrfs_commit_transaction(trans, root);
|
||||||
|
out_free_path:
|
||||||
|
diff -uriN btrfs-progs-v4.0.1.orig/ctree.c btrfs-progs-v4.0.1/ctree.c
|
||||||
|
--- btrfs-progs-v4.0.1.orig/ctree.c 2015-06-19 03:43:12.000000000 -0500
|
||||||
|
+++ btrfs-progs-v4.0.1/ctree.c 2015-06-21 05:15:35.000000000 -0500
|
||||||
|
@@ -2588,14 +2588,16 @@
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
nritems = btrfs_header_nritems(parent);
|
||||||
|
- if (slot != nritems -1) {
|
||||||
|
- memmove_extent_buffer(parent,
|
||||||
|
- btrfs_node_key_ptr_offset(slot),
|
||||||
|
- btrfs_node_key_ptr_offset(slot + 1),
|
||||||
|
- sizeof(struct btrfs_key_ptr) *
|
||||||
|
- (nritems - slot - 1));
|
||||||
|
+ if (nritems > 0) {
|
||||||
|
+ if (slot < nritems -1) {
|
||||||
|
+ memmove_extent_buffer(parent,
|
||||||
|
+ btrfs_node_key_ptr_offset(slot),
|
||||||
|
+ btrfs_node_key_ptr_offset(slot + 1),
|
||||||
|
+ sizeof(struct btrfs_key_ptr) *
|
||||||
|
+ (nritems - slot - 1));
|
||||||
|
+ }
|
||||||
|
+ nritems--;
|
||||||
|
}
|
||||||
|
- nritems--;
|
||||||
|
btrfs_set_header_nritems(parent, nritems);
|
||||||
|
if (nritems == 0 && parent == root->node) {
|
||||||
|
BUG_ON(btrfs_header_level(root->node) != 1);
|
Loading…
Reference in a new issue