fdclone KPI

Kostik Belousov kostikbel at gmail.com
Wed Oct 31 14:02:52 PDT 2007


Dear arch@ readers,
with the important help from Peter Holm I have implemented the KPI that
provides the ability for the driver to implement cloning on the open(2).
This is another (IMHO, more UNIXy) way to provide per-fd private data
for the driver. It seems that at least /dev/apm, /dev/drm and /dev/sg
could immediately benefit from the fdclone() KPI.

The patch is at
http://people.freebsd.org/~kib/misc/fdclone.9.patch
Sample dumb driver that uses the KPI is at
http://people.freebsd.org/~kib/fclone

The driver that uses the fdclone() shall provide cdevsw for master device,
and cdevsw for clones. Master shall have d_fdopen() method that could call
int fdclone(struct cdevsw *_csw, struct file *_fp, int _fmode,
    struct cdev **_clone, void *si_drv1, struct thread *td);
to replace the reference in the _fp with newly created cdev.

After successfull fdclone() call, all further calls on the _fp
are dispatched to the clone _csw instead of master one. si_drv1 of the
new cdev is set to respective argument, allowing the clone to find the
master.

The cloned cdev is not accessible for lookup through the devfs, and is
destroyed automatically on the final close of the last filedescriptor that
references the vnode.

Please, review. Your feedback is welcome !
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20071031/d3763cb5/attachment.pgp


More information about the freebsd-arch mailing list