Commit c1b2007c authored by Ben Collins's avatar Ben Collins

IEEE1394(r1142): Use a kernel thread to rescan devices so we don't block the writer.

parent 6c816ad1
...@@ -358,13 +358,26 @@ static ssize_t fw_get_destroy_node(struct bus_type *bus, char *buf) ...@@ -358,13 +358,26 @@ static ssize_t fw_get_destroy_node(struct bus_type *bus, char *buf)
} }
static BUS_ATTR(destroy_node, S_IWUSR | S_IRUGO, fw_get_destroy_node, fw_set_destroy_node); static BUS_ATTR(destroy_node, S_IWUSR | S_IRUGO, fw_get_destroy_node, fw_set_destroy_node);
static int nodemgr_rescan_bus_thread(void *__unused)
{
/* No userlevel access needed */
daemonize("kfwrescan");
allow_signal(SIGTERM);
bus_rescan_devices(&ieee1394_bus_type);
return 0;
}
static ssize_t fw_set_rescan(struct bus_type *bus, const char *buf, size_t count) static ssize_t fw_set_rescan(struct bus_type *bus, const char *buf, size_t count)
{ {
int state = simple_strtoul(buf, NULL, 10); int state = simple_strtoul(buf, NULL, 10);
/* Don't wait for this, or care about errors. Root could do
* something stupid and spawn this a lot of times, but that's
* root's fault. */
if (state == 1) if (state == 1)
bus_rescan_devices(&ieee1394_bus_type); kernel_thread(nodemgr_rescan_bus_thread, NULL, CLONE_KERNEL);
return count; return count;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment