+ hlen = sizeof(spool_hdr);
+ wlen = block->binbuf;
+ P(dcr->dev->spool_mutex);
+ dcr->spool_size += hlen + wlen;
+ dcr->dev->spool_size += hlen + wlen;
+ if ((dcr->max_spool_size > 0 && dcr->spool_size >= dcr->max_spool_size) ||
+ (dcr->dev->max_spool_size > 0 && dcr->dev->spool_size >= dcr->dev->max_spool_size)) {
+ despool = true;
+ }
+ V(dcr->dev->spool_mutex);
+ P(mutex);
+ spool_stats.data_size += hlen + wlen;
+ if (spool_stats.data_size > spool_stats.max_data_size) {
+ spool_stats.max_data_size = spool_stats.data_size;
+ }
+ V(mutex);
+ if (despool) {
+#ifdef xDEBUG
+ char ec1[30], ec2[30], ec3[30], ec4[30];
+ Dmsg4(100, "Despool in write_block_to_spool_file max_size=%s size=%s "
+ "max_job_size=%s job_size=%s\n",
+ edit_uint64_with_commas(dcr->max_spool_size, ec1),
+ edit_uint64_with_commas(dcr->spool_size, ec2),
+ edit_uint64_with_commas(dcr->dev->max_spool_size, ec3),
+ edit_uint64_with_commas(dcr->dev->spool_size, ec4));
+#endif
+ Jmsg(dcr->jcr, M_INFO, 0, _("User specified spool size reached.\n"));
+ if (!despool_data(dcr, false)) {
+ Dmsg0(000, "Bad return from despool in write_block.\n");
+ return false;
+ }
+ /* Despooling cleared these variables so reset them */
+ P(dcr->dev->spool_mutex);
+ dcr->spool_size += hlen + wlen;
+ dcr->dev->spool_size += hlen + wlen;
+ V(dcr->dev->spool_mutex);
+ Jmsg(dcr->jcr, M_INFO, 0, _("Spooling data again ...\n"));
+ }
+
+
+ if (!write_spool_header(dcr, block)) {
+ return false;
+ }
+ if (!write_spool_data(dcr, block)) {
+ return false;
+ }
+
+ Dmsg2(100, "Wrote block FI=%d LI=%d\n", block->FirstIndex, block->LastIndex);
+ empty_block(block);
+ return true;
+}
+
+static bool write_spool_header(DCR *dcr, DEV_BLOCK *block)
+{
+ spool_hdr hdr;
+ ssize_t stat;
+