From 54887ad8cbb52ae3767b693c357a6c8d95af5da4 Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Thu, 2 Sep 2010 11:54:06 +1000 Subject: [PATCH] Add guess_super_type This can select to only guess array types, or only guess partition types. Signed-off-by: NeilBrown --- mdadm.h | 6 +++++- util.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mdadm.h b/mdadm.h index c513c72..8970560 100644 --- a/mdadm.h +++ b/mdadm.h @@ -729,7 +729,11 @@ struct supertype { }; extern struct supertype *super_by_fd(int fd); -extern struct supertype *guess_super(int fd); +enum guess_types { guess_any, guess_array, guess_partitions }; +extern struct supertype *guess_super_type(int fd, enum guess_types guess_type); +static inline struct supertype *guess_super(int fd) { + return guess_super_type(fd, guess_any); +} extern struct supertype *dup_super(struct supertype *st); extern int get_dev_size(int fd, char *dname, unsigned long long *sizep); extern void get_one_disk(int mdfd, mdu_array_info_t *ainf, diff --git a/util.c b/util.c index c2169d6..0cb251c 100644 --- a/util.c +++ b/util.c @@ -1087,7 +1087,7 @@ struct supertype *dup_super(struct supertype *orig) return st; } -struct supertype *guess_super(int fd) +struct supertype *guess_super_type(int fd, enum guess_types guess_type) { /* try each load_super to find the best match, * and return the best superswitch @@ -1102,6 +1102,10 @@ struct supertype *guess_super(int fd) for (i=0 ; superlist[i]; i++) { int rv; ss = superlist[i]; + if (guess_type == guess_array && ss->add_to_super == NULL) + continue; + if (guess_type == guess_partitions && ss->add_to_super != NULL) + continue; memset(st, 0, sizeof(*st)); rv = ss->load_super(st, fd, NULL); if (rv == 0) {