This is the mail archive of the
cluster-cvs@sourceware.org
mailing list for the cluster.
cluster: STABLE2 - qdisk: propagate parent_holder information tochilds
- From: "Fabio M. Di Nitto" <fabbione at fedoraproject dot org>
- To: cluster-cvs-relay at redhat dot com
- Date: Wed, 11 Feb 2009 10:08:26 +0000 (UTC)
- Subject: cluster: STABLE2 - qdisk: propagate parent_holder information tochilds
Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=f8923285c28fe9647d820c18672adcbdd5495a3f
Commit: f8923285c28fe9647d820c18672adcbdd5495a3f
Parent: e00f1352670cb01f0bfbbf2d0ff6d283efcd3c5f
Author: Fabio M. Di Nitto <fdinitto@redhat.com>
AuthorDate: Wed Feb 11 10:54:05 2009 +0100
Committer: Fabio M. Di Nitto <fdinitto@redhat.com>
CommitterDate: Wed Feb 11 11:08:03 2009 +0100
qdisk: propagate parent_holder information to childs
Bug 484956 part 3.
If a device (e.g. sda) has holders (lvm or mpath), it's children
do not have holders information in sysfs.
Make sure to propagate the information from parent to children
when scanning in sysfs.
Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
---
cman/qdisk/scandisk.c | 23 +++++++++++++++--------
1 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/cman/qdisk/scandisk.c b/cman/qdisk/scandisk.c
index e0a486b..52fe7a3 100644
--- a/cman/qdisk/scandisk.c
+++ b/cman/qdisk/scandisk.c
@@ -626,10 +626,10 @@ static int sysfs_is_disk(char *path)
* -1 on generic error
* -2 -ENOMEM
*/
-static int scansysfs(struct devlisthead *devlisthead, char *path, int level)
+static int scansysfs(struct devlisthead *devlisthead, char *path, int level, int parent_holder)
{
struct devnode *startnode;
- int i, n, maj, min;
+ int i, n, maj, min, has_holder = 0;
struct dirent **namelist;
struct stat sb;
char newpath[MAXPATHLEN];
@@ -657,9 +657,16 @@ static int scansysfs(struct devlisthead *devlisthead, char *path, int level)
startnode->sysfsattrs.sysfs = 1;
startnode->sysfsattrs.removable =
sysfs_is_removable(newpath);
- startnode->sysfsattrs.holders =
- sysfs_has_subdirs_entries(newpath,
- "holders");
+
+ if (!parent_holder)
+ has_holder =
+ startnode->sysfsattrs.holders =
+ sysfs_has_subdirs_entries(newpath,
+ "holders");
+ else
+ has_holder =
+ startnode->sysfsattrs.holders = parent_holder;
+
startnode->sysfsattrs.slaves =
sysfs_has_subdirs_entries(newpath,
"slaves");
@@ -669,12 +676,12 @@ static int scansysfs(struct devlisthead *devlisthead, char *path, int level)
if (!stat(newpath, &sb) && !level)
if (S_ISDIR(sb.st_mode))
- if (scansysfs(devlisthead, newpath, 1) < 0)
+ if (scansysfs(devlisthead, newpath, 1, has_holder) < 0)
return -1;
if (!lstat(newpath, &sb))
if (S_ISDIR(sb.st_mode))
- if (scansysfs(devlisthead, newpath, 1) < 0)
+ if (scansysfs(devlisthead, newpath, 1, has_holder) < 0)
return -1;
}
@@ -725,7 +732,7 @@ struct devlisthead *scan_for_dev(struct devlisthead *devlisthead,
/* it's important we check those 3 errors and abort in case
* as it means that we are running out of mem,
*/
- devlisthead->sysfs = res = scansysfs(devlisthead, SYSBLOCKPATH, 0);
+ devlisthead->sysfs = res = scansysfs(devlisthead, SYSBLOCKPATH, 0, 0);
if (res < -1)
goto emergencyout;