]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/acquire.c
Fix for reused thread ids by FreeBSD + qfill command
[bacula/bacula] / bacula / src / stored / acquire.c
index 42ae4747ea5c2547fbad32b6f88fcf6d0364c180..98ac1eac9fc518d83971253ed62f5c9d23479042 100644 (file)
@@ -79,13 +79,13 @@ int acquire_device_for_read(JCR *jcr, DEVICE *dev, DEV_BLOCK *block)
        * If it is a tape, it checks the volume name 
        */
       for ( ; !(dev->state & ST_OPENED); ) {
-          Dmsg1(120, "bstored: open vol=%s\n", jcr->VolumeName);
-         if (open_dev(dev, jcr->VolumeName, READ_ONLY) < 0) {
-             Jmsg(jcr, M_FATAL, 0, _("Open device %s volume %s failed, ERR=%s\n"), 
-                dev_name(dev), jcr->VolumeName, strerror_dev(dev));
-            goto get_out;
-         }
-          Dmsg1(129, "open_dev %s OK\n", dev_name(dev));
+         Dmsg1(120, "bstored: open vol=%s\n", jcr->VolumeName);
+        if (open_dev(dev, jcr->VolumeName, READ_ONLY) < 0) {
+            Jmsg(jcr, M_FATAL, 0, _("Open device %s volume %s failed, ERR=%s\n"), 
+               dev_name(dev), jcr->VolumeName, strerror_dev(dev));
+           goto get_out;
+        }
+         Dmsg1(129, "open_dev %s OK\n", dev_name(dev));
       }
       dev->state &= ~ST_LABEL;          /* force reread of label */
       Dmsg0(200, "calling read-vol-label\n");
@@ -137,6 +137,8 @@ default_path:
 
    dev->state |= ST_READ;
    attach_jcr_to_device(dev, jcr);    /* attach jcr to device */
+   Jmsg(jcr, M_INFO, 0, _("Ready to read from volume \"%s\" on device %s.\n"),
+      jcr->VolumeName, dev_name(dev));
    if ((dev->state & ST_TAPE) && vol->start_file > 0) {
       Dmsg1(200, "====== Got start_file = %d\n", vol->start_file);
       Jmsg(jcr, M_INFO, 0, _("Forward spacing to file %d.\n"), vol->start_file);
@@ -265,9 +267,7 @@ int release_device(JCR *jcr, DEVICE *dev)
    if (dev->state & ST_READ) {
       dev->state &= ~ST_READ;        /* clear read bit */
       if (!dev_is_tape(dev) || !dev_cap(dev, CAP_ALWAYSOPEN)) {
-        if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) {
-           offline_dev(dev);
-        }
+        offline_or_rewind_dev(dev);
         close_dev(dev);
       }
       /******FIXME**** send read volume usage statistics to director */
@@ -284,24 +284,25 @@ int release_device(JCR *jcr, DEVICE *dev)
       }
       Dmsg1(100, "There are %d writers in release_device\n", dev->num_writers);
       if (dev->num_writers == 0) {
-         Dmsg0(100, "dir_create_jobmedia_record. Release\n");
-        dir_create_jobmedia_record(jcr);
-        if (dev_can_write(dev)) {
-           weof_dev(dev, 1);
+        /* If we have fully acquired the tape */
+        if (dev->state & ST_LABEL) {
+            Dmsg0(100, "dir_create_jobmedia_record. Release\n");
+           dir_create_jobmedia_record(jcr);
+           if (dev_can_write(dev)) {
+              weof_dev(dev, 1);
+           }
+           dev->VolCatInfo.VolCatFiles = dev->file;   /* set number of files */
+           dev->VolCatInfo.VolCatJobs++;              /* increment number of jobs */
+           /* Note! do volume update before close, which zaps VolCatInfo */
+            Dmsg0(200, "dir_update_vol_info. Release0\n");
+           dir_update_volume_info(jcr, &dev->VolCatInfo, 0); /* send Volume info to Director */
         }
-        dev->VolCatInfo.VolCatFiles = dev->file;   /* set number of files */
-        dev->VolCatInfo.VolCatJobs++;              /* increment number of jobs */
-        /* Note! do volume update before close, which zaps VolCatInfo */
-         Dmsg0(200, "dir_update_vol_info. Release0\n");
-        dir_update_volume_info(jcr, &dev->VolCatInfo, 0); /* send Volume info to Director */
 
         if (!dev_is_tape(dev) || !dev_cap(dev, CAP_ALWAYSOPEN)) {
-           if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) {
-              offline_dev(dev);
-           }
+           offline_or_rewind_dev(dev);
            close_dev(dev);
         }
-      } else {
+      } else if (dev->state & ST_LABEL) {
          Dmsg0(100, "dir_create_jobmedia_record. Release\n");
         dir_create_jobmedia_record(jcr);
          Dmsg0(200, "dir_update_vol_info. Release1\n");