]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/mount.c
Status cleanup and cancelling FD
[bacula/bacula] / bacula / src / stored / mount.c
index 1a88f1ea7de4f93aeea236e9a7653ba2dfe1c89a..9402c18de7a6153664a025633feeab1dfe407cef 100644 (file)
@@ -8,7 +8,7 @@
  *   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
@@ -66,9 +66,8 @@ mount_next_vol:
       /* 
        * 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));
@@ -209,6 +208,7 @@ mount_error:
     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");
@@ -249,7 +249,8 @@ mount_error:
                  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;
@@ -259,13 +260,14 @@ mount_error:
            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);
       /* Set or reset Volume statistics */
-      dev->VolCatInfo.VolCatJobs = 1;
-      dev->VolCatInfo.VolCatFiles = 1;
+      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++;
@@ -276,7 +278,7 @@ mount_error:
         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"),
@@ -301,7 +303,7 @@ mount_error:
          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;
       }
@@ -319,12 +321,13 @@ mount_error:
 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;
         }
       }
       dev->VolCatInfo.VolCatMounts++;     /* Update mounts */
+      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 */