]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/mount.c
Fix build without sd lock debug
[bacula/bacula] / bacula / src / stored / mount.c
index 4dac477e2461ab6354f676ef1abb7ebbf072e750..9d542b98f4b8caadd96a2fc98afc5595fbe7b4e2 100644 (file)
@@ -1,16 +1,7 @@
-/*
- *
- *  Routines for handling mounting tapes for reading and for
- *    writing.
- *
- *   Kern Sibbald, August MMII
- *
- *   Version $Id$
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2002-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2002-2007 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ *
+ *  Routines for handling mounting tapes for reading and for
+ *    writing.
+ *
+ *   Kern Sibbald, August MMII
+ *
+ *   Version $Id$
+ */
 
 #include "bacula.h"                   /* pull in global headers */
 #include "stored.h"                   /* pull in Storage Deamon headers */
@@ -387,7 +387,7 @@ read_volume:
                  " part=%d size=%s\n"), dcr->VolumeName, 
                  dev->part, edit_uint64(dev->VolCatInfo.VolCatBytes,ed1));
          } else {
-            Jmsg(jcr, M_ERROR, 0, _("I cannot write on Volume \"%s\" because: "
+            Jmsg(jcr, M_ERROR, 0, _("I cannot write on DVD Volume \"%s\" because: "
                  "The sizes do not match! Volume=%s Catalog=%s\n"),
                  dcr->VolumeName,
                  edit_uint64(dev->part_start + dev->part_size, ed1),
@@ -395,9 +395,7 @@ read_volume:
             mark_volume_in_error(dcr);
             goto mount_next_vol;
          }
-      }
-      /* *****FIXME**** we should do some checking for files too */
-      if (dev->is_tape()) {
+      } else if (dev->is_tape()) {
          /*
           * Check if we are positioned on the tape at the same place
           * that the database says we should be.
@@ -406,12 +404,29 @@ read_volume:
             Jmsg(jcr, M_INFO, 0, _("Ready to append to end of Volume \"%s\" at file=%d.\n"),
                  dcr->VolumeName, dev->get_file());
          } else {
-            Jmsg(jcr, M_ERROR, 0, _("I cannot write on Volume \"%s\" because:\n"
+            Jmsg(jcr, M_ERROR, 0, _("I cannot write on tape Volume \"%s\" because:\n"
                  "The number of files mismatch! Volume=%u Catalog=%u\n"),
                  dcr->VolumeName, dev->get_file(), dev->VolCatInfo.VolCatFiles);
             mark_volume_in_error(dcr);
             goto mount_next_vol;
          }
+      } else if (dev->is_file()) {
+         char ed1[50], ed2[50];
+         boffset_t pos;
+         pos = dev->lseek(dcr, (boffset_t)0, SEEK_END);
+         if (dev->VolCatInfo.VolCatBytes == (uint64_t)pos) {
+            Jmsg(jcr, M_INFO, 0, _("Ready to append to end of Volume \"%s\""
+                 " size=%s\n"), dcr->VolumeName, 
+                 edit_uint64(dev->VolCatInfo.VolCatBytes, ed1));
+         } else {
+            Jmsg(jcr, M_ERROR, 0, _("I cannot write on disk Volume \"%s\" because: "
+                 "The sizes do not match! Volume=%s Catalog=%s\n"),
+                 dcr->VolumeName,
+                 edit_uint64(pos, ed1),
+                 edit_uint64(dev->VolCatInfo.VolCatBytes, ed2));
+            mark_volume_in_error(dcr);
+            goto mount_next_vol;
+         }
       }
       dev->VolCatInfo.VolCatMounts++;      /* Update mounts */
       Dmsg1(150, "update volinfo mounts=%d\n", dev->VolCatInfo.VolCatMounts);
@@ -510,7 +525,7 @@ static int try_autolabel(DCR *dcr, bool opened)
       return try_read_vol;   /* read label we just wrote */
    }
    if (!dev->has_cap(CAP_LABEL) && dcr->VolCatInfo.VolCatBytes == 0) {
-      Jmsg(dcr->jcr, M_INFO, 0, _("Warning device %s not configured to autolabel Volumes.\n"), 
+      Jmsg(dcr->jcr, M_WARNING, 0, _("Device %s not configured to autolabel Volumes.\n"), 
          dev->print_name());
    }
    /* If not removable, Volume is broken */
@@ -575,8 +590,7 @@ void release_volume(DCR *dcr)
    dev->EndBlock = dev->EndFile = 0;
    memset(&dev->VolCatInfo, 0, sizeof(dev->VolCatInfo));
    memset(&dcr->VolCatInfo, 0, sizeof(dcr->VolCatInfo));
-   free_volume(dev);
-   memset(&dev->VolHdr, 0, sizeof(dev->VolHdr));
+   dev->clear_volhdr();
    /* Force re-read of label */
    dev->clear_labeled();
    dev->clear_read();