Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Jan 2014 16:52:30 -0700
From:      Warner Losh <imp@bsdimp.com>
To:        Adrian Chadd <adrian@freebsd.org>
Cc:        Bruce Evans <bde@freebsd.org>, "freebsd-arch@freebsd.org" <freebsd-arch@freebsd.org>
Subject:   Re: Using sys/types.h types in sys/socket.h
Message-ID:  <5821DA91-E9C7-4D1A-A108-63E74CFF1FC5@bsdimp.com>
In-Reply-To: <CAJ-Vmom3FQOb1ZQTwbmbSiT90N6tmKOoPg8JPQAapkJg2TXqFA@mail.gmail.com>
References:  <CAJ-Vmo=MWPQWfP9duWPPwaKee5Zp9Gemj3GKqE8=bxkjn_1YYA@mail.gmail.com> <9C1291B5-215B-440E-B8B0-6308840F755C@bsdimp.com> <CAJ-Vmom3FQOb1ZQTwbmbSiT90N6tmKOoPg8JPQAapkJg2TXqFA@mail.gmail.com>

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

On Jan 7, 2014, at 2:20 PM, Adrian Chadd wrote:

> On 17 December 2013 07:42, Warner Losh <imp@bsdimp.com> wrote:
>> The tl;dr version: use sys/_types.h and use the usual conventions to =
avoid namespace pollution.  I read Bruce's reply, and I think I'm saying =
the same things he is...
>=20
> Yup, I've done that bit.
>=20
>> Warner
>>=20
>> On Dec 17, 2013, at 1:23 AM, Adrian Chadd wrote:
>>=20
>>> Hi,
>>>=20
>>> I have a patch to implement some new sendfile functionality, but =
this
>>> involves adding stuff to sys/socket.h:
>>>=20
>>> Index: sys/sys/socket.h
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>> --- sys/sys/socket.h (revision 258883)
>>> +++ sys/sys/socket.h (working copy)
>>> @@ -577,11 +577,27 @@
>>> };
>>>=20
>>> /*
>>> + * sendfile(2) kqueue information
>>> + */
>>> +struct sf_hdtr_kq {
>>> + int kq_fd; /* kq fd to post completion events on */
>>> + uint32_t kq_flags; /* extra flags to pass in */
>>> + void *kq_udata; /* user data pointer */
>>> + uintptr_t kq_ident; /* ident (from userland?) */
>>> +};
>>=20
>> This is a terrible interface. Or I'd say that the ordering of the =
elements in this structure is suboptimal. Having the uint32_t in the =
middle like that causes badness. Guess not much can be done about that =
given that fd must be an int, eh?
>=20
> I'm open to an alternate interface that doesn't require new syscalls
> or syscall modification. Yeah, the definition of an fd here is an
> 'int'. I could always turn it into an int32_t to fix the size but
> would that be "ok" ?

I'm not sure it is worth fixing in this way, since it is counter to all =
the other uses of fd in the system, so maybe this is the best we can =
have given those constraints...

Warner




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5821DA91-E9C7-4D1A-A108-63E74CFF1FC5>