The current code does not follow symbolic links when iterating over /sys entries
for block devices when run with -s flag. As a result, mdev rules are never
executed, for example, for USB flash drive partitions.

On i.MX6 board with 4.9.11 kernel:

/sys/block/sda -> /sys/devices/soc0/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1/1-1/1-1.2/1-1.2:1.0/host0/target0:0:0/0:0:0:0/block/sda /sys/block/sda/sda1 -> /sys/devices/soc0/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1/1-1/1-1.2/1-1.2:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda1

As a workaround, USB flash drive has to be reinserted so that mdev rules are
executed in response to kernel hotplug events. The issue can be fixed by
adding a flag to follow symbolic links so that partition entries could be
processed as well.

---
 toys/pending/mdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/toys/pending/mdev.c b/toys/pending/mdev.c
index 0493f1a..b80efea 100644
--- a/toys/pending/mdev.c
+++ b/toys/pending/mdev.c
@@ -280,7 +280,7 @@ static int callback(struct dirtree *node)
   // Circa 2.6.25 the entries more than 2 deep are all either redundant
   // (mouse#, event#) or unnamed (every usb_* entry is called "device").

-  return (node->parent && node->parent->parent) ? 0 : DIRTREE_RECURSE;
+  return (node->parent && node->parent->parent) ? 0 : (DIRTREE_RECURSE | DIRTREE_SYMFOLLOW);
 }

 void mdev_main(void)
--
2.7.4

_______________________________________________
Toybox mailing list
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to