Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Feb 2019 07:22:26 +0000
From:      "Poul-Henning Kamp" <phk@phk.freebsd.dk>
To:        cem@freebsd.org
Cc:        "freebsd-arch@freebsd.org" <arch@freebsd.org>
Subject:   Re: RFC: What to do about VOP_INACTIVE?
Message-ID:  <86316.1549956146@critter.freebsd.dk>
In-Reply-To: <CAG6CVpU8J=G8za8W2uan8SAGEbe4PD=SXwMow=E_mkJnMGB96A@mail.gmail.com>
References:  <CAG6CVpU8J=G8za8W2uan8SAGEbe4PD=SXwMow=E_mkJnMGB96A@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--------
In message <CAG6CVpU8J=3DG8za8W2uan8SAGEbe4PD=3DSXwMow=3DE_mkJnMGB96A@mail=
.gmail.com>, Conrad Meyer writes:

>The nominal return type of the VOP_INACTIVE vnode method is 'int', but
>in practice any error returned is silently discarded.

The return type is an historical accident from John Heidemann's phd.

The way he implemented stackable filesystems cast all VOP's to:

	typedef int vop_t __P((void *));

So that filesystems could have a VOP methodvector which looked like:

	static struct vnodeopv_entry_desc fifo_vnodeop_entries[] =3D {
		{ &vop_default_desc,            (vop_t *) vn_default_error },
		{ &vop_abortop_desc,            (vop_t *) fifo_badop },
		{ &vop_access_desc,             (vop_t *) fifo_ebadf },
		{ &vop_advlock_desc,            (vop_t *) fifo_advlock },
		[...]

Then on runtime, he built the real vop dispatch tables.

Around 1997 I untangled that so that we got compiler type-checks
all the way though the VOP calls, and there were enough historical
cruft to clean up that I never got around to the return type of
the individual VOPs.

If you want to fix this, the right thing to do is to add return types
in vnode_if.src and teach the tools/vnode_if.awk script about them.

-- =

Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk@FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    =

Never attribute to malice what can adequately be explained by incompetence=
.



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