uvol: switch to /sys/class/ubi
authorDaniel Golle <redacted>
Wed, 15 Feb 2023 04:04:12 +0000 (04:04 +0000)
committerDaniel Golle <redacted>
Wed, 15 Feb 2023 04:06:36 +0000 (04:06 +0000)
Instead of /sys/devices/virtual/ubi which will no longer be available
in future kernels, switch to /sys/class/ubi.
While at it fix unrelated arithmetic syntax error by guarding the
affected expression to not run on an empty string.

Signed-off-by: Daniel Golle <redacted>
utils/uvol/Makefile
utils/uvol/files/ubi.uc
utils/uvol/files/uvol.defaults

index 256dbfbd1635a74ed2ba5b52f5e17f5b8bb85a04..1524fc16f5b537a1b990e02bbc80a21db7e46f1a 100644 (file)
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=uvol
 PKG_VERSION:=0.9
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
 PKG_LICENSE:=GPL-2.0-or-later
index 7d0872b1698aba3697e150ecf5c2c67e349ffcf4..8b46112c75383c332f2578e64ef2055432c19483 100644 (file)
@@ -29,7 +29,7 @@ function mkdtemp() {
 
 function ubi_get_dev(vol_name) {
        let wcstring = sprintf("uvol-[rw][owpd]-%s", vol_name);
-       for (vol_dir in fs.glob(sprintf("/sys/devices/virtual/ubi/%s/%s_*", ubidev, ubidev))) {
+       for (vol_dir in fs.glob(sprintf("/sys/class/ubi/%s_*", ubidev))) {
                let vol_ubiname = read_file(sprintf("%s/name", vol_dir));
                if (wildcard(vol_ubiname, wcstring))
                        return fs.basename(vol_dir);
@@ -38,7 +38,7 @@ function ubi_get_dev(vol_name) {
 }
 
 function vol_get_mode(vol_dev, mode) {
-       let vol_name = read_file(sprintf("/sys/devices/virtual/ubi/%s/%s/name", ubidev, vol_dev));
+       let vol_name = read_file(sprintf("/sys/class/ubi/%s/name", vol_dev));
        return substr(vol_name, 5, 2);
 }
 
@@ -57,19 +57,23 @@ function block_hotplug(action, devname) {
 function ubi_init(ctx) {
        cursor = ctx.cursor;
        fs = ctx.fs;
+       ubidev = null;
 
        let ubiver = read_file("/sys/class/ubi/version");
        if (ubiver != 1)
                return false;
 
-       let ubidevpath = null;
-       for (ubidevpath in fs.glob("/sys/devices/virtual/ubi/*"))
+       for (ubidevpath in fs.glob("/sys/class/ubi/*")) {
+               if (!fs.stat(sprintf("%s/eraseblock_size", ubidevpath)))
+                       continue;
+
+               ubidev = fs.basename(ubidevpath);
                break;
+       }
 
-       if (!ubidevpath)
+       if (!ubidev)
                return false;
 
-       ubidev = fs.basename(ubidevpath);
        ebsize = read_file(sprintf("%s/eraseblock_size", ubidevpath));
 
        uvol_uci_add = ctx.uci_add;
@@ -81,7 +85,7 @@ function ubi_init(ctx) {
 }
 
 function ubi_free() {
-       let availeb = read_file(sprintf("/sys/devices/virtual/ubi/%s/avail_eraseblocks", ubidev));
+       let availeb = read_file(sprintf("/sys/class/ubi/%s/avail_eraseblocks", ubidev));
        return sprintf("%d", availeb * ebsize);
 }
 
@@ -90,7 +94,7 @@ function ubi_align() {
 }
 
 function ubi_total() {
-       let totaleb = read_file(sprintf("/sys/devices/virtual/ubi/%s/total_eraseblocks", ubidev));
+       let totaleb = read_file(sprintf("/sys/class/ubi/%s/total_eraseblocks", ubidev));
        return sprintf("%d", totaleb * ebsize);
 }
 
@@ -114,7 +118,7 @@ function ubi_size(vol_name) {
        if (!vol_dev)
                return 2;
 
-       let vol_size = read_file(sprintf("/sys/devices/virtual/ubi/%s/%s/data_bytes", ubidev, vol_dev));
+       let vol_size = read_file(sprintf("/sys/class/ubi/%s/data_bytes", vol_dev));
        return sprintf("%d", vol_size);
 }
 
@@ -255,7 +259,7 @@ function ubi_down(vol_name) {
 
 function ubi_list(search_name) {
        let volumes = [];
-       for (vol_dir in fs.glob(sprintf("/sys/devices/virtual/ubi/%s/%s_*", ubidev, ubidev))) {
+       for (vol_dir in fs.glob(sprintf("/sys/class/ubi/%s_*", ubidev))) {
                let vol = {};
                let vol_ubiname = read_file(sprintf("%s/name", vol_dir));
                if (!wildcard(vol_ubiname, "uvol-[rw][wod]-*"))
@@ -277,7 +281,7 @@ function ubi_list(search_name) {
 
 function ubi_detect() {
        let tmpdev = [];
-       for (vol_dir in fs.glob(sprintf("/sys/devices/virtual/ubi/%s/%s_*", ubidev, ubidev))) {
+       for (vol_dir in fs.glob(sprintf("/sys/class/ubi/%s_*", ubidev))) {
                let vol_ubiname = read_file(sprintf("%s/name", vol_dir));
 
                if (!wildcard(vol_ubiname, "uvol-r[od]-*"))
@@ -297,7 +301,7 @@ function ubi_detect() {
 
        uvol_uci_init();
 
-       for (vol_dir in fs.glob(sprintf("/sys/devices/virtual/ubi/%s/%s_*", ubidev, ubidev))) {
+       for (vol_dir in fs.glob(sprintf("/sys/class/ubi/%s_*", ubidev))) {
                let vol_ubiname = read_file(sprintf("%s/name", vol_dir));
                if (!wildcard(vol_ubiname, "uvol-[rw][wod]-*"))
                        continue;
@@ -321,7 +325,7 @@ function ubi_detect() {
 }
 
 function ubi_boot() {
-       for (vol_dir in fs.glob(sprintf("/sys/devices/virtual/ubi/%s/%s_*", ubidev, ubidev))) {
+       for (vol_dir in fs.glob(sprintf("/sys/class/ubi/%s_*", ubidev))) {
                let vol_dev = fs.basename(vol_dir);
                let vol_ubiname = read_file(sprintf("%s/name", vol_dir));
 
index 43c971154ae782e6761b45065b7a6f6dd4b09027..927f8c115b78e7814762f04ba2c889743a83bfb8 100644 (file)
@@ -4,7 +4,9 @@ uvol_init() {
        local metasz freesz totalsz
        uvol detect
        metasz="$(uvol size .meta 2>/dev/null)"
-       [ "$((metasz))" -gt 0 ] && return
+       if [ "$metasz" ]; then
+               [ "$((metasz))" -gt 0 ] && return
+       fi
        totalsz="$(uvol total)"
        freesz="$(uvol free)"
        metasz="$((totalsz / 10240))"
git clone https://git.99rst.org/PROJECT