Remove old patch
OBS-URL: https://build.opensuse.org/package/show/Base:System/mdadm?expand=0&rev=53
This commit is contained in:
parent
f4371a9780
commit
0cbcffd111
125
auto-line.fix
125
auto-line.fix
@ -1,125 +0,0 @@
|
|||||||
From b451aa4846c5ccca5447a6b6d45e5623b8c8e961 Mon Sep 17 00:00:00 2001
|
|
||||||
From: NeilBrown <neilb@suse.de>
|
|
||||||
Date: Thu, 6 Oct 2011 13:00:28 +1100
|
|
||||||
Subject: [PATCH] Fix handling for "auto" line in mdadm.conf
|
|
||||||
|
|
||||||
Two problems.
|
|
||||||
|
|
||||||
1/ pol_merge was ignoring the pol_auto tag so any 'auto' information
|
|
||||||
was lost
|
|
||||||
2/ If a device had not path (e.g. loop devices) or if there were no
|
|
||||||
path-based policies, we didn't bother looking for policy at all.
|
|
||||||
So path-independant policies were ignored.
|
|
||||||
|
|
||||||
Reported-by: Christian Boltz <suse-beta@cboltz.de>
|
|
||||||
Signed-off-by: NeilBrown <neilb@suse.de>
|
|
||||||
---
|
|
||||||
policy.c | 35 ++++++++++++++++++++++-------------
|
|
||||||
1 files changed, 22 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/policy.c b/policy.c
|
|
||||||
index 4a6ef82..ef48353 100644
|
|
||||||
--- a/policy.c
|
|
||||||
+++ b/policy.c
|
|
||||||
@@ -195,7 +195,9 @@ static char *disk_path(struct mdinfo *disk)
|
|
||||||
int prefix_len;
|
|
||||||
DIR *by_path;
|
|
||||||
char symlink[PATH_MAX] = "/dev/disk/by-path/";
|
|
||||||
+ char nm[PATH_MAX];
|
|
||||||
struct dirent *ent;
|
|
||||||
+ int rv;
|
|
||||||
|
|
||||||
by_path = opendir(symlink);
|
|
||||||
if (!by_path)
|
|
||||||
@@ -218,7 +220,17 @@ static char *disk_path(struct mdinfo *disk)
|
|
||||||
return strdup(ent->d_name);
|
|
||||||
}
|
|
||||||
closedir(by_path);
|
|
||||||
- return NULL;
|
|
||||||
+ /* A NULL path isn't really acceptable - use the devname.. */
|
|
||||||
+ sprintf(symlink, "/sys/dev/block/%d:%d", disk->disk.major, disk->disk.minor);
|
|
||||||
+ rv = readlink(symlink, nm, sizeof(nm));
|
|
||||||
+ if (rv > 0) {
|
|
||||||
+ char *dname;
|
|
||||||
+ nm[rv] = 0;
|
|
||||||
+ dname = strrchr(nm, '/');
|
|
||||||
+ if (dname)
|
|
||||||
+ return strdup(dname + 1);
|
|
||||||
+ }
|
|
||||||
+ return strdup("unknown");
|
|
||||||
}
|
|
||||||
|
|
||||||
char type_part[] = "part";
|
|
||||||
@@ -245,13 +257,13 @@ static int pol_match(struct rule *rule, char *path, char *type)
|
|
||||||
if (rule->name == rule_path) {
|
|
||||||
if (pathok == 0)
|
|
||||||
pathok = -1;
|
|
||||||
- if (fnmatch(rule->value, path, 0) == 0)
|
|
||||||
+ if (path && fnmatch(rule->value, path, 0) == 0)
|
|
||||||
pathok = 1;
|
|
||||||
}
|
|
||||||
if (rule->name == rule_type) {
|
|
||||||
if (typeok == 0)
|
|
||||||
typeok = -1;
|
|
||||||
- if (strcmp(rule->value, type) == 0)
|
|
||||||
+ if (type && strcmp(rule->value, type) == 0)
|
|
||||||
typeok = 1;
|
|
||||||
}
|
|
||||||
rule = rule->next;
|
|
||||||
@@ -270,7 +282,8 @@ static void pol_merge(struct dev_policy **pol, struct rule *rule)
|
|
||||||
|
|
||||||
for (r = rule; r ; r = r->next)
|
|
||||||
if (r->name == pol_act ||
|
|
||||||
- r->name == pol_domain)
|
|
||||||
+ r->name == pol_domain ||
|
|
||||||
+ r->name == pol_auto)
|
|
||||||
pol_new(pol, r->name, r->value, metadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -280,7 +293,10 @@ static int path_has_part(char *path, char **part)
|
|
||||||
* if it does, place a pointer to "-pathNN"
|
|
||||||
* in 'part'.
|
|
||||||
*/
|
|
||||||
- int l = strlen(path);
|
|
||||||
+ int l;
|
|
||||||
+ if (!path)
|
|
||||||
+ return 0;
|
|
||||||
+ l = strlen(path);
|
|
||||||
while (l > 1 && isdigit(path[l-1]))
|
|
||||||
l--;
|
|
||||||
if (l < 5 || strncmp(path+l-5, "-part", 5) != 0)
|
|
||||||
@@ -343,9 +359,6 @@ struct dev_policy *path_policy(char *path, char *type)
|
|
||||||
struct dev_policy *pol = NULL;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
- if (!type)
|
|
||||||
- return NULL;
|
|
||||||
-
|
|
||||||
rules = config_rules;
|
|
||||||
|
|
||||||
while (rules) {
|
|
||||||
@@ -366,7 +379,7 @@ struct dev_policy *path_policy(char *path, char *type)
|
|
||||||
/* Now add any metadata-specific internal knowledge
|
|
||||||
* about this path
|
|
||||||
*/
|
|
||||||
- for (i=0; superlist[i]; i++)
|
|
||||||
+ for (i=0; path && superlist[i]; i++)
|
|
||||||
if (superlist[i]->get_disk_controller_domain) {
|
|
||||||
const char *d =
|
|
||||||
superlist[i]->get_disk_controller_domain(path);
|
|
||||||
@@ -399,12 +412,8 @@ struct dev_policy *disk_policy(struct mdinfo *disk)
|
|
||||||
char *type = disk_type(disk);
|
|
||||||
struct dev_policy *pol = NULL;
|
|
||||||
|
|
||||||
- if (!type)
|
|
||||||
- return NULL;
|
|
||||||
if (config_rules_has_path)
|
|
||||||
path = disk_path(disk);
|
|
||||||
- if (!path)
|
|
||||||
- return NULL;
|
|
||||||
|
|
||||||
pol = path_policy(path, type);
|
|
||||||
|
|
||||||
--
|
|
||||||
1.7.6.4
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user