summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2008-05-15 16:48:15 +1000
committerNeil Brown <neilb@suse.de>2008-05-15 16:48:15 +1000
commit5f8097beb973842287e5ac6e2d2644accb04cf25 (patch)
treeeb4556a07770b003723871827df4ed3371cf0768 /util.c
parenta322f70c41a1c381e19b1913b8ad2a8b77078800 (diff)
more ddf stuff
Create a BVD in a DDF Do not actually assemble it yet...
Diffstat (limited to 'util.c')
-rw-r--r--util.c17
1 files changed, 17 insertions, 0 deletions
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)
{