xfs
[Top] [All Lists]

BUG 802318 - xfsdump can't do multiple dumps to one tape (without -m)

To: tes@xxxxxxxxxxxx
Subject: BUG 802318 - xfsdump can't do multiple dumps to one tape (without -m)
From: pv@xxxxxxxxxxxxx (tes@xxxxxxxxxxxx)
Date: Tue, 19 Sep 2000 22:22:24 -0700 (PDT)
Cc: linux-xfs@xxxxxxxxxxx
Reply-to: sgi.bugs.xfs@xxxxxxxxxxxxxxxxx
Sender: owner-linux-xfs@xxxxxxxxxxx
Webexec: webpvsubmit,PvProjectIncident
Webpv: proxy2.melbourne.sgi.com
View Incident: 
http://co-op.engr.sgi.com/BugWorks/code/bwxquery.cgi?search=Search&wlong=1&view_type=Bug&wi=802318

Submitter : tes                       Submitter Domain : engr               
Assigned Engineer : tes               Assigned Domain : engr                
Assigned Group : xfs-linux            Category : software                   
Customer Reported : F                 Priority : 3                          
Project : xfs-linux                   Status : open                         
Description :
A QA test revealed that xfsdump using the default 
drive_scsitape strategy cannot do multiple dumps
to a tape.

The problem stems from a different behaviour between
the Linux scsi tape driver and the IRIX one.

In IRIX, the drive can be position to the left of the
file mark after a bsf or to the right of a file mark
after a fsf, and it will report a status of MT_FMK.
However, in Linux, if one does a bsf to the left of the
file mark, it does not set the status of MT_FMK (or GMT_EOF).
This is confirmed with mt(1) and author of driver.

The xfsdump code does a bsf after skipping over the 1st dump's
media files. After the bsf, it does a check to ensure
it is at a filemark and this fails with:
  encountered media error attempting BSF

There is no way for verification of being to the left of a 
filemark after a BSF in Linux, so the fix is to remove
this check. As far as I can tell, it is just being paranoid.

This status checking would not happen in the minrmt (-m)
case for xfsdump.

Post script:
------------
Having a further look at the code in dump:
16:14 tes@snort 21> grep do_bsf *.c
content.c:                              rval = ( * dop->do_bsf )( drivep, 0, 
&status );
content.c:                              rval = ( * dop->do_bsf )( drivep, 0, 
&status );
drive_minrmt.c:static intgen_t do_bsf( drive_t *, intgen_t , intgen_t *);
drive_minrmt.c: do_bsf,                 /* do_bsf */
drive_minrmt.c:do_bsf( drive_t *drivep, intgen_t count, intgen_t *statp )
drive_scsitape.c:static intgen_t do_bsf( drive_t *, intgen_t , intgen_t *);
drive_scsitape.c:       do_bsf,                 /* do_bsf */
drive_scsitape.c:do_bsf( drive_t *drivep, intgen_t count, intgen_t *statp )

It appears to only every do a "do_bsf(count = 0)"
which translates to: bsf 1, fsf 1
I can't really see that it is achieving a whole lot !

The only other place where we don't use 0 as the count
is in dump/scan which is not exported in IRIX and hasn't
been ported to Linux. Hmmmmm.

<Prev in Thread] Current Thread [Next in Thread>
  • BUG 802318 - xfsdump can't do multiple dumps to one tape (without -m), tes@xxxxxxxxxxxx <=