int reservations_lock_count = 0;
/* This applies to a drive and to Volumes */
-void _lock_reservations()
+void _lock_reservations(const char *file, int line)
{
int errstat;
reservations_lock_count++;
- if ((errstat=rwl_writelock(&reservation_lock)) != 0) {
+ if ((errstat=rwl_writelock_p(&reservation_lock, file, line)) != 0) {
berrno be;
Emsg2(M_ABORT, 0, "rwl_writelock failure. stat=%d: ERR=%s\n",
errstat, be.bstrerror(errstat));
*/
void DCR::unreserve_device()
{
+ dev->dlock();
lock_volumes();
if (is_reserved()) {
clear_reserved();
}
}
unlock_volumes();
+ dev->dunlock();
}
/*
if (dev->can_read()) {
Mmsg(jcr->errmsg, _("3603 JobId=%u device %s is busy reading.\n"),
jcr->JobId, dev->print_name());
- Dmsg1(dbglvl, "%s", jcr->errmsg);
+ Dmsg1(dbglvl, "Failed: %s", jcr->errmsg);
queue_reserve_message(jcr);
goto bail_out;
}
if (dev->is_device_unmounted()) {
Mmsg(jcr->errmsg, _("3604 JobId=%u device %s is BLOCKED due to user unmount.\n"),
jcr->JobId, dev->print_name());
- Dmsg1(dbglvl, "%s", jcr->errmsg);
+ Dmsg1(dbglvl, "Failed: %s", jcr->errmsg);
queue_reserve_message(jcr);
goto bail_out;
}
"3608 JobId=%u wants Pool=\"%s\" but have Pool=\"%s\" nreserve=%d on drive %s.\n"),
(uint32_t)jcr->JobId, dcr->pool_name, dev->pool_name,
dev->num_reserved(), dev->print_name());
+ Dmsg1(dbglvl, "Failed: %s", jcr->errmsg);
queue_reserve_message(jcr);
- Dmsg2(dbglvl, "failed: busy num_writers=0, reserved, pool=%s wanted=%s\n",
- dev->pool_name, dcr->pool_name);
}
return 0;
}
/* Max Concurrent Jobs depassed or already reserved */
Mmsg(jcr->errmsg, _("3609 JobId=%u Max concurrent jobs exceeded on drive %s.\n"),
(uint32_t)jcr->JobId, dev->print_name());
+ Dmsg1(dbglvl, "Failed: %s", jcr->errmsg);
queue_reserve_message(jcr);
- Dmsg1(dbglvl, "reserve dev failed: %s", jcr->errmsg);
return false;
}
if (strcmp(dcr->VolCatInfo.VolCatStatus, "Recycle") == 0) {
/* Max Job Vols depassed or already reserved */
Mmsg(jcr->errmsg, _("3610 JobId=%u Volume max jobs exceeded on drive %s.\n"),
(uint32_t)jcr->JobId, dev->print_name());
- queue_reserve_message(jcr);
Dmsg1(dbglvl, "reserve dev failed: %s", jcr->errmsg);
+ queue_reserve_message(jcr);
return false; /* wait */
}
return true;
} else {
Dmsg1(dbglvl, "not low use num_writers=%d\n", dev->num_writers+dev->num_reserved());
}
- Dmsg0(dbglvl, "failed: !prefMnt && busy.\n");
Mmsg(jcr->errmsg, _("3605 JobId=%u wants free drive but device %s is busy.\n"),
jcr->JobId, dev->print_name());
+ Dmsg1(dbglvl, "Failed: %s", jcr->errmsg);
queue_reserve_message(jcr);
return 0;
}
if (rctx.PreferMountedVols && !dev->vol && dev->is_tape()) {
Mmsg(jcr->errmsg, _("3606 JobId=%u prefers mounted drives, but drive %s has no Volume.\n"),
jcr->JobId, dev->print_name());
+ Dmsg1(dbglvl, "Failed: %s", jcr->errmsg);
queue_reserve_message(jcr);
- Dmsg0(dbglvl, "failed: want mounted -- no vol\n");
return 0; /* No volume mounted */
}
Mmsg(jcr->errmsg, _("3911 JobId=%u failed reserve drive %s.\n"),
jcr->JobId, dev->print_name());
queue_reserve_message(jcr);
- Dmsg1(dbglvl, "failed: No reserve %s\n", dev->print_name());
+ Dmsg1(dbglvl, "Failed: No reserve %s\n", dev->print_name());
return 0;
}