This fixes the "getfile: lost data" panic when restoring dumps

on a 7.0 or later system that were created on a pre-5.0 system.
We must ensure that restore zeros out the previously undefined
birthtime and external attribute size fields when reading dump
tapes made by the UFS1 dump program.

The problem is that UFS2 dump carefully zeros out the unused
birthtime and external attribute size fields in the dump header
when dumping UFS1 filesystems, but the UFS1 dump didn't know about
those fields (they were spares) so just left whatever random junk
was in them. So, when restoring one of these pre-UFS2 dumps,
the new restore would eventually trip across a header that had
a non-zero external attribute size and try to extract it. That
consumed several tape blocks which left it totally out of sync
and very unhappy (i.e., the panic). The fix is in the gethead()
function which modernizes old headers by copying old fields to
their new location (and with this fix) zeroing out previously
undefined fields.

PR:		bin/120881
Review by:	David Malone & Scott Lambert
MFC after:	1 week
This commit is contained in:
Kirk McKusick 2008-05-22 22:19:33 +00:00
parent 67dafe43c1
commit 4e5867d27e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=179219

View File

@ -1424,6 +1424,9 @@ gethead(struct s_spcl *buf)
buf->c_ddate = _time32_to_time(buf->c_old_ddate);
buf->c_atime = _time32_to_time(buf->c_old_atime);
buf->c_mtime = _time32_to_time(buf->c_old_mtime);
buf->c_birthtime = 0;
buf->c_birthtimensec = 0;
buf->c_extsize = 0;
}
break;