+#ifdef USE_QFA
+ tistart = time(NULL);
+ if (tapeposflag) {
+ /* get tape position for inode (position directly) */
+ (void)Inode2Tapepos(next, &tnum, &tpos, 1);
+ if (tpos == 0)
+ /* get tape position for last available inode
+ * (position before) */
+ (void)Inode2Tapepos(next, &tnum, &tpos, 0);
+ if (tpos != 0) {
+ if (tnum != volno)
+ (void)RequestVol(tnum);
+ if (GetTapePos(&curtpos) == 0) {
+ /* curtpos +1000 ???, some drives
+ * might be too slow */
+ if (tpos > curtpos) {
+#ifdef DEBUG_QFA
+ msg("positioning tape %ld from %ld to %ld for inode %10lu ...\n", volno, curtpos, tpos, (unsigned long)next);
+#endif
+ if (GotoTapePos(tpos) == 0) {
+#ifdef DEBUG_QFA
+ if (GetTapePos(&curtpos) == 0)
+ msg("before resnyc at tape position %ld\n", curtpos);
+#endif
+ (void)ReReadFromTape();
+#ifdef DEBUG_QFA
+ if (GetTapePos(&curtpos) == 0)
+ msg("after resync at tape position %ld\n", curtpos);
+#endif
+ }
+ }
+ }
+ }
+ }
+#endif /* USA_QFA */
+