Selaa lähdekoodia

Btrfs: Tune stripe selection for raid1 and raid10

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Chris Mason 17 vuotta sitten
vanhempi
commit
2fff734faf
1 muutettua tiedostoa jossa 7 lisäystä ja 10 poistoa
  1. 7 10
      fs/btrfs/volumes.c

+ 7 - 10
fs/btrfs/volumes.c

@@ -1509,17 +1509,17 @@ again:
 	if (map->type & BTRFS_BLOCK_GROUP_RAID1) {
 	if (map->type & BTRFS_BLOCK_GROUP_RAID1) {
 		if (unplug_page || (rw & (1 << BIO_RW)))
 		if (unplug_page || (rw & (1 << BIO_RW)))
 			num_stripes = map->num_stripes;
 			num_stripes = map->num_stripes;
-		else if (mirror_num) {
+		else if (mirror_num)
 			stripe_index = mirror_num - 1;
 			stripe_index = mirror_num - 1;
-		} else {
-			u64 orig_stripe_nr = stripe_nr;
-			stripe_index = do_div(orig_stripe_nr, num_stripes);
-		}
+		else
+			stripe_index = current->pid % map->num_stripes;
+
 	} else if (map->type & BTRFS_BLOCK_GROUP_DUP) {
 	} else if (map->type & BTRFS_BLOCK_GROUP_DUP) {
 		if (rw & (1 << BIO_RW))
 		if (rw & (1 << BIO_RW))
 			num_stripes = map->num_stripes;
 			num_stripes = map->num_stripes;
 		else if (mirror_num)
 		else if (mirror_num)
 			stripe_index = mirror_num - 1;
 			stripe_index = mirror_num - 1;
+
 	} else if (map->type & BTRFS_BLOCK_GROUP_RAID10) {
 	} else if (map->type & BTRFS_BLOCK_GROUP_RAID10) {
 		int factor = map->num_stripes / map->sub_stripes;
 		int factor = map->num_stripes / map->sub_stripes;
 
 
@@ -1530,11 +1530,8 @@ again:
 			num_stripes = map->sub_stripes;
 			num_stripes = map->sub_stripes;
 		else if (mirror_num)
 		else if (mirror_num)
 			stripe_index += mirror_num - 1;
 			stripe_index += mirror_num - 1;
-		else {
-			u64 orig_stripe_nr = stripe_nr;
-			stripe_index += do_div(orig_stripe_nr,
-					       map->sub_stripes);
-		}
+		else
+			stripe_index += current->pid % map->sub_stripes;
 	} else {
 	} else {
 		/*
 		/*
 		 * after this do_div call, stripe_nr is the number of stripes
 		 * after this do_div call, stripe_nr is the number of stripes