X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fmdadm.git;a=blobdiff_plain;f=util.c;h=3838b6e5218eb2131df917388ee5f2305b8d4243;hp=a33486fde62c4bf1d67e510d7e2abc33cb1ba58f;hb=5f8097beb973842287e5ac6e2d2644accb04cf25;hpb=a322f70c41a1c381e19b1913b8ad2a8b77078800 diff --git a/util.c b/util.c index a33486fd..3838b6e5 100644 --- a/util.c +++ b/util.c @@ -609,6 +609,23 @@ char *human_size_brief(long long bytes) } #endif +unsigned long long calc_array_size(int level, int raid_disks, int layout, + int chunksize, unsigned long long devsize) +{ + int data_disks = 0; + switch (level) { + case 0: data_disks = raid_disks; break; + case 1: data_disks = 1; break; + case 4: + case 5: data_disks = raid_disks - 1; break; + case 6: data_disks = raid_disks - 2; break; + case 10: data_disks = raid_disks / (layout & 255) / ((layout>>8)&255); + break; + } + devsize &= ~(unsigned long long)((chunksize>>9)-1); + return data_disks * devsize; +} + #if !defined(MDASSEMBLE) || defined(MDASSEMBLE) && defined(MDASSEMBLE_AUTO) int get_mdp_major(void) {