Re: per file descriptor device driver data ?

From: Andriy Gapon <avg_at_FreeBSD.org>
Date: Sat, 30 May 2015 11:15:46 +0300
On 29/05/2015 15:37, Konstantin Belousov wrote:
> On Fri, May 29, 2015 at 02:24:14PM +0200, Luigi Rizzo wrote:
>> Hi,
>> in the kernel module for netmap we need to store some
>> private data associated to each open netmap file descriptor.
>>
>> Our current design uses devfs_set_cdevpriv() during the open()
>> handler, but for some reason a subsequent devfs_get_cdevpriv(p)
>> returns *p = NULL in additional threads created by the process
>> that did the open().
>>
>> The manpage devfs_set_cdevpriv() does not mention threads,
>> and so i am a bit puzzled why the cdevpriv is only good
>> for the original thread.
> Probably, due to a bug, and the bug is more likely in the consumer code,
> than in cdevpriv. The cdevpriv requires the current file context, i.e.
> you should be in the context of the syscall which is operating on the
> file, to get the file related private data.
> 
> If you believe that the bug is in cdevpriv interface, please provide the
> minimal example to demonstrate the issue.

I know of one case where ZFS driver has to play tricks with
devfs_get_cdevpriv(), please see zfs_onexit_fd_hold().

>>
>> In the linux version 'struct file' has a "private_data" field
>> that we use for that purpose, and remains valid on all threads.
>> i wonder if there is something similar we can use in FreeBSD.


-- 
Andriy Gapon
Received on Sat May 30 2015 - 06:17:19 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:57 UTC