--- /dev/null
+Index: src/dird/msgchan.c
+===================================================================
+--- src/dird/msgchan.c (revision 5107)
++++ src/dird/msgchan.c (working copy)
+@@ -51,7 +51,7 @@
+ /* Commands sent to Storage daemon */
+ static char jobcmd[] = "JobId=%s job=%s job_name=%s client_name=%s "
+ "type=%d level=%d FileSet=%s NoAttr=%d SpoolAttr=%d FileSetMD5=%s "
+- "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d\n";
++ "SpoolData=%d SpoolSize=%s WritePartAfterJob=%d PreferMountedVols=%d\n";
+ static char use_storage[] = "use storage=%s media_type=%s pool_name=%s "
+ "pool_type=%s append=%d copy=%d stripe=%d\n";
+ static char use_device[] = "use device=%s\n";
+@@ -157,7 +157,7 @@
+ POOL_MEM job_name, client_name, fileset_name;
+ int copy = 0;
+ int stripe = 0;
+- char ed1[30];
++ char ed1[30], ed2[30];
+
+ sd = jcr->store_bsock;
+ /*
+@@ -186,8 +186,9 @@
+ job_name.c_str(), client_name.c_str(),
+ jcr->JobType, jcr->JobLevel,
+ fileset_name.c_str(), !jcr->pool->catalog_files,
+- jcr->job->SpoolAttributes, jcr->fileset->MD5, jcr->spool_data,
+- jcr->write_part_after_job, jcr->job->PreferMountedVolumes);
++ jcr->job->SpoolAttributes, jcr->fileset->MD5, jcr->spool_data,
++ edit_int64(jcr->spool_size, ed2), jcr->write_part_after_job,
++ jcr->job->PreferMountedVolumes);
+ Dmsg1(100, ">stored: %s\n", sd->msg);
+ if (bget_dirmsg(sd) > 0) {
+ Dmsg1(100, "<stored: %s", sd->msg);
+Index: src/dird/job.c
+===================================================================
+--- src/dird/job.c (revision 5107)
++++ src/dird/job.c (working copy)
+@@ -927,6 +927,7 @@
+ jcr->fileset = job->fileset;
+ jcr->messages = job->messages;
+ jcr->spool_data = job->spool_data;
++ jcr->spool_size = job->spool_size;
+ jcr->write_part_after_job = job->write_part_after_job;
+ if (jcr->RestoreBootstrap) {
+ free(jcr->RestoreBootstrap);
+Index: src/dird/dird_conf.c
+===================================================================
+--- src/dird/dird_conf.c (revision 5107)
++++ src/dird/dird_conf.c (working copy)
+@@ -295,6 +295,7 @@
+ {"enabled", store_bool, ITEM(res_job.enabled), 0, ITEM_DEFAULT, true},
+ {"spoolattributes",store_bool, ITEM(res_job.SpoolAttributes), 0, ITEM_DEFAULT, false},
+ {"spooldata", store_bool, ITEM(res_job.spool_data), 0, ITEM_DEFAULT, false},
++ {"spoolsize", store_size, ITEM(res_job.spool_size), 0, 0, 0},
+ {"rerunfailedlevels", store_bool, ITEM(res_job.rerun_failed_levels), 0, ITEM_DEFAULT, false},
+ {"prefermountedvolumes", store_bool, ITEM(res_job.PreferMountedVolumes), 0, ITEM_DEFAULT, true},
+ {"runbeforejob", store_short_runscript, ITEM(res_job.RunScripts), 0, 0, 0},
+Index: src/dird/dird_conf.h
+===================================================================
+--- src/dird/dird_conf.h (revision 5107)
++++ src/dird/dird_conf.h (working copy)
+@@ -380,6 +380,7 @@
+ utime_t RescheduleInterval; /* Reschedule interval */
+ utime_t JobRetention; /* job retention period in seconds */
+ uint32_t MaxConcurrentJobs; /* Maximum concurrent jobs */
++ int64_t spool_size; /* Size of spool file for this job */
+ int RescheduleTimes; /* Number of times to reschedule job */
+ bool RescheduleOnError; /* Set to reschedule on error */
+ bool PrefixLinks; /* prefix soft links with Where path */
+Index: src/stored/job.c
+===================================================================
+--- src/stored/job.c (revision 5107)
++++ src/stored/job.c (working copy)
+@@ -49,7 +49,7 @@
+ /* Requests from the Director daemon */
+ static char jobcmd[] = "JobId=%d job=%127s job_name=%127s client_name=%127s "
+ "type=%d level=%d FileSet=%127s NoAttr=%d SpoolAttr=%d FileSetMD5=%127s "
+- "SpoolData=%d WritePartAfterJob=%d PreferMountedVols=%d\n";
++ "SpoolData=%d SpoolSize=%s WritePartAfterJob=%d PreferMountedVols=%d\n";
+
+
+ /* Responses sent to Director daemon */
+@@ -73,6 +73,7 @@
+ {
+ int JobId;
+ char auth_key[100];
++ char spool_size[30];
+ BSOCK *dir = jcr->dir_bsock;
+ POOL_MEM job_name, client_name, job, fileset_name, fileset_md5;
+ int JobType, level, spool_attributes, no_attributes, spool_data;
+@@ -87,9 +88,9 @@
+ stat = sscanf(dir->msg, jobcmd, &JobId, job.c_str(), job_name.c_str(),
+ client_name.c_str(),
+ &JobType, &level, fileset_name.c_str(), &no_attributes,
+- &spool_attributes, fileset_md5.c_str(), &spool_data,
++ &spool_attributes, fileset_md5.c_str(), &spool_data, spool_size,
+ &write_part_after_job, &PreferMountedVols);
+- if (stat != 13) {
++ if (stat != 14) {
+ pm_strcpy(jcr->errmsg, dir->msg);
+ bnet_fsend(dir, BAD_job, stat, jcr->errmsg);
+ Dmsg1(100, ">dird: %s", dir->msg);
+@@ -124,6 +125,7 @@
+ jcr->no_attributes = no_attributes;
+ jcr->spool_attributes = spool_attributes;
+ jcr->spool_data = spool_data;
++ jcr->spool_size = str_to_int64(spool_size);
+ jcr->write_part_after_job = write_part_after_job;
+ jcr->fileset_md5 = get_pool_memory(PM_NAME);
+ pm_strcpy(jcr->fileset_md5, fileset_md5);
+Index: src/stored/acquire.c
+===================================================================
+--- src/stored/acquire.c (revision 5107)
++++ src/stored/acquire.c (working copy)
+@@ -609,7 +609,12 @@
+ if (dcr->attached_to_dev) {
+ detach_dcr_from_dev(dcr);
+ }
+- dcr->max_job_spool_size = dev->device->max_job_spool_size;
++ /* Use job spoolsize prior to device spoolsize*/
++ if (jcr->spool_size) {
++ dcr->max_job_spool_size = jcr->spool_size;
++ } else {
++ dcr->max_job_spool_size = dev->device->max_job_spool_size;
++ }
+ dcr->device = dev->device;
+ dcr->dev = dev;
+ attach_dcr_to_dev(dcr);
+Index: src/jcr.h
+===================================================================
+--- src/jcr.h (revision 5107)
++++ src/jcr.h (working copy)
+@@ -246,6 +246,7 @@
+ int replace; /* Replace option */
+ int NumVols; /* Number of Volume used in pool */
+ int reschedule_count; /* Number of times rescheduled */
++ int64_t spool_size; /* Spool size for this job */
+ bool spool_data; /* Spool data in SD */
+ bool acquired_resource_locks; /* set if resource locks acquired */
+ bool term_wait_inited; /* Set when cond var inited */
+@@ -323,6 +324,7 @@
+ bool spool_attributes; /* set if spooling attributes */
+ bool no_attributes; /* set if no attributes wanted */
+ bool spool_data; /* set to spool data */
++ int64_t spool_size; /* Spool size for this job */
+ int CurVol; /* Current Volume count */
+ DIRRES* director; /* Director resource */
+ alist *write_store; /* list of write storage devices sent by DIR */