X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Freserve.c;h=b262b76b216c9534fa28a1045a30f09f1e419b77;hb=0d99c317e0ac4a98ccbe01ac960e4d0c35184eb9;hp=18b0787f21c79c6f745aa1e75c4b621a138f35e9;hpb=a0d6ccb5eb11d03ad5d7fb6bc45936994e5183e4;p=bacula%2Fbacula diff --git a/bacula/src/stored/reserve.c b/bacula/src/stored/reserve.c index 18b0787f21..b262b76b21 100644 --- a/bacula/src/stored/reserve.c +++ b/bacula/src/stored/reserve.c @@ -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;