From: Hannes Reinecke Date: Thu, 19 Apr 2012 09:08:59 +0000 (+0200) Subject: Use udev enumeration during discovery X-Git-Tag: upstream/0.5.0~31 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=185b60240fd1a827075b780bb8d497170dcfc00b;p=platform%2Fupstream%2Fmultipath-tools.git Use udev enumeration during discovery Instead of scanning /sys/block by hand we should be using enumeration provided by udev. Signed-off-by: Hannes Reinecke --- diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c index 426c511..d68324b 100644 --- a/libmultipath/discovery.c +++ b/libmultipath/discovery.c @@ -11,6 +11,7 @@ #include #include #include +#include #include "checkers.h" #include "vector.h" @@ -91,37 +92,32 @@ path_discover (vector pathvec, struct config * conf, char * devname, int flag) int path_discovery (vector pathvec, struct config * conf, int flag) { - DIR *blkdir; - struct dirent *blkdev; - struct stat statbuf; - char devpath[PATH_MAX]; + struct udev_enumerate *udev_iter; + struct udev_list_entry *entry; + char *devpath; char *devptr; int r = 0; - if (!(blkdir = opendir("/sys/block"))) + udev_iter = udev_enumerate_new(conf->udev); + if (!udev_iter) return 1; - strcpy(devpath,"/sys/block"); - while ((blkdev = readdir(blkdir)) != NULL) { - if ((strcmp(blkdev->d_name,".") == 0) || - (strcmp(blkdev->d_name,"..") == 0)) - continue; - - devptr = devpath + 10; - *devptr = '\0'; - strcat(devptr,"/"); - strcat(devptr,blkdev->d_name); - if (stat(devpath, &statbuf) < 0) - continue; - - if (S_ISDIR(statbuf.st_mode) == 0) - continue; + udev_enumerate_add_match_subsystem(udev_iter, "block"); + udev_enumerate_scan_devices(udev_iter); + udev_list_entry_foreach(entry, + udev_enumerate_get_list_entry(udev_iter)) { + devpath = udev_list_entry_get_name(entry); condlog(4, "Discover device %s", devpath); + devptr = strrchr(devpath, '/'); + if (devptr) + devptr++; + else + devptr = devpath; - r += path_discover(pathvec, conf, blkdev->d_name, flag); + r += path_discover(pathvec, conf, devptr, flag); } - closedir(blkdir); + udev_enumerate_unref(udev_iter); condlog(4, "Discovery status %d", r); return r; }