btrfs: fix minimum number of chunk errors for DUP [Linux 4.4.188]

This Linux kernel change "btrfs: fix minimum number of chunk errors for DUP" is included in the Linux 4.4.188 release. This change is authored by David Sterba <dsterba [at]> on Fri May 17 11:43:13 2019 +0200. The commit for this change in Linux stable tree is 9178a9d (patch) which is from upstream commit 0ee5f8a. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream 0ee5f8a.

btrfs: fix minimum number of chunk errors for DUP

[ Upstream commit 0ee5f8ae082e1f675a2fb6db601c31ac9958a134 ]

The list of profiles in btrfs_chunk_max_errors lists DUP as a profile
DUP able to tolerate 1 device missing. Though this profile is special
with 2 copies, it still needs the device, unlike the others.

Looking at the history of changes, thre's no clear reason why DUP is
there, functions were refactored and blocks of code merged to one

d20983b40e828 Btrfs: fix writing data into the seed filesystem
  - factor code to a helper

de11cc12df173 Btrfs: don't pre-allocate btrfs bio
  - unrelated change, DUP still in the list with max errors 1

a236aed14ccb0 Btrfs: Deal with failed writes in mirrored configurations
  - introduced the max errors, leaves DUP and RAID1 in the same group

Reviewed-by: Qu Wenruo <>
Signed-off-by: David Sterba <>
Signed-off-by: Sasha Levin <>

There are 3 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 fs/btrfs/volumes.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 4eb7a6b..55ce654 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -4942,8 +4942,7 @@ static inline int btrfs_chunk_max_errors(struct map_lookup *map)

    if (map->type & (BTRFS_BLOCK_GROUP_RAID1 |
             BTRFS_BLOCK_GROUP_RAID10 |
-            BTRFS_BLOCK_GROUP_RAID5 |
-            BTRFS_BLOCK_GROUP_DUP)) {
+            BTRFS_BLOCK_GROUP_RAID5)) {
        max_errors = 1;
    } else if (map->type & BTRFS_BLOCK_GROUP_RAID6) {
        max_errors = 2;

Leave a Reply

Your email address will not be published. Required fields are marked *