Date: Wed, 31 Oct 2007 17:06:20 +0200 From: Kostik Belousov <kostikbel@gmail.com> To: freebsd-arch@freebsd.org Subject: fdclone KPI Message-ID: <20071031150620.GT37471@deviant.kiev.zoral.com.ua>
next in thread | raw e-mail | index | archive | help
--dLXnlYbDJNCwF3YM Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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 ! --dLXnlYbDJNCwF3YM Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4 (FreeBSD) iD8DBQFHKJnrC3+MBN1Mb4gRAt8PAJ0W4QLnP644wDgrWJ4XLqYg9iPyxgCdFbo3 EtzhD11yGt+MgtJWLOzQarE= =nACF -----END PGP SIGNATURE----- --dLXnlYbDJNCwF3YM--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071031150620.GT37471>