Skip site navigation (1)Skip section navigation (2)
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>