Message ID | 20211210223440.3946603-11-vishal.l.verma@intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 53dbca1ecdbbe12e3a063dd2db5cbfd65fa0f6ef |
Headers | show |
Series | Policy based reconfiguration for daxctl | expand |
On Fri, Dec 10, 2021 at 2:34 PM Vishal Verma <vishal.l.verma@intel.com> wrote: > > Install a systemd service that calls "daxctl-reconfigure-device > --check-config" with a daxctl device passed in to it via the > environment. > > Install a udev rule that is triggered for every daxctl device, and > triggers the above oneshot systemd service. > > On boot, whenever a daxctl device is found, udev triggers a > device-specific systemd service called, for example: > > daxdev-reconfigure@-dev-dax0.0.service > > This initiates a daxctl-reconfigure-device with a config lookup for the > 'dax0.0' device. If the config has a '[reconfigure-device <unique_id>]' > section, it uses the information in that to set the operating mode of > the device. > > If any device is in an unexpected status, 'journalctl' can be used to > view the reconfiguration log for that device, for example: > > journalctl --unit daxdev-reconfigure@-dev-dax0.0.service > > Update the RPM spec file to include the newly added files to the RPM > build. > > Cc: QI Fuli <qi.fuli@fujitsu.com> > Cc: Dan Williams <dan.j.williams@intel.com> > Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> LGTM. I don't know if udev rule numbering is correct, or not, but I suspect the distros will tell us or fix it up in the distro package. Reviewed-by: Dan Williams <dan.j.williams@intel.com>
diff --git a/configure.ac b/configure.ac index 39ad0d4..33cff60 100644 --- a/configure.ac +++ b/configure.ac @@ -160,7 +160,7 @@ AC_CHECK_FUNCS([ \ AC_ARG_WITH([systemd], AS_HELP_STRING([--with-systemd], - [Enable systemd functionality (monitor). @<:@default=yes@:>@]), + [Enable systemd functionality. @<:@default=yes@:>@]), [], [with_systemd=yes]) if test "x$with_systemd" = "xyes"; then @@ -186,6 +186,13 @@ daxctl_modprobe_data=daxctl.conf AC_SUBST([daxctl_modprobe_datadir]) AC_SUBST([daxctl_modprobe_data]) +AC_ARG_WITH(udevrulesdir, + [AS_HELP_STRING([--with-udevrulesdir=DIR], [udev rules.d directory])], + [UDEVRULESDIR="$withval"], + [UDEVRULESDIR='${prefix}/lib/udev/rules.d'] +) +AC_SUBST(UDEVRULESDIR) + AC_ARG_WITH([keyutils], AS_HELP_STRING([--with-keyutils], [Enable keyutils functionality (security). @<:@default=yes@:>@]), [], [with_keyutils=yes]) diff --git a/daxctl/90-daxctl-device.rules b/daxctl/90-daxctl-device.rules new file mode 100644 index 0000000..ee0670f --- /dev/null +++ b/daxctl/90-daxctl-device.rules @@ -0,0 +1 @@ +ACTION=="add", SUBSYSTEM=="dax", TAG+="systemd", ENV{SYSTEMD_WANTS}="daxdev-reconfigure@$env{DEVNAME}.service" diff --git a/daxctl/Makefile.am b/daxctl/Makefile.am index 5cebb6c..36dfc55 100644 --- a/daxctl/Makefile.am +++ b/daxctl/Makefile.am @@ -28,3 +28,10 @@ daxctl_LDADD =\ $(KMOD_LIBS) \ $(JSON_LIBS) \ -liniparser + +udevrulesdir = $(UDEVRULESDIR) +udevrules_DATA = 90-daxctl-device.rules + +if ENABLE_SYSTEMD_UNITS +systemd_unit_DATA = daxdev-reconfigure@.service +endif diff --git a/daxctl/daxdev-reconfigure@.service b/daxctl/daxdev-reconfigure@.service new file mode 100644 index 0000000..13d570c --- /dev/null +++ b/daxctl/daxdev-reconfigure@.service @@ -0,0 +1,8 @@ +[Unit] +Description=Automatic daxctl device reconfiguration +Documentation=man:daxctl-reconfigure-device(1) + +[Service] +Type=forking +GuessMainPID=false +ExecStart=/bin/sh -c "exec daxctl reconfigure-device --check-config %I" diff --git a/ndctl.spec.in b/ndctl.spec.in index b46bd74..642670a 100644 --- a/ndctl.spec.in +++ b/ndctl.spec.in @@ -26,6 +26,7 @@ BuildRequires: pkgconfig(json-c) BuildRequires: pkgconfig(bash-completion) BuildRequires: pkgconfig(systemd) BuildRequires: keyutils-libs-devel +BuildRequires: systemd-rpm-macros %description Utility library for managing the "libnvdimm" subsystem. The "libnvdimm" @@ -126,6 +127,8 @@ make check %{_bindir}/daxctl %{_mandir}/man1/daxctl* %{_datadir}/daxctl/daxctl.conf +%{_unitdir}/daxdev-reconfigure@.service +%config %{_udevrulesdir}/90-daxctl-device.rules %files -n LNAME %defattr(-,root,root)
Install a systemd service that calls "daxctl-reconfigure-device --check-config" with a daxctl device passed in to it via the environment. Install a udev rule that is triggered for every daxctl device, and triggers the above oneshot systemd service. On boot, whenever a daxctl device is found, udev triggers a device-specific systemd service called, for example: daxdev-reconfigure@-dev-dax0.0.service This initiates a daxctl-reconfigure-device with a config lookup for the 'dax0.0' device. If the config has a '[reconfigure-device <unique_id>]' section, it uses the information in that to set the operating mode of the device. If any device is in an unexpected status, 'journalctl' can be used to view the reconfiguration log for that device, for example: journalctl --unit daxdev-reconfigure@-dev-dax0.0.service Update the RPM spec file to include the newly added files to the RPM build. Cc: QI Fuli <qi.fuli@fujitsu.com> Cc: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Vishal Verma <vishal.l.verma@intel.com> --- configure.ac | 9 ++++++++- daxctl/90-daxctl-device.rules | 1 + daxctl/Makefile.am | 7 +++++++ daxctl/daxdev-reconfigure@.service | 8 ++++++++ ndctl.spec.in | 3 +++ 5 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 daxctl/90-daxctl-device.rules create mode 100644 daxctl/daxdev-reconfigure@.service