make iostats functions usable with device path
This commit is contained in:
		
							parent
							
								
									3badfe1723
								
							
						
					
					
						commit
						1a974c02f2
					
				@ -1174,7 +1174,8 @@ int sigar_file_system_list_get(sigar_t *sigar,
 | 
			
		||||
    return SIGAR_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define FSDEV_IS_DEV(dev) strnEQ(dev, "/dev/", 5)
 | 
			
		||||
#define FSDEV_PREFIX "/dev/"
 | 
			
		||||
#define FSDEV_IS_DEV(dev) strnEQ(dev, FSDEV_PREFIX, 5)
 | 
			
		||||
 | 
			
		||||
#define ST_MAJOR(sb) major((sb).st_rdev)
 | 
			
		||||
#define ST_MINOR(sb) minor((sb).st_rdev)
 | 
			
		||||
@ -1190,8 +1191,23 @@ static iodev_t *get_fsdev(sigar_t *sigar,
 | 
			
		||||
    struct stat sb;
 | 
			
		||||
    sigar_uint64_t id;
 | 
			
		||||
    sigar_file_system_list_t fslist;
 | 
			
		||||
    int i, status;
 | 
			
		||||
    int i, status, is_dev=0;
 | 
			
		||||
    int debug = SIGAR_LOG_IS_DEBUG(sigar);
 | 
			
		||||
    char dev_name[SIGAR_FS_NAME_LEN];
 | 
			
		||||
 | 
			
		||||
    if (!sigar->fsdev) {
 | 
			
		||||
        sigar->fsdev = sigar_cache_new(15);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (*dirname != '/') {
 | 
			
		||||
        snprintf(dev_name, sizeof(dev_name),
 | 
			
		||||
                 FSDEV_PREFIX "%s", dirname);
 | 
			
		||||
        dirname = dev_name;
 | 
			
		||||
        is_dev = 1;
 | 
			
		||||
    }
 | 
			
		||||
    else if (FSDEV_IS_DEV(dirname)) {
 | 
			
		||||
        is_dev = 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (stat(dirname, &sb) < 0) {
 | 
			
		||||
        if (debug) {
 | 
			
		||||
@ -1202,10 +1218,11 @@ static iodev_t *get_fsdev(sigar_t *sigar,
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    id = SIGAR_FSDEV_ID(sb);
 | 
			
		||||
 | 
			
		||||
    if (!sigar->fsdev) {
 | 
			
		||||
        sigar->fsdev = sigar_cache_new(15);
 | 
			
		||||
    if (is_dev) {
 | 
			
		||||
        id = sb.st_rdev;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        id = SIGAR_FSDEV_ID(sb);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    entry = sigar_cache_get(sigar->fsdev, id);
 | 
			
		||||
@ -1214,6 +1231,18 @@ static iodev_t *get_fsdev(sigar_t *sigar,
 | 
			
		||||
        return (iodev_t *)entry->value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (is_dev) {
 | 
			
		||||
        iodev_t *iodev;
 | 
			
		||||
        entry->value = iodev = malloc(sizeof(*iodev));
 | 
			
		||||
        SIGAR_ZERO(iodev);
 | 
			
		||||
        SIGAR_SSTRCPY(iodev->name, dirname);
 | 
			
		||||
        if (debug) {
 | 
			
		||||
            sigar_log_printf(sigar, SIGAR_LOG_DEBUG,
 | 
			
		||||
                             "[fsdev] %s is_dev=true", dirname);
 | 
			
		||||
        }
 | 
			
		||||
        return iodev;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    status = sigar_file_system_list_get(sigar, &fslist);
 | 
			
		||||
 | 
			
		||||
    if (status != SIGAR_OK) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user