The path argument of virFileIsDir should be a full name of file, pathname and filename. Fixed it by passing the full path name to virFileIsDir. Signed-off-by: Wang Huaqiang <huaqiang.wang@xxxxxxxxx> --- src/util/virresctrl.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/util/virresctrl.c b/src/util/virresctrl.c index 7aeca9d..e0ad460 100644 --- a/src/util/virresctrl.c +++ b/src/util/virresctrl.c @@ -2665,6 +2665,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor, int ret = -1; DIR *dirp = NULL; char *datapath = NULL; + char *filepath = NULL; struct dirent *ent = NULL; virResctrlMonitorStatsPtr stat = NULL; @@ -2684,13 +2685,18 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor, while (virDirRead(dirp, &ent, datapath) > 0) { char *node_id = NULL; + VIR_FREE(filepath); + /* Looking for directory that contains resource utilization * information file. The directory name is arranged in format * "mon_<node_name>_<node_id>". For example, "mon_L3_00" and * "mon_L3_01" are two target directories for a two nodes system * with resource utilization data file for each node respectively. */ - if (!virFileIsDir(ent->d_name)) + if (virAsprintf(&filepath, "%s/%s", datapath, ent->d_name) < 0); + goto cleanup; + + if (!virFileIsDir(filepath)) continue; /* Looking for directory has a prefix 'mon_L' */ @@ -2734,6 +2740,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor, ret = 0; cleanup: VIR_FREE(datapath); + VIR_FREE(filepath); VIR_FREE(stat); VIR_DIR_CLOSE(dirp); return ret; -- 2.7.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list