@@ -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])
new file mode 100644
@@ -0,0 +1 @@
+ACTION=="add", SUBSYSTEM=="dax", TAG+="systemd", ENV{SYSTEMD_WANTS}="daxdev-reconfigure@$env{DEVNAME}.service"
@@ -28,3 +28,10 @@ daxctl_LDADD =\
$(UUID_LIBS) \
$(KMOD_LIBS) \
$(JSON_LIBS)
+
+udevrulesdir = $(UDEVRULESDIR)
+udevrules_DATA = 90-daxctl-device.rules
+
+if ENABLE_SYSTEMD_UNITS
+systemd_unit_DATA = daxdev-reconfigure@.service
+endif
new file mode 100644
@@ -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"
@@ -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