Re: Slow tape drive timeout

From: Robert Hancock
Date: Thu Apr 03 2008 - 00:24:52 EST


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.

The problem is that I am trying to set up Legato on a system that has
multiple tape drives. For certain common operations, Legato tries to
open() each tape drive multiple times. On a system with multiple tape
drives, this adds up to a significant amount of time wasted due to
this timeout.

You are not the only person who has noticed this. At work we had to install a distribution using 2.4 kernel to our backup server in order to use Legato ;-(

But this is a Legato problem, not a kernel problem.

Solaris does not have this problem, and Legato support advises that
they are at the mercy of the operating system.

Solaris does return EIO. Either it does not support O_NONBLOCK or it is not compliant with SUS.

Legato would not be so much "at the mercy of the operating system" if they would write their software to work according to standards, not according to some operating system.

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..
--
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/