Date: Thu, 7 Jun 2012 06:34:23 +1000 (EST) From: Bruce Evans <brde@optusnet.com.au> To: Konstantin Belousov <kostikbel@gmail.com> Cc: freebsd-fs@FreeBSD.org, pho@FreeBSD.org, John Baldwin <jhb@FreeBSD.org> Subject: Re: close() of an flock'd file is not atomic Message-ID: <20120607062703.P955@besplex.bde.org> In-Reply-To: <20120606183949.GR85127@deviant.kiev.zoral.com.ua> References: <201203071318.08241.jhb@freebsd.org> <201203091059.29342.jhb@freebsd.org> <201203161406.27549.jhb@freebsd.org> <201206060817.54684.jhb@freebsd.org> <20120606183949.GR85127@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 6 Jun 2012, Konstantin Belousov wrote: > On Wed, Jun 06, 2012 at 08:17:54AM -0400, John Baldwin wrote: >>... >> The vn_open_vnode() patch is at >> http://www.freebsd.org/~jhb/patches/vn_open_vnode.patch >> >> I tested it by doing a buildworld -j 32 in a loop while NFS exporting the >> /usr/obj tree to another machine that did a continual find | xargs md5 loop >> over the /usr/obj tree. This survived overnight. > > There is #if 0 left in fhopen() which translates ERESTART into EINTR. Is > it needed ? > > Otherwise it looks fine (but still quite hard to read). This translation in the old code causes the following bogus behaviour: - some device drivers try to restart open() after revoke(). They return ERESTART for this. But open never restarts, due to this translation. Never restarting may be correct, but EINTR is a bogus errno unless the open was actually interrupted by a signal, in which case the driver should have returned EINTR. ENXIO is closest to describing "killed by revoke". What case is the translation supposed to fix? Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120607062703.P955>