Per-open file private data for the cdevs

Kostik Belousov kostikbel at gmail.com
Mon May 12 10:16:18 UTC 2008


On Sun, May 11, 2008 at 03:40:14PM -1000, Jeff Roberson wrote:
> 
> On Sun, 11 May 2008, Kostik Belousov wrote:
> 
> >On Sun, May 11, 2008 at 02:50:30PM +0300, Kostik Belousov wrote:
> >>On Sat, May 10, 2008 at 09:53:12PM -1000, Jeff Roberson wrote:
> >>>On Sun, 4 May 2008, Kostik Belousov wrote:
> >>>
> >>>>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.
> >>>>
> >>>
> >>>Hi Kostik,
> >>>
> >>>Are these per-instances structures intended to be used by anything other
> >>>than devices?  If not can we make them a union with the DTYPE_VNODE
> >>>fields to save space?
> >>>
> >>>Thanks,
> >>>Jeff
> >>
> >>The current version of the patch is at
> >>http://people.freebsd.org/~kib/misc/fdpriv.3.patch
> >>
> >>Per insistence of John Baldwin and request of Eric Anholt, the destructors
> >>are called now when either file is last closed, or the device is 
> >>destroyed.
> >>This versions adds only one pointer to the struct file.
> >>
> >>Jeff, would you, please, explicitely specify what field you propose to
> >>union with the f_cdevpriv ?
> 
> f_nextoff and f_seqcount are only used if vn_read() and vn_write() are 
> used.  They do not apply to any other descriptors.
I use the f_cdevpriv != NULL as an indicator for the necessity to enter
the cdevpriv code, in particular, locking the cdevpriv_mtx, that would
otherwise needed to be entered at each last close. I think that one
pointer for the struct file is not too big cost, do you agree ?

> 
> >
> >Of course, I forgot to answer the question. Yes, the KPI is supposed to
> >be used by the drivers only. Please, note that device open files have
> >DTYPE_VNODE.
> >
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-arch/attachments/20080512/2156b54e/attachment.pgp


More information about the freebsd-arch mailing list