X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Freserve.c;h=280abd01b60ddd20150ece3ae8e29fd6151600bd;hb=cfc2aa18dbf9afb34902a14473152f388836538d;hp=7dbede4b7c8aca7a395bafa95866eccadaba50db;hpb=86138bc5550dda95c576f6a059c29134cf3f4a04;p=bacula%2Fbacula diff --git a/bacula/src/stored/reserve.c b/bacula/src/stored/reserve.c index 7dbede4b7c..280abd01b6 100644 --- a/bacula/src/stored/reserve.c +++ b/bacula/src/stored/reserve.c @@ -170,7 +170,7 @@ enum { debug_nolock = false }; -static void debug_list_volumes(const char *imsg) +void debug_list_volumes(const char *imsg) { VOLRES *vol; POOL_MEM msg(PM_MESSAGE); @@ -187,17 +187,6 @@ static void debug_list_volumes(const char *imsg) Dmsg1(dbglvl, "%s", msg.c_str()); } -#ifdef xxx - DEVICE *dev = NULL; - foreach_dlist(vol, vol_list) { - if (vol->dev == dev) { - Dmsg0(dbglvl, "Two Volumes on same device.\n"); - ASSERT(0); - dev = vol->dev; - } - } -#endif - unlock_volumes(); } @@ -358,6 +347,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); dev->set_unload(); /* have to unload current volume */ debug_list_volumes("reserve_vol free"); } @@ -398,8 +388,10 @@ 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); + 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 */ + slot = get_autochanger_loaded_slot(dcr); /* get slot on other drive */ dcr->dev = dev; /* restore dev */ vol->set_slot(slot); /* save slot */ vol->dev->set_unload(); /* unload the other drive */ @@ -428,6 +420,7 @@ get_out: vol->dev->print_name()); vol->set_in_use(); dcr->reserved_volume = true; + bstrncpy(dcr->VolumeName, vol->vol_name, sizeof(dcr->VolumeName)); } debug_list_volumes("end new volume"); unlock_volumes(); @@ -600,7 +593,7 @@ bool free_volume(DEVICE *dev) if (!vol->is_swapping()) { dev->vol = NULL; vol_list->remove(vol); - Dmsg2(dbglvl, "=== free_volume %s dev=%s\n", vol->vol_name, dev->print_name()); + Dmsg2(dbglvl, "=== remove volume %s dev=%s\n", vol->vol_name, dev->print_name()); free_vol_item(vol); debug_list_volumes("free_volume"); } @@ -1040,7 +1033,7 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx) Dmsg0(dbglvl, "deleted temp vol list\n"); Dmsg0(dbglvl, "unlock volumes\n"); unlock_volumes(); - debug_list_volumes("=== After free temp table\n"); + debug_list_volumes("after free temp table"); } if (ok) { Dmsg1(dbglvl, "OK dev found. Vol=%s from in-use vols list\n", rctx.VolumeName); @@ -1554,7 +1547,7 @@ static int can_reserve_drive(DCR *dcr, RCTX &rctx) /* Changing pool, unload old tape if any in drive */ Dmsg0(dbglvl, "OK dev: num_writers=0, not reserved, pool change, unload changer\n"); /* ***FIXME*** use set_unload() */ - unload_autochanger(dcr, 0); + unload_autochanger(dcr, -1); } } /* Device is available but not yet reserved, reserve it for us */