348 lines
11 KiB
Diff
348 lines
11 KiB
Diff
|
From b9ce7ab0218c550488587fdad5708628d6a5ffc2 Mon Sep 17 00:00:00 2001
|
||
|
From: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||
|
Date: Thu, 23 Mar 2023 17:50:14 +0100
|
||
|
Subject: [PATCH 121/125] mdadm: define DEV_MD_DIR
|
||
|
|
||
|
It is used many times. Additionally define _LEN to avoid repeated
|
||
|
strlen() calls when length is needed.
|
||
|
|
||
|
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
|
||
|
Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
|
||
|
---
|
||
|
Create.c | 7 +++----
|
||
|
Detail.c | 9 ++++-----
|
||
|
Incremental.c | 4 ++--
|
||
|
Monitor.c | 32 ++++++++++++++++++--------------
|
||
|
config.c | 10 +++++-----
|
||
|
lib.c | 2 +-
|
||
|
mapfile.c | 12 ++++++------
|
||
|
mdadm.h | 8 ++++++++
|
||
|
mdopen.c | 6 +++---
|
||
|
super-ddf.c | 2 +-
|
||
|
super-intel.c | 2 +-
|
||
|
super1.c | 3 +--
|
||
|
sysfs.c | 2 +-
|
||
|
13 files changed, 54 insertions(+), 45 deletions(-)
|
||
|
|
||
|
diff --git a/Create.c b/Create.c
|
||
|
index aa0472dd..ea6a4745 100644
|
||
|
--- a/Create.c
|
||
|
+++ b/Create.c
|
||
|
@@ -1024,10 +1024,9 @@ int Create(struct supertype *st, char *mddev,
|
||
|
* it could be in conflict with already existing device
|
||
|
* e.g. container, array
|
||
|
*/
|
||
|
- if (strncmp(chosen_name, "/dev/md/", 8) == 0 &&
|
||
|
- map_by_name(&map, chosen_name+8) != NULL) {
|
||
|
- pr_err("Array name %s is in use already.\n",
|
||
|
- chosen_name);
|
||
|
+ if (strncmp(chosen_name, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0 &&
|
||
|
+ map_by_name(&map, chosen_name + DEV_MD_DIR_LEN)) {
|
||
|
+ pr_err("Array name %s is in use already.\n", chosen_name);
|
||
|
close(mdfd);
|
||
|
map_unlock(&map);
|
||
|
udev_unblock();
|
||
|
diff --git a/Detail.c b/Detail.c
|
||
|
index 4ef26460..206d88e3 100644
|
||
|
--- a/Detail.c
|
||
|
+++ b/Detail.c
|
||
|
@@ -254,10 +254,9 @@ int Detail(char *dev, struct context *c)
|
||
|
fname_from_uuid(st, info, nbuf, ':');
|
||
|
printf("MD_UUID=%s\n", nbuf + 5);
|
||
|
mp = map_by_uuid(&map, info->uuid);
|
||
|
- if (mp && mp->path &&
|
||
|
- strncmp(mp->path, "/dev/md/", 8) == 0) {
|
||
|
+ if (mp && mp->path && strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0) {
|
||
|
printf("MD_DEVNAME=");
|
||
|
- print_escape(mp->path + 8);
|
||
|
+ print_escape(mp->path + DEV_MD_DIR_LEN);
|
||
|
putchar('\n');
|
||
|
}
|
||
|
|
||
|
@@ -273,9 +272,9 @@ int Detail(char *dev, struct context *c)
|
||
|
printf("MD_UUID=%s\n", nbuf+5);
|
||
|
}
|
||
|
if (mp && mp->path &&
|
||
|
- strncmp(mp->path, "/dev/md/", 8) == 0) {
|
||
|
+ strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0) {
|
||
|
printf("MD_DEVNAME=");
|
||
|
- print_escape(mp->path+8);
|
||
|
+ print_escape(mp->path + DEV_MD_DIR_LEN);
|
||
|
putchar('\n');
|
||
|
}
|
||
|
map_free(map);
|
||
|
diff --git a/Incremental.c b/Incremental.c
|
||
|
index 49a71f72..59b850f1 100644
|
||
|
--- a/Incremental.c
|
||
|
+++ b/Incremental.c
|
||
|
@@ -460,8 +460,8 @@ int Incremental(struct mddev_dev *devlist, struct context *c,
|
||
|
info.array.working_disks ++;
|
||
|
|
||
|
}
|
||
|
- if (strncmp(chosen_name, "/dev/md/", 8) == 0)
|
||
|
- md_devname = chosen_name+8;
|
||
|
+ if (strncmp(chosen_name, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||
|
+ md_devname = chosen_name + DEV_MD_DIR_LEN;
|
||
|
else
|
||
|
md_devname = chosen_name;
|
||
|
if (c->export) {
|
||
|
diff --git a/Monitor.c b/Monitor.c
|
||
|
index 44918184..3273f2fb 100644
|
||
|
--- a/Monitor.c
|
||
|
+++ b/Monitor.c
|
||
|
@@ -36,9 +36,18 @@
|
||
|
#define EVENT_NAME_MAX 32
|
||
|
#define AUTOREBUILD_PID_PATH MDMON_DIR "/autorebuild.pid"
|
||
|
|
||
|
+/**
|
||
|
+ * struct state - external array or container properties.
|
||
|
+ * @devname: has length of %DEV_MD_DIR + device name + terminating byte
|
||
|
+ * @devnm: to sync with mdstat info
|
||
|
+ * @parent_devnm: or subarray, devnm of parent, for others, ""
|
||
|
+ * @subarray: for a container it is a link to first subarray, for a subarray it is a link to next
|
||
|
+ * subarray in the same container
|
||
|
+ * @parent: for a subarray it is a link to its container
|
||
|
+ */
|
||
|
struct state {
|
||
|
- char devname[MD_NAME_MAX + sizeof("/dev/md/")]; /* length of "/dev/md/" + device name + terminating byte*/
|
||
|
- char devnm[MD_NAME_MAX]; /* to sync with mdstat info */
|
||
|
+ char devname[MD_NAME_MAX + sizeof(DEV_MD_DIR)];
|
||
|
+ char devnm[MD_NAME_MAX];
|
||
|
unsigned int utime;
|
||
|
int err;
|
||
|
char *spare_group;
|
||
|
@@ -49,15 +58,10 @@ struct state {
|
||
|
int devstate[MAX_DISKS];
|
||
|
dev_t devid[MAX_DISKS];
|
||
|
int percent;
|
||
|
- char parent_devnm[MD_NAME_MAX]; /* For subarray, devnm of parent.
|
||
|
- * For others, ""
|
||
|
- */
|
||
|
+ char parent_devnm[MD_NAME_MAX];
|
||
|
struct supertype *metadata;
|
||
|
- struct state *subarray;/* for a container it is a link to first subarray
|
||
|
- * for a subarray it is a link to next subarray
|
||
|
- * in the same container */
|
||
|
- struct state *parent; /* for a subarray it is a link to its container
|
||
|
- */
|
||
|
+ struct state *subarray;
|
||
|
+ struct state *parent;
|
||
|
struct state *next;
|
||
|
};
|
||
|
|
||
|
@@ -252,8 +256,8 @@ int Monitor(struct mddev_dev *devlist,
|
||
|
continue;
|
||
|
|
||
|
st = xcalloc(1, sizeof *st);
|
||
|
- snprintf(st->devname, MD_NAME_MAX + sizeof("/dev/md/"),
|
||
|
- "/dev/md/%s", basename(mdlist->devname));
|
||
|
+ snprintf(st->devname, MD_NAME_MAX + sizeof(DEV_MD_DIR), DEV_MD_DIR "%s",
|
||
|
+ basename(mdlist->devname));
|
||
|
st->next = statelist;
|
||
|
st->devnm[0] = 0;
|
||
|
st->percent = RESYNC_UNKNOWN;
|
||
|
@@ -274,7 +278,7 @@ int Monitor(struct mddev_dev *devlist,
|
||
|
|
||
|
st = xcalloc(1, sizeof *st);
|
||
|
mdlist = conf_get_ident(dv->devname);
|
||
|
- snprintf(st->devname, MD_NAME_MAX + sizeof("/dev/md/"), "%s", dv->devname);
|
||
|
+ snprintf(st->devname, MD_NAME_MAX + sizeof(DEV_MD_DIR), "%s", dv->devname);
|
||
|
st->next = statelist;
|
||
|
st->devnm[0] = 0;
|
||
|
st->percent = RESYNC_UNKNOWN;
|
||
|
@@ -942,7 +946,7 @@ static int add_new_arrays(struct mdstat_ent *mdstat, struct state **statelist)
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- snprintf(st->devname, MD_NAME_MAX + sizeof("/dev/md/"), "%s", name);
|
||
|
+ snprintf(st->devname, MD_NAME_MAX + sizeof(DEV_MD_DIR), "%s", name);
|
||
|
if ((fd = open(st->devname, O_RDONLY)) < 0 ||
|
||
|
md_get_array_info(fd, &array) < 0) {
|
||
|
/* no such array */
|
||
|
diff --git a/config.c b/config.c
|
||
|
index eeedd0c6..59d5bfb6 100644
|
||
|
--- a/config.c
|
||
|
+++ b/config.c
|
||
|
@@ -405,7 +405,7 @@ void arrayline(char *line)
|
||
|
* or anything that doesn't start '/' or '<'
|
||
|
*/
|
||
|
if (strcasecmp(w, "<ignore>") == 0 ||
|
||
|
- strncmp(w, "/dev/md/", 8) == 0 ||
|
||
|
+ strncmp(w, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0 ||
|
||
|
(w[0] != '/' && w[0] != '<') ||
|
||
|
(strncmp(w, "/dev/md", 7) == 0 &&
|
||
|
is_number(w + 7)) ||
|
||
|
@@ -1102,13 +1102,13 @@ int devname_matches(char *name, char *match)
|
||
|
* mdNN with NN
|
||
|
* then just strcmp
|
||
|
*/
|
||
|
- if (strncmp(name, "/dev/md/", 8) == 0)
|
||
|
- name += 8;
|
||
|
+ if (strncmp(name, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||
|
+ name += DEV_MD_DIR_LEN;
|
||
|
else if (strncmp(name, "/dev/", 5) == 0)
|
||
|
name += 5;
|
||
|
|
||
|
- if (strncmp(match, "/dev/md/", 8) == 0)
|
||
|
- match += 8;
|
||
|
+ if (strncmp(match, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0)
|
||
|
+ match += DEV_MD_DIR_LEN;
|
||
|
else if (strncmp(match, "/dev/", 5) == 0)
|
||
|
match += 5;
|
||
|
|
||
|
diff --git a/lib.c b/lib.c
|
||
|
index e395b28d..65ea51e0 100644
|
||
|
--- a/lib.c
|
||
|
+++ b/lib.c
|
||
|
@@ -313,7 +313,7 @@ char *map_dev_preferred(int major, int minor, int create,
|
||
|
|
||
|
for (p = devlist; p; p = p->next)
|
||
|
if (p->major == major && p->minor == minor) {
|
||
|
- if (strncmp(p->name, "/dev/md/",8) == 0 ||
|
||
|
+ if (strncmp(p->name, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0 ||
|
||
|
(prefer && strstr(p->name, prefer))) {
|
||
|
if (preferred == NULL ||
|
||
|
strlen(p->name) < strlen(preferred))
|
||
|
diff --git a/mapfile.c b/mapfile.c
|
||
|
index ac351768..34fea179 100644
|
||
|
--- a/mapfile.c
|
||
|
+++ b/mapfile.c
|
||
|
@@ -320,9 +320,9 @@ struct map_ent *map_by_name(struct map_ent **map, char *name)
|
||
|
for (mp = *map ; mp ; mp = mp->next) {
|
||
|
if (!mp->path)
|
||
|
continue;
|
||
|
- if (strncmp(mp->path, "/dev/md/", 8) != 0)
|
||
|
+ if (strncmp(mp->path, DEV_MD_DIR, DEV_MD_DIR_LEN) != 0)
|
||
|
continue;
|
||
|
- if (strcmp(mp->path+8, name) != 0)
|
||
|
+ if (strcmp(mp->path + DEV_MD_DIR_LEN, name) != 0)
|
||
|
continue;
|
||
|
if (!mddev_busy(mp->devnm)) {
|
||
|
mp->bad = 1;
|
||
|
@@ -413,7 +413,7 @@ void RebuildMap(void)
|
||
|
devid = devnm2devid(md->devnm);
|
||
|
path = map_dev(major(devid), minor(devid), 0);
|
||
|
if (path == NULL ||
|
||
|
- strncmp(path, "/dev/md/", 8) != 0) {
|
||
|
+ strncmp(path, DEV_MD_DIR, DEV_MD_DIR_LEN) != 0) {
|
||
|
/* We would really like a name that provides
|
||
|
* an MD_DEVNAME for udev.
|
||
|
* The name needs to be unique both in /dev/md/
|
||
|
@@ -434,7 +434,7 @@ void RebuildMap(void)
|
||
|
if (match && match->devname && match->devname[0] == '/') {
|
||
|
path = match->devname;
|
||
|
if (path[0] != '/') {
|
||
|
- strcpy(namebuf, "/dev/md/");
|
||
|
+ strcpy(namebuf, DEV_MD_DIR);
|
||
|
strcat(namebuf, path);
|
||
|
path = namebuf;
|
||
|
}
|
||
|
@@ -478,10 +478,10 @@ void RebuildMap(void)
|
||
|
|
||
|
while (conflict) {
|
||
|
if (unum >= 0)
|
||
|
- sprintf(namebuf, "/dev/md/%s%s%d",
|
||
|
+ sprintf(namebuf, DEV_MD_DIR "%s%s%d",
|
||
|
name, sep, unum);
|
||
|
else
|
||
|
- sprintf(namebuf, "/dev/md/%s",
|
||
|
+ sprintf(namebuf, DEV_MD_DIR "%s",
|
||
|
name);
|
||
|
unum++;
|
||
|
if (lstat(namebuf, &stb) != 0 &&
|
||
|
diff --git a/mdadm.h b/mdadm.h
|
||
|
index 0d995445..67d73f96 100644
|
||
|
--- a/mdadm.h
|
||
|
+++ b/mdadm.h
|
||
|
@@ -100,6 +100,14 @@ struct dlm_lksb {
|
||
|
#define DEFAULT_BITMAP_DELAY 5
|
||
|
#define DEFAULT_MAX_WRITE_BEHIND 256
|
||
|
|
||
|
+/* DEV_MD_DIR points to named MD devices directory.
|
||
|
+ * DEV_MD_DIR_LEN is a length with Null byte excluded.
|
||
|
+ */
|
||
|
+#ifndef DEV_MD_DIR
|
||
|
+#define DEV_MD_DIR "/dev/md/"
|
||
|
+#define DEV_MD_DIR_LEN (sizeof(DEV_MD_DIR) - 1)
|
||
|
+#endif /* DEV_MD_DIR */
|
||
|
+
|
||
|
/* MAP_DIR should be somewhere that persists across the pivotroot
|
||
|
* from early boot to late boot.
|
||
|
* /run seems to have emerged as the best standard.
|
||
|
diff --git a/mdopen.c b/mdopen.c
|
||
|
index 810f79a3..6c3bdb6a 100644
|
||
|
--- a/mdopen.c
|
||
|
+++ b/mdopen.c
|
||
|
@@ -188,12 +188,12 @@ int create_mddev(char *dev, char *name, int autof, int trustworthy,
|
||
|
parts = autof >> 3;
|
||
|
autof &= 7;
|
||
|
|
||
|
- strcpy(chosen, "/dev/md/");
|
||
|
+ strcpy(chosen, DEV_MD_DIR);
|
||
|
cname = chosen + strlen(chosen);
|
||
|
|
||
|
if (dev) {
|
||
|
- if (strncmp(dev, "/dev/md/", 8) == 0) {
|
||
|
- strcpy(cname, dev+8);
|
||
|
+ if (strncmp(dev, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0) {
|
||
|
+ strcpy(cname, dev + DEV_MD_DIR_LEN);
|
||
|
} else if (strncmp(dev, "/dev/", 5) == 0) {
|
||
|
char *e = dev + strlen(dev);
|
||
|
while (e > dev && isdigit(e[-1]))
|
||
|
diff --git a/super-ddf.c b/super-ddf.c
|
||
|
index b86c6acd..7213284e 100644
|
||
|
--- a/super-ddf.c
|
||
|
+++ b/super-ddf.c
|
||
|
@@ -1648,7 +1648,7 @@ static void brief_examine_subarrays_ddf(struct supertype *st, int verbose)
|
||
|
fname_from_uuid(st, &info, nbuf1, ':');
|
||
|
_ddf_array_name(namebuf, ddf, i);
|
||
|
printf("ARRAY%s%s container=%s member=%d UUID=%s\n",
|
||
|
- namebuf[0] == '\0' ? "" : " /dev/md/", namebuf,
|
||
|
+ namebuf[0] == '\0' ? "" : " " DEV_MD_DIR, namebuf,
|
||
|
nbuf+5, i, nbuf1+5);
|
||
|
}
|
||
|
}
|
||
|
diff --git a/super-intel.c b/super-intel.c
|
||
|
index a5c86cb2..aaf6659e 100644
|
||
|
--- a/super-intel.c
|
||
|
+++ b/super-intel.c
|
||
|
@@ -2309,7 +2309,7 @@ static void brief_examine_subarrays_imsm(struct supertype *st, int verbose)
|
||
|
super->current_vol = i;
|
||
|
getinfo_super_imsm(st, &info, NULL);
|
||
|
fname_from_uuid(st, &info, nbuf1, ':');
|
||
|
- printf("ARRAY /dev/md/%.16s container=%s member=%d UUID=%s\n",
|
||
|
+ printf("ARRAY " DEV_MD_DIR "%.16s container=%s member=%d UUID=%s\n",
|
||
|
dev->volume, nbuf + 5, i, nbuf1 + 5);
|
||
|
}
|
||
|
}
|
||
|
diff --git a/super1.c b/super1.c
|
||
|
index 938c3a68..856b0208 100644
|
||
|
--- a/super1.c
|
||
|
+++ b/super1.c
|
||
|
@@ -645,8 +645,7 @@ static void brief_examine_super1(struct supertype *st, int verbose)
|
||
|
|
||
|
printf("ARRAY ");
|
||
|
if (nm) {
|
||
|
- printf("/dev/md/");
|
||
|
- print_escape(nm);
|
||
|
+ printf(DEV_MD_DIR "%s", nm);
|
||
|
putchar(' ');
|
||
|
}
|
||
|
if (verbose && c)
|
||
|
diff --git a/sysfs.c b/sysfs.c
|
||
|
index ca1d888f..94d02f53 100644
|
||
|
--- a/sysfs.c
|
||
|
+++ b/sysfs.c
|
||
|
@@ -1114,7 +1114,7 @@ void sysfsline(char *line)
|
||
|
if (strncasecmp(w, "name=", 5) == 0) {
|
||
|
char *devname = w + 5;
|
||
|
|
||
|
- if (strncmp(devname, "/dev/md/", 8) == 0) {
|
||
|
+ if (strncmp(devname, DEV_MD_DIR, DEV_MD_DIR_LEN) == 0) {
|
||
|
if (sr->devname)
|
||
|
pr_err("Only give one device per SYSFS line: %s\n",
|
||
|
devname);
|
||
|
--
|
||
|
2.38.1
|
||
|
|