summaryrefslogtreecommitdiffstats
path: root/sys-utils/zramctl.c
diff options
context:
space:
mode:
authorKarel Zak2018-05-16 14:08:11 +0200
committerKarel Zak2018-06-21 13:07:46 +0200
commita6f0da166e58ba279094b483eedf5126a6850029 (patch)
tree0bce5ca49ca6e3629e7b65a395082581c4fe0883 /sys-utils/zramctl.c
parentlib/sysfs: fix ul_path_read_string() usage (diff)
downloadkernel-qcow2-util-linux-a6f0da166e58ba279094b483eedf5126a6850029.tar.gz
kernel-qcow2-util-linux-a6f0da166e58ba279094b483eedf5126a6850029.tar.xz
kernel-qcow2-util-linux-a6f0da166e58ba279094b483eedf5126a6850029.zip
zramctl: use new ul_path_* API
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/zramctl.c')
-rw-r--r--sys-utils/zramctl.c95
1 files changed, 54 insertions, 41 deletions
diff --git a/sys-utils/zramctl.c b/sys-utils/zramctl.c
index 642d88d41..69267c860 100644
--- a/sys-utils/zramctl.c
+++ b/sys-utils/zramctl.c
@@ -111,7 +111,7 @@ static const char *mm_stat_names[] = {
struct zram {
char devname[32];
- struct sysfs_cxt sysfs;
+ struct path_cxt *sysfs; /* device specific sysfs directory */
char **mm_stat;
unsigned int mm_stat_probed : 1,
@@ -120,6 +120,7 @@ struct zram {
};
static unsigned int raw, no_headings, inbytes;
+static struct path_cxt *__control;
static int get_column_id(int num)
{
@@ -168,7 +169,8 @@ static void zram_set_devname(struct zram *z, const char *devname, size_t n)
}
DBG(fprintf(stderr, "set devname: %s", z->devname));
- sysfs_deinit(&z->sysfs);
+ ul_unref_path(z->sysfs);
+ z->sysfs = NULL;
zram_reset_stat(z);
}
@@ -198,30 +200,28 @@ static void free_zram(struct zram *z)
if (!z)
return;
DBG(fprintf(stderr, "free: %p", z));
- sysfs_deinit(&z->sysfs);
+ ul_unref_path(z->sysfs);
zram_reset_stat(z);
free(z);
}
-static struct sysfs_cxt *zram_get_sysfs(struct zram *z)
+static struct path_cxt *zram_get_sysfs(struct zram *z)
{
assert(z);
- if (!z->sysfs.devno) {
- dev_t devno = sysfs_devname_to_devno(z->devname, NULL);
+ if (!z->sysfs) {
+ dev_t devno = sysfs_devname_to_devno(z->devname);
if (!devno)
return NULL;
- if (sysfs_init(&z->sysfs, devno, NULL))
+ z->sysfs = ul_new_sysfs_path(devno, NULL, NULL);
+ if (!z->sysfs)
return NULL;
- if (*z->devname != '/') {
+ if (*z->devname != '/')
/* canonicalize the device name according to /sys */
- char name[sizeof(z->devname) - sizeof(_PATH_DEV)];
- if (sysfs_get_devname(&z->sysfs, name, sizeof(name)))
- snprintf(z->devname, sizeof(z->devname), _PATH_DEV "%s", name);
- }
+ sysfs_blkdev_get_path(z->sysfs, z->devname, sizeof(z->devname));
}
- return &z->sysfs;
+ return z->sysfs;
}
static inline int zram_exist(struct zram *z)
@@ -240,30 +240,30 @@ static inline int zram_exist(struct zram *z)
static int zram_set_u64parm(struct zram *z, const char *attr, uint64_t num)
{
- struct sysfs_cxt *sysfs = zram_get_sysfs(z);
+ struct path_cxt *sysfs = zram_get_sysfs(z);
if (!sysfs)
return -EINVAL;
DBG(fprintf(stderr, "%s writing %ju to %s", z->devname, num, attr));
- return sysfs_write_u64(sysfs, attr, num);
+ return ul_path_write_u64(sysfs, num, attr);
}
static int zram_set_strparm(struct zram *z, const char *attr, const char *str)
{
- struct sysfs_cxt *sysfs = zram_get_sysfs(z);
+ struct path_cxt *sysfs = zram_get_sysfs(z);
if (!sysfs)
return -EINVAL;
DBG(fprintf(stderr, "%s writing %s to %s", z->devname, str, attr));
- return sysfs_write_string(sysfs, attr, str);
+ return ul_path_write_string(sysfs, str, attr);
}
static int zram_used(struct zram *z)
{
uint64_t size;
- struct sysfs_cxt *sysfs = zram_get_sysfs(z);
+ struct path_cxt *sysfs = zram_get_sysfs(z);
if (sysfs &&
- sysfs_read_u64(sysfs, "disksize", &size) == 0 &&
+ ul_path_read_u64(sysfs, &size, "disksize") == 0 &&
size > 0) {
DBG(fprintf(stderr, "%s used", z->devname));
@@ -284,15 +284,22 @@ static int zram_has_control(struct zram *z)
return z->has_control;
}
+static struct path_cxt *zram_get_control(void)
+{
+ if (!__control)
+ __control = ul_new_path(_PATH_SYS_CLASS "/zram-control");
+ return __control;
+}
+
static int zram_control_add(struct zram *z)
{
int n;
+ struct path_cxt *ctl;
- if (!zram_has_control(z))
+ if (!zram_has_control(z) || !(ctl = zram_get_control()))
return -ENOSYS;
- n = path_read_s32(_PATH_SYS_CLASS "/zram-control/hot_add");
- if (n < 0)
+ if (ul_path_read_s32(ctl, &n, "hot_add") != 0 || n < 0)
return n;
DBG(fprintf(stderr, "hot-add: %d", n));
@@ -302,10 +309,10 @@ static int zram_control_add(struct zram *z)
static int zram_control_remove(struct zram *z)
{
- char str[sizeof stringify_value(INT_MAX)];
+ struct path_cxt *ctl;
int n;
- if (!zram_has_control(z))
+ if (!zram_has_control(z) || !(ctl = zram_get_control()))
return -ENOSYS;
n = zram_get_devnum(z);
@@ -313,8 +320,7 @@ static int zram_control_remove(struct zram *z)
return n;
DBG(fprintf(stderr, "hot-remove: %d", n));
- snprintf(str, sizeof(str), "%d", n);
- return path_write_str(str, _PATH_SYS_CLASS "/zram-control/hot_remove");
+ return ul_path_write_u64(ctl, n, "hot_remove");
}
static struct zram *find_free_zram(void)
@@ -339,8 +345,9 @@ static struct zram *find_free_zram(void)
static char *get_mm_stat(struct zram *z, size_t idx, int bytes)
{
- struct sysfs_cxt *sysfs;
+ struct path_cxt *sysfs;
const char *name;
+ char *str = NULL;
uint64_t num;
assert(idx < ARRAY_SIZE(mm_stat_names));
@@ -352,10 +359,7 @@ static char *get_mm_stat(struct zram *z, size_t idx, int bytes)
/* Linux >= 4.1 uses /sys/block/zram<id>/mm_stat */
if (!z->mm_stat && !z->mm_stat_probed) {
- char *str;
-
- str = sysfs_strdup(sysfs, "mm_stat");
- if (str) {
+ if (ul_path_read_string(sysfs, &str, "mm_stat") > 0 && str) {
z->mm_stat = strv_split(str, " ");
/* make sure kernel provides mm_stat as expected */
@@ -366,7 +370,7 @@ static char *get_mm_stat(struct zram *z, size_t idx, int bytes)
}
z->mm_stat_probed = 1;
free(str);
-
+ str = NULL;
}
if (z->mm_stat) {
@@ -379,17 +383,20 @@ static char *get_mm_stat(struct zram *z, size_t idx, int bytes)
/* Linux < 4.1 uses /sys/block/zram<id>/<attrname> */
name = mm_stat_names[idx];
- if (bytes)
- return sysfs_strdup(sysfs, name);
- else if (sysfs_read_u64(sysfs, name, &num) == 0)
+ if (bytes) {
+ ul_path_read_string(sysfs, &str, name);
+ return str;
+
+ } else if (ul_path_read_u64(sysfs, &num, name) == 0)
return size_to_human_string(SIZE_SUFFIX_1LETTER, num);
+
return NULL;
}
static void fill_table_row(struct libscols_table *tb, struct zram *z)
{
static struct libscols_line *ln;
- struct sysfs_cxt *sysfs;
+ struct path_cxt *sysfs;
size_t i;
uint64_t num;
@@ -415,15 +422,17 @@ static void fill_table_row(struct libscols_table *tb, struct zram *z)
break;
case COL_DISKSIZE:
if (inbytes)
- str = sysfs_strdup(sysfs, "disksize");
- else if (sysfs_read_u64(sysfs, "disksize", &num) == 0)
+ ul_path_read_string(sysfs, &str, "disksize");
+
+ else if (ul_path_read_u64(sysfs, &num, "disksize") == 0)
str = size_to_human_string(SIZE_SUFFIX_1LETTER, num);
break;
case COL_ALGORITHM:
{
- char *alg = sysfs_strdup(sysfs, "comp_algorithm");
+ char *alg = NULL;
- if (alg != NULL) {
+ ul_path_read_string(sysfs, &alg, "comp_algorithm");
+ if (alg) {
char* lbr = strrchr(alg, '[');
char* rbr = strrchr(alg, ']');
@@ -444,7 +453,7 @@ static void fill_table_row(struct libscols_table *tb, struct zram *z)
break;
}
case COL_STREAMS:
- str = sysfs_strdup(sysfs, "max_comp_streams");
+ ul_path_read_string(sysfs, &str, "max_comp_streams");
break;
case COL_ZEROPAGES:
str = get_mm_stat(z, MM_ZERO_PAGES, 1);
@@ -673,6 +682,9 @@ int main(int argc, char **argv)
errx(EXIT_FAILURE, _("options --algorithm and --streams "
"must be combined with --size"));
+ ul_path_init_debug();
+ ul_sysfs_init_debug();
+
switch (act) {
case A_STATUS:
if (!ncolumns) { /* default columns */
@@ -748,5 +760,6 @@ int main(int argc, char **argv)
break;
}
+ ul_unref_path(__control);
return rc ? EXIT_FAILURE : EXIT_SUCCESS;
}