After some digging in the code, I found the problem. An int "magtapeout" variable is used in "common/legacy_indexer.c" and in "dump/tape.c" to discriminate between tape and other dump output devices.
The variable was declared "extern" in indexer.c, but that declaration was commented out and a standalone magtapeout is in place instead. Given that tape.c initializes the variable, the indexer.c version never get that value, and the GetTapePos function assumes not to be in the tape device output case. So ioctl MTGETCPOS is never called, and an lseek is issued instead. I restored the extern declaration and the QFA function seems ok now. rob