[OpenWrt-Devel] [PATCH fstools] block: cleanup handling "start" action of the "autofs" command

Rafał Miłecki zajec5 at gmail.com
Sun Dec 9 11:52:10 EST 2018

From: Rafał Miłecki <rafal at milecki.pl>

When blockd starts it uses "start" action for getting current state of
block devices. The way main_autofs() was implemented was a bit hacky

1) It was calling mount_device() with TYPE_HOTPLUG
   First of all that made code harder to understand. Faking TYPE_HOTPLUG
   for a TYPE_AUTOFS made following mount_device() logic more complex.
   Secondly the only reason for that seems to be to trigger "swap" and
   extroot checks in the mount_device(). Other than that it was only
   about calling blockd_notify() anyway.

2) It wasn't consistent
   Consider a "swap" or extroot without an "autofs" set (a pretty
   expected case).
   a) During original TYPE_HOTPLUG event mount_device() would detect
      both cases early and return without calling blockd_notify().
   b) With previous main_autofs() implementation blockd_notify() was
      called for both cases.

With this change main_autofs() doesn't fake TYPE_HOTPLUG and it follows
mount_device() logic which should result in an expected & consistent
state of devices in blockd.

Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
 block.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/block.c b/block.c
index 3d06185..091375f 100644
--- a/block.c
+++ b/block.c
@@ -1186,12 +1186,16 @@ static int main_autofs(int argc, char **argv)
 		list_for_each_entry(pr, &devices, list) {
-			struct mount *m = find_block(pr->uuid, pr->label, NULL, NULL);
+			struct mount *m;
-			if (m && m->autofs)
-				mount_device(pr, TYPE_HOTPLUG);
-			else
-				blockd_notify(pr->dev, m, pr);
+			if (!strcmp(pr->type, "swap"))
+				continue;
+			m = find_block(pr->uuid, pr->label, NULL, NULL);
+			if (m && m->extroot)
+				continue;
+			blockd_notify(pr->dev, m, pr);
 		return 0;

openwrt-devel mailing list
openwrt-devel at lists.openwrt.org

More information about the openwrt-devel mailing list