Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Sep 2009 11:53:46 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Igor Sysoev <is@rambler-co.ru>
Cc:        freebsd-hackers@freebsd.org, d@delphij.net
Subject:   Re: fcntl(F_RDAHEAD)
Message-ID:  <20090922085346.GR47688@deviant.kiev.zoral.com.ua>
In-Reply-To: <20090922072848.GA727@rambler-co.ru>
References:  <20090917101526.GF57619@rambler-co.ru> <4AB2B7A1.5000601@delphij.net> <20090918074027.GI47688@deviant.kiev.zoral.com.ua> <20090921111245.GB23958@rambler-co.ru> <20090921112909.GQ47688@deviant.kiev.zoral.com.ua> <20090922072848.GA727@rambler-co.ru>

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

--Lxy5y0HlI/3yLyUE
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Sep 22, 2009 at 11:28:48AM +0400, Igor Sysoev wrote:
> On Mon, Sep 21, 2009 at 02:29:09PM +0300, Kostik Belousov wrote:
>=20
> > On Mon, Sep 21, 2009 at 03:12:45PM +0400, Igor Sysoev wrote:
>=20
> > > > What I dislike about the patch is the new kernel-private flag that =
is
> > > > eaten from the open(2) flags namespace. We do already have FHASLOCK,
> > > > so far the only such flag.
> > >=20
> > > We can change
> > >   int    f_seqcount;
> > > to
> > >   u_int  f_seqcount;
> > >=20
> > > and can use highest bit instead of O_READAHEAD: anyway f_seqcount is =
shifted
> > > to 16 bits left.
> >=20
> > Or do the same trick as was done for FHASLOCK and override some flag th=
at
> > is not saved after open, see FMASK.
> >=20
> > Or split f_seqcount into two u_short fields, one for f_seqcount, second=
 for
> > f_kflag, and use the later for FHASLOCK and FREADAHEAD. [We are trying =
to
> > not grow struct file unless absolutely neccessary].
>=20
> I agree that struct file should not grow (at least in this case).
> However, I believe splitting f_seqcount into two fields will break
> kernel ABI. Or not ? I think f_seqcount should be splitted in 9-CURRENT
> and probably, in 8-STABLE, but in 7-STABLE we may use the open(2) flags
> namespace.

The struct file indeed participates in the KBI, in particular, pointer
to it is supplied as an argument to VOP_OPEN() and d_fdopen(). On the
other hand, it is assumed that drivers and fses use it to override
f_ops and possibly f_data. f_seqcount status is internal VFS field that
probably should be not accessed or modified by driver or fs.

Reason to try hard to keep layout of struct file intact even between major
branches is the userspace compatibility, with the code of lsof and fstat.
Might be, fstat will be improved to not require this.

Probably, best temporal solution would be to override some flag used
only for open(2), postponing the task of separating bit- and name-spaces
for other day. Also, it makes merge to 8 and 7 easier.

--Lxy5y0HlI/3yLyUE
Content-Type: application/pgp-signature
Content-Disposition: inline

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

iEYEARECAAYFAkq4kJoACgkQC3+MBN1Mb4hNrwCgn7tc4ZYBPMRcItKYiMwgVIlX
zw4AoIBPDroFiC50HGpRhvIcljRvmhFB
=dfu4
-----END PGP SIGNATURE-----

--Lxy5y0HlI/3yLyUE--



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