From owner-freebsd-hackers@FreeBSD.ORG Tue Mar 10 11:17:21 2009 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3B71B1065670; Tue, 10 Mar 2009 11:17:21 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from mail.terabit.net.ua (mail.terabit.net.ua [195.137.202.147]) by mx1.freebsd.org (Postfix) with ESMTP id D1A488FC14; Tue, 10 Mar 2009 11:17:20 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from skuns.zoral.com.ua ([91.193.166.194] helo=mail.zoral.com.ua) by mail.terabit.net.ua with esmtps (TLSv1:AES256-SHA:256) (Exim 4.63 (FreeBSD)) (envelope-from ) id 1LgzxW-000F20-2T; Tue, 10 Mar 2009 13:17:18 +0200 Received: from deviant.kiev.zoral.com.ua (root@deviant.kiev.zoral.com.ua [10.1.1.148]) by mail.zoral.com.ua (8.14.2/8.14.2) with ESMTP id n2ABHCcv078931 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 10 Mar 2009 13:17:13 +0200 (EET) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.3/8.14.3) with ESMTP id n2ABHCM1035303; Tue, 10 Mar 2009 13:17:12 +0200 (EET) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.3/8.14.3/Submit) id n2ABHCd2035302; Tue, 10 Mar 2009 13:17:12 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Tue, 10 Mar 2009 13:17:12 +0200 From: Kostik Belousov To: Robert Watson Message-ID: <20090310111712.GA41617@deviant.kiev.zoral.com.ua> References: Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="144W9TlQWTjTIokZ" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: ClamAV version 0.94.2, clamav-milter version 0.94.2 on skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on skuns.kiev.zoral.com.ua X-Virus-Scanned: mail.terabit.net.ua 1LgzxW-000F20-2T 791fe1b427910e47b5228cf7b23cc224 X-Terabit: YES Cc: Timothy Redaelli , freebsd-hackers@freebsd.org Subject: Re: lockf: Invalid argument on pipe X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Mar 2009 11:17:21 -0000 --144W9TlQWTjTIokZ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Mar 09, 2009 at 11:35:58PM +0000, Robert Watson wrote: >=20 > On Mon, 9 Mar 2009, Timothy Redaelli wrote: >=20 > >Why can't I do a lockf on a file descriptor that does not point a real= =20 > >file (such as stderr, stdout, or a character device)? > > > >Since it works under NetBSD, Linux, Solaris. For portability between=20 > >systems I hope I can do it under FreeBSD. > > > >The following code is simple, but It reproduce the problem. Under=20 > >non-FreeBSD systems, It will block before the puts. Instead under FreeBS= D=20 > >the lockf calls return error and, so, the lock does not works. >=20 > Could you file a PR for this, with pretty much this e-mail and sample cod= e=20 > included? There's no real reason not for it to work other than that it i= s=20 > likely not implemented for devfs; that should be easy to fix it but openi= ng=20 > a PR will help us keep track of the fact that it wants to be fixed. >=20 > thanks, >=20 > Robert N M Watson > Computer Laboratory > University of Cambridge >=20 > > > >Any suggest? > > > > > >#include > >#include > >#include > >#include > > > >int main(int argc, char *argv[]) { > > char tmp[256]; > > > > if (lockf(2, F_LOCK, 0) =3D=3D -1) > > perror("lock"); > > snprintf (tmp, 256, "%s XXX", argv[0]); > > if (!argv[1] || strcmp(argv[1], "XXX")) > > system(tmp); > > puts("You should see it only after ctrl+c"); > > return EXIT_SUCCESS; > >} > > It is explicitely disabled in devfs code. The following patch works for me. diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c index 1087452..b890da7 100644 --- a/sys/fs/devfs/devfs_vnops.c +++ b/sys/fs/devfs/devfs_vnops.c @@ -452,14 +452,6 @@ devfs_access(struct vop_access_args *ap) =20 /* ARGSUSED */ static int -devfs_advlock(struct vop_advlock_args *ap) -{ - - return (ap->a_flags & F_FLOCK ? EOPNOTSUPP : EINVAL); -} - -/* ARGSUSED */ -static int devfs_close(struct vop_close_args *ap) { struct vnode *vp =3D ap->a_vp, *oldvp; @@ -1552,7 +1544,6 @@ static struct vop_vector devfs_specops =3D { .vop_default =3D &default_vnodeops, =20 .vop_access =3D devfs_access, - .vop_advlock =3D devfs_advlock, .vop_bmap =3D VOP_PANIC, .vop_close =3D devfs_close, .vop_create =3D VOP_PANIC, --144W9TlQWTjTIokZ Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEARECAAYFAkm2TDcACgkQC3+MBN1Mb4ip3wCdG+LG9sAemurNZw9ETgifBSpZ ms0AnjsLZMVyjLxvBUCfW9mkTw3N/sJ2 =HjD0 -----END PGP SIGNATURE----- --144W9TlQWTjTIokZ--