diff options
author | Chris Mason <clm@fb.com> | 2015-10-21 21:21:40 -0400 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2015-10-21 21:21:40 -0400 |
commit | a0d58e48db58801a0e764e9b9c87e1782d390fcb (patch) | |
tree | f413f86da859552a29df58f40d450372977b5673 /fs/btrfs/disk-io.c | |
parent | 6db4a7335dd701a0e20275440ee057d3db2a7ae3 (diff) | |
parent | ddd664f4478a4aaf0ac67a4297e33f1992bc9be2 (diff) |
Merge branch 'cleanups/for-4.4' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux into for-linus-4.4
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index a42c1f575ef7..bcbb596d9695 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -3476,22 +3476,31 @@ static int barrier_all_devices(struct btrfs_fs_info *info) | |||
3476 | 3476 | ||
3477 | int btrfs_get_num_tolerated_disk_barrier_failures(u64 flags) | 3477 | int btrfs_get_num_tolerated_disk_barrier_failures(u64 flags) |
3478 | { | 3478 | { |
3479 | if ((flags & (BTRFS_BLOCK_GROUP_DUP | | 3479 | int raid_type; |
3480 | BTRFS_BLOCK_GROUP_RAID0 | | 3480 | int min_tolerated = INT_MAX; |
3481 | BTRFS_AVAIL_ALLOC_BIT_SINGLE)) || | ||
3482 | ((flags & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0)) | ||
3483 | return 0; | ||
3484 | 3481 | ||
3485 | if (flags & (BTRFS_BLOCK_GROUP_RAID1 | | 3482 | if ((flags & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0 || |
3486 | BTRFS_BLOCK_GROUP_RAID5 | | 3483 | (flags & BTRFS_AVAIL_ALLOC_BIT_SINGLE)) |
3487 | BTRFS_BLOCK_GROUP_RAID10)) | 3484 | min_tolerated = min(min_tolerated, |
3488 | return 1; | 3485 | btrfs_raid_array[BTRFS_RAID_SINGLE]. |
3486 | tolerated_failures); | ||
3489 | 3487 | ||
3490 | if (flags & BTRFS_BLOCK_GROUP_RAID6) | 3488 | for (raid_type = 0; raid_type < BTRFS_NR_RAID_TYPES; raid_type++) { |
3491 | return 2; | 3489 | if (raid_type == BTRFS_RAID_SINGLE) |
3490 | continue; | ||
3491 | if (!(flags & btrfs_raid_group[raid_type])) | ||
3492 | continue; | ||
3493 | min_tolerated = min(min_tolerated, | ||
3494 | btrfs_raid_array[raid_type]. | ||
3495 | tolerated_failures); | ||
3496 | } | ||
3492 | 3497 | ||
3493 | pr_warn("BTRFS: unknown raid type: %llu\n", flags); | 3498 | if (min_tolerated == INT_MAX) { |
3494 | return 0; | 3499 | pr_warn("BTRFS: unknown raid flag: %llu\n", flags); |
3500 | min_tolerated = 0; | ||
3501 | } | ||
3502 | |||
3503 | return min_tolerated; | ||
3495 | } | 3504 | } |
3496 | 3505 | ||
3497 | int btrfs_calc_num_tolerated_disk_barrier_failures( | 3506 | int btrfs_calc_num_tolerated_disk_barrier_failures( |