Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 May 2008 20:10:02 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        arch@freebsd.org
Subject:   Per-open file private data for the cdevs
Message-ID:  <20080504171002.GN18958@deviant.kiev.zoral.com.ua>

next in thread | raw e-mail | index | archive | help

--nWESmH2uLuaSkt2F
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Since the review for the clone-at-open patch (fdclone) posted some time ago
mostly says that it would be better to implement per-file private data
instead, I produced the patch along this line,

The patch does not change the cdevsw ABI, instead, three new functions
nt	devfs_get_cdevpriv(void **datap);
int	devfs_set_cdevpriv(void *priv, cdevpriv_dtr_t dtr);
void	devfs_clear_cdevpriv(void);
are provided for manipulation of the per-file private data.

devfs_set_cdevpriv assigns the priv as private data for the file descriptor
which is used to initiate currently performed driver operation. dtr
is the function that will be called when either the last refernce to
the file goes away or devfs_clear_cdevpriv is called.

devfs_get_cdevpriv is the obvious accessor.

devfs_clear_cdevpriv allows to clear the private data for the still
open file.

The synchronization of the cdev data and file private data is left
to the driver code, I did not found any generic helper mechanism that
could be useful there.

Patch:
http://people.freebsd.org/~kib/misc/fdpriv.1.patch

Dumb driver that shows the basic usage of the proposed KPI:
http://people.freebsd.org/~kib/misc/fpclone.c

Previous version of the patch was tested by Peter Holm.

--nWESmH2uLuaSkt2F
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (FreeBSD)

iEYEARECAAYFAkgd7eoACgkQC3+MBN1Mb4h7+gCglhkTt7vXzC9prLACEuuEAS2Z
yzMAoKq8kKbU7J91CuasevEeFscxffY8
=accO
-----END PGP SIGNATURE-----

--nWESmH2uLuaSkt2F--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080504171002.GN18958>