aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
authorChris Mason <clm@fb.com>2015-10-21 21:21:40 -0400
committerChris Mason <clm@fb.com>2015-10-21 21:21:40 -0400
commita0d58e48db58801a0e764e9b9c87e1782d390fcb (patch)
treef413f86da859552a29df58f40d450372977b5673 /fs/btrfs/disk-io.c
parent6db4a7335dd701a0e20275440ee057d3db2a7ae3 (diff)
parentddd664f4478a4aaf0ac67a4297e33f1992bc9be2 (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.c35
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
3477int btrfs_get_num_tolerated_disk_barrier_failures(u64 flags) 3477int 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
3497int btrfs_calc_num_tolerated_disk_barrier_failures( 3506int btrfs_calc_num_tolerated_disk_barrier_failures(