---
name: "dev_clone"
section: "9"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/dev_clone"
---

# dev\_clone(9)

eventhandler for name-based device cloning in devfs

## NAME

**dev\_clone**, **drain\_dev\_clone\_events** – eventhandler for name-based device cloning in devfs

## SYNOPSIS

**#include \<sys/param.h\>**

**#include \<sys/conf.h\>**

*void*\

**clone\_handler**(*void \*arg*, *struct ucred \*cr*, *char \*name*, *int namelen*, *struct cdev \*\*dev*);

```
EVENTHANDLER_REGISTER(dev_clone, clone_handler, arg, priority);
```

*void*\

**drain\_dev\_clone\_events**();

## DESCRIPTION

A device driver may register a listener that will be notified each time a name lookup on the [devfs(4)](/devfs/4.md) mount point fails to find the vnode. A listener shall be registered for the *dev\_clone* event. When called, it is supplied with the first argument *arg* that was specified at handler registration time, appropriate credentials *cr*, and a name *name* of length *namelen* that we look for. If the handler decides that the name is appropriate and wants to create the device that will be associated with the name, it should return it to devfs in the *dev* argument.

The **drain\_dev\_clone\_events**() function is a barrier. It is guaranteed that all calls to eventhandlers for **dev\_clone** that were started before **drain\_dev\_clone\_events**() call, are finished before it returns control.

## SEE ALSO

[devfs(4)](/devfs/4.md), [namei(9)](/namei/9.md)
