]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/reserve.c
kes Remove Encryption and Accurate lines in vbackup output -- not used.
[bacula/bacula] / bacula / src / stored / reserve.c
index 18b0787f21c79c6f745aa1e75c4b621a138f35e9..b262b76b216c9534fa28a1045a30f09f1e419b77 100644 (file)
@@ -20,7 +20,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Bacula® is a registered trademark of John Walker.
+   Bacula® is a registered trademark of Kern Sibbald.
    The licensor of Bacula is the Free Software Foundation Europe
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
@@ -335,8 +335,6 @@ VOLRES *reserve_volume(DCR *dcr, const char *VolumeName)
       if (strcmp(vol->vol_name, VolumeName) == 0) {
          Dmsg2(dbglvl, "=== set reserved vol=%s dev=%s\n", VolumeName,
                vol->dev->print_name());
-         vol->set_in_use();             /* retake vol if released previously */
-         dcr->reserved_volume = true;   /* reserved volume */
          goto get_out;                  /* Volume already on this device */
       } else {
          /* Don't release a volume if it was reserved by someone other than us */
@@ -347,7 +345,7 @@ VOLRES *reserve_volume(DCR *dcr, const char *VolumeName)
          }
          Dmsg2(dbglvl, "reserve_vol free vol=%s at %p\n", vol->vol_name, vol->vol_name);
          free_volume(dev);
-//       volume_unused(dcr);
+         Dmsg0(50, "set_unload\n");
          dev->set_unload();             /* have to unload current volume */
          debug_list_volumes("reserve_vol free");
       }
@@ -388,7 +386,7 @@ VOLRES *reserve_volume(DCR *dcr, const char *VolumeName)
             Dmsg3(dbglvl, "==== Swap vol=%s from dev=%s to %s\n", 
                VolumeName, vol->dev->print_name(), dev->print_name());
             free_volume(dev);            /* free any volume attached to our drive */
-//          volume_unused(dcr);
+            Dmsg0(50, "set_unload\n");
             dev->set_unload();           /* Unload any volume that is on our drive */
             dcr->dev = vol->dev;         /* temp point to other dev */
             slot = get_autochanger_loaded_slot(dcr);  /* get slot on other drive */
@@ -539,23 +537,12 @@ bool volume_unused(DCR *dcr)
    }
    if (dev->vol->is_swapping()) {
       Dmsg1(dbglvl, "vol_unused: vol being swapped on %s\n", dev->print_name());
-      debug_list_volumes("swapping vol cannot unreserve_volume");
+      Dmsg1(dbglvl, "=== clear in_use vol=%s\n", dev->vol->vol_name);
+      dev->vol->clear_in_use();
+      debug_list_volumes("swapping vol cannot free_volume");
       return false;
    }
 
-#ifdef xxx
-   if (dev->is_busy()) {
-      Dmsg1(dbglvl, "vol_unused: busy on %s\n", dev->print_name());
-      debug_list_volumes("dev busy cannot unreserve_volume");
-      return false;
-   }
-#endif
-#ifdef xxx
-   if (dev->num_writers > 0 || dev->num_reserved() > 0) {
-      ASSERT(0);
-   }
-#endif
-
    /*  
     * If this is a tape, we do not free the volume, rather we wait
     *  until the autoloader unloads it, or until another tape is
@@ -564,6 +551,7 @@ bool volume_unused(DCR *dcr)
     */
    Dmsg4(dbglvl, "=== set not reserved vol=%s num_writers=%d dev_reserved=%d dev=%s\n",
       dev->vol->vol_name, dev->num_writers, dev->num_reserved(), dev->print_name());
+   Dmsg1(dbglvl, "=== clear in_use vol=%s\n", dev->vol->vol_name);
    dev->vol->clear_in_use();
    if (dev->is_tape() || dev->is_autochanger()) {
       return true;
@@ -591,6 +579,7 @@ bool free_volume(DEVICE *dev)
    vol = dev->vol;
    /* Don't free a volume while it is being swapped */
    if (!vol->is_swapping()) {
+      Dmsg1(dbglvl, "=== clear in_use vol=%s\n", dev->vol->vol_name);
       dev->vol = NULL;
       vol_list->remove(vol);
       Dmsg2(dbglvl, "=== remove volume %s dev=%s\n", vol->vol_name, dev->print_name());
@@ -1088,16 +1077,16 @@ int search_res_for_device(RCTX &rctx)
    /* Look through Autochangers first */
    foreach_res(changer, R_AUTOCHANGER) {
       Dmsg1(dbglvl, "Try match changer res=%s\n", changer->hdr.name);
-      if (!rctx.device->autoselect) {
-         Dmsg1(100, "Device %s not autoselect skipped.\n",
-         rctx.device->hdr.name);
-         continue;              /* device is not available */
-      }
       /* Find resource, and make sure we were able to open it */
       if (strcmp(rctx.device_name, changer->hdr.name) == 0) {
          /* Try each device in this AutoChanger */
          foreach_alist(rctx.device, changer->device) {
             Dmsg1(dbglvl, "Try changer device %s\n", rctx.device->hdr.name);
+            if (!rctx.device->autoselect) {
+               Dmsg1(100, "Device %s not autoselect skipped.\n",
+               rctx.device->hdr.name);
+               continue;              /* device is not available */
+            }
             stat = reserve_device(rctx);
             if (stat != 1) {             /* try another device */
                continue;