]> sourceware.org Git - lvm2.git/commitdiff
monitoring: sync /dev content before contacting dmeventd for monitor/unmonitor
authorPeter Rajnoha <prajnoha@redhat.com>
Thu, 24 Mar 2016 10:13:21 +0000 (11:13 +0100)
committerPeter Rajnoha <prajnoha@redhat.com>
Thu, 24 Mar 2016 11:40:19 +0000 (12:40 +0100)
dmeventd daemon may call further code itself that looks at /dev, e.g.
via dmeventd_lvm2_command call. We need to have a consistent view of
the /dev content at that time. Therefore, sync /dev content before
calling monitoring hook which contacts dmeventd.

This problem was quite hidden before, but now it has manifested itself
because of recent additions to dev-cache code where we started looking
at device holders as seen in sysfs. What happened here was that the
device was already in sysfs, but not yet under /dev and this triggered
the new error message sometimes:

  log_error("%s: failed to find associated device structure for holder %s.", devname, devpath);

This problem has manifested recently in our api/pytest.sh test from
testsuite where we create thin pool LVs and thin LVs and hence it also
causes dmeventd to be used as well and these error messages were
visible there.

lib/activate/activate.c

index 2eb24d49bd595943f13617e7e1a860b4db0466ae..7dce0da769237c96f8a84c913c180a0d01097d82 100644 (file)
@@ -1746,6 +1746,12 @@ int monitor_dev_for_events(struct cmd_context *cmd, const struct logical_volume
                if (test_mode())
                        continue;
 
+               /*
+                * Sync all queued device names/symlinks so dmeventd
+                * has consistent view during possible device scan.
+                */
+               fs_unlock();
+
                /* FIXME specify events */
                if (!monitor_fn(seg, 0)) {
                        log_error("%s: %s segment monitoring function failed.",
This page took 0.095778 seconds and 5 git commands to generate.