diff options
Diffstat (limited to 'meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-for-dragonn/0001-Fill-missing-devices-so-degraded-filesystems-can-be-.patch')
-rw-r--r-- | meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-for-dragonn/0001-Fill-missing-devices-so-degraded-filesystems-can-be-.patch | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-for-dragonn/0001-Fill-missing-devices-so-degraded-filesystems-can-be-.patch b/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-for-dragonn/0001-Fill-missing-devices-so-degraded-filesystems-can-be-.patch deleted file mode 100644 index e4665335ee..0000000000 --- a/meta/recipes-devtools/btrfs-tools/btrfs-tools/upstream-for-dragonn/0001-Fill-missing-devices-so-degraded-filesystems-can-be-.patch +++ /dev/null | |||
@@ -1,64 +0,0 @@ | |||
1 | Upstream-Status: Inappropriate [Backport] | ||
2 | From a6c54702d8973aef081cff81ed8d90427bb21768 Mon Sep 17 00:00:00 2001 | ||
3 | From: Chris Mason <chris.mason@oracle.com> | ||
4 | Date: Wed, 15 Dec 2010 16:00:23 -0500 | ||
5 | Subject: [PATCH 1/5] Fill missing devices so degraded filesystems can be read | ||
6 | |||
7 | When a device is missing, the btrfs tools need to be able to read alternate | ||
8 | copies from the remaining devices. This creates placeholder devices | ||
9 | that always return -EIO so the tools can limp along. | ||
10 | |||
11 | Signed-off-by: Chris Mason <chris.mason@oracle.com> | ||
12 | --- | ||
13 | disk-io.c | 1 + | ||
14 | volumes.c | 15 +++++++++++++-- | ||
15 | 2 files changed, 14 insertions(+), 2 deletions(-) | ||
16 | |||
17 | diff --git a/disk-io.c b/disk-io.c | ||
18 | index 5bd9cfc..f4368f3 100644 | ||
19 | --- a/disk-io.c | ||
20 | +++ b/disk-io.c | ||
21 | @@ -204,6 +204,7 @@ struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr, | ||
22 | eb->dev_bytenr = multi->stripes[0].physical; | ||
23 | kfree(multi); | ||
24 | ret = read_extent_from_disk(eb); | ||
25 | + | ||
26 | if (ret == 0 && check_tree_block(root, eb) == 0 && | ||
27 | csum_tree_block(root, eb, 1) == 0 && | ||
28 | verify_parent_transid(eb->tree, eb, parent_transid) == 0) { | ||
29 | diff --git a/volumes.c b/volumes.c | ||
30 | index 4bb77e2..5773467 100644 | ||
31 | --- a/volumes.c | ||
32 | +++ b/volumes.c | ||
33 | @@ -1263,6 +1263,16 @@ int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset) | ||
34 | return readonly; | ||
35 | } | ||
36 | |||
37 | +static struct btrfs_device *fill_missing_device(u64 devid) | ||
38 | +{ | ||
39 | + struct btrfs_device *device; | ||
40 | + | ||
41 | + device = kzalloc(sizeof(*device), GFP_NOFS); | ||
42 | + device->devid = devid; | ||
43 | + device->fd = -1; | ||
44 | + return device; | ||
45 | +} | ||
46 | + | ||
47 | static int read_one_chunk(struct btrfs_root *root, struct btrfs_key *key, | ||
48 | struct extent_buffer *leaf, | ||
49 | struct btrfs_chunk *chunk) | ||
50 | @@ -1313,8 +1323,9 @@ static int read_one_chunk(struct btrfs_root *root, struct btrfs_key *key, | ||
51 | map->stripes[i].dev = btrfs_find_device(root, devid, uuid, | ||
52 | NULL); | ||
53 | if (!map->stripes[i].dev) { | ||
54 | - kfree(map); | ||
55 | - return -EIO; | ||
56 | + map->stripes[i].dev = fill_missing_device(devid); | ||
57 | + printf("warning, device %llu is missing\n", | ||
58 | + (unsigned long long)devid); | ||
59 | } | ||
60 | |||
61 | } | ||
62 | -- | ||
63 | 1.7.2.3 | ||
64 | |||