|
|
- --- a/src/ubi.c
- +++ b/src/ubi.c
- @@ -35,6 +35,9 @@
- #define DEV_BAD_COUNT \
- "bad_peb_count" // Count of bad physical eraseblocks on the underlying MTD
- // device.
- +// Value reserved for bad block
- +#define DEV_RESERVED_BAD_BLOCK "reserved_for_bad"
- +
- #define MAXIMUM_ERASE "max_ec" // Current maximum erase counter value
-
- /*
- @@ -140,6 +143,35 @@ static inline int ubi_read_max_ec(const
- return 0;
- } /* int ubi_read_max_ec */
-
- +static inline int ubi_read_percent(const char *dev_name) {
- + int ret;
- + int bcount;
- + int bblock;
- +
- + ret = ubi_read_dev_attr(dev_name, DEV_BAD_COUNT, &bcount);
- +
- + if (ret != 0) {
- + ERROR(PLUGIN_NAME " : Unable to read bad_peb_count");
- + return -1;
- + }
- +
- + ret = ubi_read_dev_attr(dev_name, DEV_RESERVED_BAD_BLOCK, &bblock);
- +
- + if (ret != 0) {
- + ERROR(PLUGIN_NAME " : Unable to read reserved_for_bad");
- + return -1;
- + }
- +
- + if (bblock == 0) {
- + ERROR(PLUGIN_NAME " : Percentage value cannot be determined (reserved_for_bad = 0)");
- + return -2;
- + }
- +
- + ubi_submit(dev_name, "percent", (gauge_t)((float_t)bcount / (float_t)bblock * 100.0));
- +
- + return 0;
- +} /* int ubi_read_percent */
- +
- static int ubi_read(void) {
- DIR *dir;
- struct dirent *dirent;
- @@ -155,6 +187,7 @@ static int ubi_read(void) {
-
- ubi_read_dev_bad_count(dirent->d_name);
- ubi_read_max_ec(dirent->d_name);
- + ubi_read_percent(dirent->d_name);
- }
-
- closedir(dir);
|