On 13.03.2015 12:29, Michael Conrad wrote:
On 3/13/2015 3:25 AM, Harald Becker wrote:
1 - kernel-spawned hotplug helpers is the traditional way,
2 - netlink socket daemon is the "right way to solve the forkbomb
problem"
ACK, but #2 blocks usage for those who like / need to stay at #1 / #0
In that case, I would offer this idea:
All you do, is throwing in complex code sharing and the need to chose
a mechanism ahead at build time, to allow for switching to some newer
stuff ... but what about pre-generated binary versions, which
mechanism shall be used in the default options, which mechanism shall
be offered?
Please review it again. My solution solves both #1 and #2 in the same
binary, with no code duplication.
At first complex code reusage, and then: How will you do it without
suffering from hotplug handler problem as current mdev? I'm don't
seeing, that you try to handle this problem. My solution is to enable
kernel hotplug handler mechanism to also benefit and avoid that parallel
parsing for each event.
... beside that, this close / open_netlink look suspicious, looks like
possible race condition.
What es wrong with splitting a complex job into different threads? The
splitting alone, with inserting the named pipe (a long proven IPC), is
enough to let even kernel hotplug mechanism based system, to gain speed
improvement (and expected less memory usage on system startup). On
modern multi core machines this will also allow the split operations to
run on different CPU cores, with no extra cost. Synchronized operation.
Where your Solution still hold the possibility of race conditions from
possible parallelism.
I suggested wrapping #2 in a ifdef for the people who don't have netlink
at all, such as on BSD, and also anyone who doesn't want the extra bytes.
Therefor is my approach to allow for opt out in the config, but brings
me otherwise to the idea to throw a compiler error, when netlink is
build on system where not available, or optionally a warning and auto
disable netlink support (usually a 4 liner snipped at the code start).
#if CONFIG_FEATURE_MDEV_NETLINK && NETLINK_NOT_AVAILABLE
#define CONFIG_FEATURE_MDEV_NETLINK 0
#warn "This system lacks netlink support, netlink disabled"
#endif
... or something similar.
--
Harald
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox