From: Florian Eckert Date: Thu, 11 Mar 2021 16:53:16 +0000 (+0100) Subject: ubi: perpartion for percentage evaluation of the bad blocks X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4e3332fc5198504483c0eac2b83b6cc48feb01a;p=thirdparty%2Fcollectd.git ubi: perpartion for percentage evaluation of the bad blocks This change prepares the ubi plugin to add the bad block evaluation in percent. Signed-off-by: Florian Eckert --- diff --git a/src/ubi.c b/src/ubi.c index 0485db872..0474aa68e 100644 --- a/src/ubi.c +++ b/src/ubi.c @@ -84,9 +84,9 @@ static void ubi_submit(const char *dev_name, const char *type, gauge_t value) { plugin_dispatch_values(&vl); } /* void ubi_submit */ -static int ubi_read_dev_attr(const char *dev_name, const char *attr) { +static int ubi_read_dev_attr(const char *dev_name, const char *attr, + int *value) { FILE *f; - int val; char str[sizeof(SYS_PATH) + strlen(dev_name) + sizeof("/") + strlen(attr) + 1]; int n; @@ -98,7 +98,7 @@ static int ubi_read_dev_attr(const char *dev_name, const char *attr) { return -1; } - n = fscanf(f, "%d", &val); + n = fscanf(f, "%d", value); fclose(f); if (n != 1) { @@ -106,17 +106,39 @@ static int ubi_read_dev_attr(const char *dev_name, const char *attr) { return -1; } - ubi_submit(dev_name, attr, (gauge_t)val); - return 0; } /* int ubi_read_dev_attr */ static inline int ubi_read_dev_bad_count(const char *dev_name) { - return ubi_read_dev_attr(dev_name, DEV_BAD_COUNT); + int ret; + int value; + + ret = ubi_read_dev_attr(dev_name, DEV_BAD_COUNT, &value); + + if (ret != 0) { + ERROR(PLUGIN_NAME " : Unable to read bad_peb_count"); + return -1; + } + + ubi_submit(dev_name, DEV_BAD_COUNT, (gauge_t)value); + + return 0; } /* int ubi_read_dev_bad_count */ static inline int ubi_read_max_ec(const char *dev_name) { - return ubi_read_dev_attr(dev_name, MAXIMUM_ERASE); + int ret; + int value; + + ret = ubi_read_dev_attr(dev_name, MAXIMUM_ERASE, &value); + + if (ret != 0) { + ERROR(PLUGIN_NAME " : Unable to read max_ec"); + return -1; + } + + ubi_submit(dev_name, MAXIMUM_ERASE, (gauge_t)value); + + return 0; } /* int ubi_read_max_ec */ static int ubi_read(void) {