devfs - sync devfs after cloning a device
authorAlex Hornung <alex@alexhornung.com>
Fri, 14 Mar 2014 19:27:19 +0000 (19:27 +0000)
committerAlex Hornung <alex@alexhornung.com>
Sat, 15 Mar 2014 07:50:25 +0000 (07:50 +0000)
 * Use case are devices such as tty_pty which create a ptm/foo node as
   the cloned one, but also create a slave node (in pts/foo).

 * Without this, it's possible that ptm/foo is created before pts/foo
   is, and the program may race and not see pts/foo yet.

sys/vfs/devfs/devfs_vnops.c

index e244657..2430be7 100644 (file)
@@ -900,6 +900,14 @@ devfs_spec_open(struct vop_open_args *ap)
                        }
                }
                lockmgr(&devfs_lock, LK_RELEASE);
+               /*
+                * Synchronize devfs here to make sure that, if the cloned device
+                * creates other device nodes in addition to the cloned one,
+                * all of them are created by the time we return from opening
+                * the cloned one.
+                */
+               if (ndev)
+                       devfs_config();
        }
 
        devfs_debug(DEVFS_DEBUG_DEBUG,