#include #include static u64 get_sysfs_value(const char* dirname, const char* filename) { char pathname[PATH_MAX]; int fd; char buf[80]; sprintf(pathname, "%s/%s", dirname, filename); fd = open(pathname, O_RDONLY); if (fd < 0) { error("Cannot open device\n"); } if (read(fd, buf, sizeof(buf)) < 1) { error("Cannot read device\n"); } close(fd); return (u64)strtoul(buf, NULL, 10); } int cbd_info(const char* dev, struct cbd_info* info) { char dirname[PATH_MAX]; sprintf(dirname, "/sys/fs/compress/%s", dev); info->lbatpblk_r = get_sysfs_value(dirname, "lbatpblk_r"); info->lbatpblk_w = get_sysfs_value(dirname, "lbatpblk_w"); info->lbd_r = get_sysfs_value(dirname, "lbd_r"); info->lbd_w = get_sysfs_value(dirname, "lbd_w"); info->lblk_size = get_sysfs_value(dirname, "lblk_size"); info->lblk_total = get_sysfs_value(dirname, "lblk_total"); info->lblk_used = get_sysfs_value(dirname, "lblk_used"); info->pbat_r = get_sysfs_value(dirname, "pbat_r"); info->pbat_w = get_sysfs_value(dirname, "pbat_w"); info->pblk_total = get_sysfs_value(dirname, "pblk_total"); info->pblk_used = get_sysfs_value(dirname, "pblk_used"); info->zone_init = get_sysfs_value(dirname, "zone_init"); info->zone_total = get_sysfs_value(dirname, "zone_total"); return 0; }