* Version $Id$
*/
/*
- Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+ Copyright (C) 2000-2003 Kern Sibbald and John Walker
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
/*
* First erase all memory of the current volume
*/
- dev->block_num = 0;
- dev->file = 0;
- dev->LastBlockNumWritten = 0;
+ dev->block_num = dev->file = 0;
+ dev->EndBlock = dev->EndFile = 0;
memset(&dev->VolCatInfo, 0, sizeof(dev->VolCatInfo));
memset(&jcr->VolCatInfo, 0, sizeof(jcr->VolCatInfo));
memset(&dev->VolHdr, 0, sizeof(dev->VolHdr));
Setting slot to zero in catalog.\n"),
jcr->VolCatInfo.VolCatName, jcr->VolCatInfo.Slot);
jcr->VolCatInfo.Slot = 0; /* invalidate slot */
+ Dmsg0(200, "update vol info in mount\n");
dir_update_volume_info(jcr, &jcr->VolCatInfo, 1); /* set slot */
}
Dmsg0(100, "Default\n");
dev_name(dev), strerror_dev(dev));
}
}
- if (!write_block_to_dev(dev, block)) {
+ /* Attempt write to check write permission */
+ if (!write_block_to_dev(jcr, dev, block)) {
Jmsg2(jcr, M_ERROR, 0, _("Unable to write device %s. ERR=%s\n"),
dev_name(dev), strerror_dev(dev));
goto mount_next_vol;
dev_name(dev), strerror_dev(dev));
goto mount_next_vol;
}
+
/* Recreate a correct volume label and return it in the block */
write_volume_label_to_block(jcr, dev, block);
- dev->VolCatInfo.VolCatJobs = 1;
- dev->VolCatInfo.VolCatFiles = 1;
+ /* Set or reset Volume statistics */
+ dev->VolCatInfo.VolCatJobs = 0;
+ dev->VolCatInfo.VolCatFiles = 0;
dev->VolCatInfo.VolCatErrors = 0;
- dev->VolCatInfo.VolCatBlocks = 1;
+ dev->VolCatInfo.VolCatBlocks = 0;
if (recycle) {
dev->VolCatInfo.VolCatMounts++;
dev->VolCatInfo.VolCatRecycles++;
dev->VolCatInfo.VolCatReads = 1;
}
strcpy(dev->VolCatInfo.VolCatStatus, "Append");
- Dmsg0(100, "dir_update_vol_info. Set Append\n");
+ Dmsg0(200, "dir_update_vol_info. Set Append\n");
dir_update_volume_info(jcr, &dev->VolCatInfo, 1); /* indicate doing relabel */
if (recycle) {
Jmsg(jcr, M_INFO, 0, _("Recycled volume %s on device %s, all previous data lost.\n"),
Jmsg(jcr, M_INFO, 0, _("Marking Volume %s in Error in Catalog.\n"),
jcr->VolumeName);
strcpy(dev->VolCatInfo.VolCatStatus, "Error");
- Dmsg0(100, "dir_update_vol_info. Set Error.\n");
+ Dmsg0(200, "dir_update_vol_info. Set Error.\n");
dir_update_volume_info(jcr, &dev->VolCatInfo, 0);
goto mount_next_vol;
}
The number of files mismatch! Volume=%d Catalog=%d\n"),
dev_file(dev)+1, dev->VolCatInfo.VolCatFiles);
strcpy(dev->VolCatInfo.VolCatStatus, "Error");
- Dmsg0(100, "dir_update_vol_info. Set Error.\n");
+ Dmsg0(200, "dir_update_vol_info. Set Error.\n");
dir_update_volume_info(jcr, &dev->VolCatInfo, 0);
goto mount_next_vol;
}
}
- /* Update Volume Info -- will be written at end of Job */
dev->VolCatInfo.VolCatMounts++; /* Update mounts */
- dev->VolCatInfo.VolCatJobs++;
+ Dmsg1(200, "update volinfo mounts=%d\n", dev->VolCatInfo.VolCatMounts);
+ dir_update_volume_info(jcr, &dev->VolCatInfo, 0);
/* Return an empty block */
empty_block(block); /* we used it for reading so set for write */
}
* End Of Tape -- mount next Volume (if another specified)
*/
if (jcr->NumVolumes > 1 && jcr->CurVolume < jcr->NumVolumes) {
- VOL_LIST *vol = jcr->VolList;
- /* Find next Volume */
- jcr->CurVolume++;
- for (int i=1; i<jcr->CurVolume; i++) {
- vol = vol->next;
- }
- pm_strcpy(&jcr->VolumeName, vol->VolumeName);
- Dmsg1(400, "There is another volume %s.\n", jcr->VolumeName);
-
close_dev(dev);
dev->state &= ~ST_READ;
if (!acquire_device_for_read(jcr, dev, block)) {