Re: Slow tape drive timeout
From: Robert Hancock
Date: Thu Apr 03 2008 - 22:27:39 EST
Kai Makisara wrote:
On Wed, 2 Apr 2008, Robert Hancock wrote:
Kai Makisara wrote:
On Tue, 1 Apr 2008, Carlo Nyto wrote:
I am experiencing a two minute timeout open()ing a tape device when
there is no tape in the drive.
open() with O_NONBLOCK succeeds immediately, however.
This is how open() is supposed to work according to standards (e.g., SUS) if
O_NONBLOCK is supported. (Well, actually open() should wait indefinitely but
the non-linux systems I tested had a timeout.) The linux st driver was
changed to comply with standards at 2.5.3. I.e., the 2.4 kernels did return
immediately but the 2.6 kernels have always waited.
...
Why is accessing the tape drive with no tape in it causing a timeout in the
first place? I should think that would fail immediately with some "medium not
present" error from the drive. Unless the drive has no mechanism to detect it,
but that seems really retarded..
It does not seem retarded to me. If a program wants to just wait until the
tape drive becomes ready (e.g., loads the tape), it can use the blocking
open. This is simple. If a program wants to test the status, it uses
non-blocking open. The behavior mandated by the standards provides
alternatives. If O_NONBLOCK is not supported, the user program must
implement the waiting logic if the program just wants to wait until the
drive is ready before starting i/o.
This behavior is not consistent with any other removable storage device
provided by Linux, however. If you try to open a CD-ROM device node when
no disc is inserted, it doesn't block, it just gives you an error right
away. Why should the tape drive behavior be different?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/