struct mdstat_ent *ent;
struct mddev_dev *d;
struct mddev_dev *rv = NULL;
+ struct map_ent *map = NULL, *me;
if (!mdstat)
return NULL;
!is_subarray(&ent->metadata_version[9])) {
d = xmalloc(sizeof(*d));
memset(d, 0, sizeof(*d));
- if (asprintf(&d->devname, "/dev/%s", ent->dev) < 0) {
+ me = map_by_devnm(&map, ent->dev);
+ if (me)
+ d->devname = xstrdup(me->path);
+ else if (asprintf(&d->devname, "/dev/%s", ent->dev) < 0) {
free(d);
continue;
}
rv = d;
}
free_mdstat(mdstat);
+ map_free(map);
return rv;
}
int uuid[4], char *path);
extern void map_remove(struct map_ent **map, char *devnm);
extern struct map_ent *map_by_uuid(struct map_ent **map, int uuid[4]);
+#ifdef MDASSEMBLE
+static inline struct map_ent *map_by_devnm(struct map_ent **map, char *name)
+{
+ return NULL;
+}
+static inline void map_free(struct map_ent *map)
+{
+}
+#else
extern struct map_ent *map_by_devnm(struct map_ent **map, char *devnm);
+extern void map_free(struct map_ent *map);
+#endif
extern struct map_ent *map_by_name(struct map_ent **map, char *name);
extern void map_read(struct map_ent **melp);
extern int map_write(struct map_ent *mel);
extern void map_delete(struct map_ent **mapp, char *devnm);
-extern void map_free(struct map_ent *map);
extern void map_add(struct map_ent **melp,
char *devnm, char *metadata, int uuid[4], char *path);
extern int map_lock(struct map_ent **melp);