[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: open - resource temporarily unavailable



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Sun, Jun 19, 2016 at 05:15:47PM +0000, Andrey wrote:
> Andrey <thatisme <at> inp.nsk.su> writes:
> 
> > > On Fri, Jun 17, 2016 at 02:37:11PM +0000, Andrey wrote:
> > > >  <tomas <at> tuxteam.de> writes:
> > > [...]
> > > Sorry I wasn't clear: I was just talking about the errno -- we still
> > > haven't an idea how it comes about. The manpage is but an approximation
> > > to reality 
> 
> you are right, it's  EAGAIN
> "open $currname w" -> couldn't open ../../current/south/S_DAQconnMod.txt:
> errorCode=POSIX EAGAIN {resource temporarily unavailable}

OK. So now we can be (more or less) sure it happens on open(2). Of course
I'd sleep better if we had a way to positively know there's nothing
happening behind our backs: perhaps Tcl is being extra clever[1] and
Tcl's open does a bit more than just libc's/syscall's open() and we
are seeing some spurious error from another system call: remember, error
paths in the code tend to be less tested...)

> although it's only confirmation to what has been already posted by
> Sven Joachim <svenjoac <at> gmx.de> writes:
> > On Linux, EWOULDBLOCK is #defined as EAGAIN in asm-generic/errno.h.
> > Also they are always the same in the glibc, regardless of the operating
> > system kernel.
> 
> But how can I find out why it happens ?
> Still have no hints how to proceed :(

I fear I can't suggest much more than I have already. Keeping to user
space (e.g. with the help of LD_PRELOAD) might help you find patterns
(is this always in some region of the file system, is there any
correlation to other logs in the system, etc.)

But since user space only sees the kernel returning from a syscall
with EAGAIN set, not "why", you'll end up trying to find out what
the kernel is "thinking" to pin-point the cause.

The more hints you collect (e.g. "Is it really open(2)?" "Is it always
open(2)?" "Which files?") the better your chances to navigate through
kernel code.

I'd start setting up a "trap" (either by a suitable strace/ltrace
incantation (easier) or with LD_PRELOAD (more difficult, and libc
specific) to just log those events in a couple of chosen apps where
you know from time to time. Try to extract as much info from those
events (strace would tell you what system calls, which parameters,
and so on).

Sorry to be so unspecific

regards
- -- t
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iEYEARECAAYFAldnpJ4ACgkQBcgs9XrR2kZmpACeLcs1vzS/dmmgMLqhgf/UWhV8
RN8An1jAyNeFo53Y3+6P2jQOzxaW/GcR
=CovP
-----END PGP SIGNATURE-----


Reply to: