From 75a721fd7d5e5ee7e578571fe58755fe07e446fc Mon Sep 17 00:00:00 2001 From: Lukasz Dorau Date: Thu, 19 Dec 2013 13:02:12 +0100 Subject: [PATCH] policy: NULL path isn't really acceptable - use the devname According to: commit b451aa4846c5ccca5447a6b6d45e5623b8c8e961 Fix handling for "auto" line in mdadm.conf a NULL path isn't really acceptable and the devname should be used instead. Signed-off-by: Lukasz Dorau Signed-off-by: NeilBrown --- policy.c | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/policy.c b/policy.c index b4f3943..104695d 100644 --- a/policy.c +++ b/policy.c @@ -200,26 +200,25 @@ static char *disk_path(struct mdinfo *disk) int rv; by_path = opendir(symlink); - if (!by_path) - return NULL; - prefix_len = strlen(symlink); - - while ((ent = readdir(by_path)) != NULL) { - if (ent->d_type != DT_LNK) - continue; - strncpy(symlink + prefix_len, - ent->d_name, - sizeof(symlink) - prefix_len); - if (stat(symlink, &stb) < 0) - continue; - if ((stb.st_mode & S_IFMT) != S_IFBLK) - continue; - if (stb.st_rdev != makedev(disk->disk.major, disk->disk.minor)) - continue; + if (by_path) { + prefix_len = strlen(symlink); + while ((ent = readdir(by_path)) != NULL) { + if (ent->d_type != DT_LNK) + continue; + strncpy(symlink + prefix_len, + ent->d_name, + sizeof(symlink) - prefix_len); + if (stat(symlink, &stb) < 0) + continue; + if ((stb.st_mode & S_IFMT) != S_IFBLK) + continue; + if (stb.st_rdev != makedev(disk->disk.major, disk->disk.minor)) + continue; + closedir(by_path); + return strdup(ent->d_name); + } closedir(by_path); - return strdup(ent->d_name); } - closedir(by_path); /* 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)-1); -- 1.8.5.3