Hi, On Fri, 2023-01-13 at 17:43 -0500, Alexander Aring wrote: > When I did test with dlm_locktorture module I got several log > messages > about: > > uevent message has 3 args: add@/module/dlm_locktorture > uevent message has 3 args: remove@/module/dlm_locktorture > > which are not expected and not able to parse by dlm_controld > process_uevent() function, because mismatch of argument counts. > Debugging it more, I figured out that those uevents are for > loading/unloading the dlm_locktorture module and there are uevents > for > loading and unloading modules which have nothing todo with dlm > lockspace > uevent handling. > > The current filter works as: > > if (!strstr(buf, "dlm")) > I think that is the problem. If you want to filter out all events except those sent by the DLM module, then you need to look at the variables sent along with the request. Otherwise whatever string you look for here might appear in some other random request from a different subsystem. The event variables are much easier to parse than the actual event string...
See a similar example in decode_uevent(), etc here: https://github.com/andyprice/gfs2-utils/blob/91c3e9a69ed70d3d522f5b47015da5e5868722ec/group/gfs_controld/main.c There are probably nicer ways of doing that, than what I did there, but it makes it is easier to get at the variables that are passed with the notification, than to try and parse the first line of the response, Steve. > for matching the dlm joining/leaving uevent string which looks like: > > offline@/kernel/dlm/locktorture > > to avoid matching with other uevent which has somehow the string > "dlm" > in it, we switch to the match "/dlm/" which should match only to dlm > uevent system events. Uevent uses itself '/' as a separator in the > hope > that uevents cannot put a '/' as application data for an event. > --- > dlm_controld/main.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/dlm_controld/main.c b/dlm_controld/main.c > index 7cf6348e..40689c5c 100644 > --- a/dlm_controld/main.c > +++ b/dlm_controld/main.c > @@ -704,7 +704,7 @@ static void process_uevent(int ci) > return; > } > > - if (!strstr(buf, "dlm")) > + if (!strstr(buf, "/dlm/")) > return; > > log_debug("uevent: %s", buf);
