]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/stored/dev.c
- Add check for df path for dvd_freespace
[bacula/bacula] / bacula / src / stored / dev.c
1 /*
2  *
3  *   dev.c  -- low level operations on device (storage device)
4  *
5  *              Kern Sibbald, MM
6  *
7  *     NOTE!!!! None of these routines are reentrant. You must
8  *        use lock_device() and unlock_device() at a higher level,
9  *        or use the xxx_device() equivalents.  By moving the
10  *        thread synchronization to a higher level, we permit
11  *        the higher level routines to "seize" the device and
12  *        to carry out operations without worrying about who
13  *        set what lock (i.e. race conditions).
14  *
15  *     Note, this is the device dependent code, and my have
16  *           to be modified for each system, but is meant to
17  *           be as "generic" as possible.
18  *
19  *     The purpose of this code is to develop a SIMPLE Storage
20  *     daemon. More complicated coding (double buffering, writer
21  *     thread, ...) is left for a later version.
22  *
23  *     Unfortunately, I have had to add more and more complication
24  *     to this code. This was not foreseen as noted above, and as
25  *     a consequence has lead to something more contorted than is
26  *     really necessary -- KES.  Note, this contortion has been
27  *     corrected to a large extent by a rewrite (Apr MMI).
28  *
29  *   Version $Id$
30  */
31 /*
32    Copyright (C) 2000-2005 Kern Sibbald
33
34    This program is free software; you can redistribute it and/or
35    modify it under the terms of the GNU General Public License
36    version 2 as amended with additional clauses defined in the
37    file LICENSE in the main source directory.
38
39    This program is distributed in the hope that it will be useful,
40    but WITHOUT ANY WARRANTY; without even the implied warranty of
41    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
42    the file LICENSE for additional details.
43
44  */
45
46 /*
47  * Handling I/O errors and end of tape conditions are a bit tricky.
48  * This is how it is currently done when writting.
49  * On either an I/O error or end of tape,
50  * we will stop writing on the physical device (no I/O recovery is
51  * attempted at least in this daemon). The state flag will be sent
52  * to include ST_EOT, which is ephimeral, and ST_WEOT, which is
53  * persistent. Lots of routines clear ST_EOT, but ST_WEOT is
54  * cleared only when the problem goes away.  Now when ST_WEOT
55  * is set all calls to write_block_to_device() call the fix_up
56  * routine. In addition, all threads are blocked
57  * from writing on the tape by calling lock_dev(), and thread other
58  * than the first thread to hit the EOT will block on a condition
59  * variable. The first thread to hit the EOT will continue to
60  * be able to read and write the tape (he sort of tunnels through
61  * the locking mechanism -- see lock_dev() for details).
62  *
63  * Now presumably somewhere higher in the chain of command
64  * (device.c), someone will notice the EOT condition and
65  * get a new tape up, get the tape label read, and mark
66  * the label for rewriting. Then this higher level routine
67  * will write the unwritten buffer to the new volume.
68  * Finally, he will release
69  * any blocked threads by doing a broadcast on the condition
70  * variable.  At that point, we should be totally back in
71  * business with no lost data.
72  */
73
74
75 #include "bacula.h"
76 #include "stored.h"
77
78 #ifndef O_NONBLOCK 
79 #define O_NONBLOCK 0
80 #endif
81
82 /* Forward referenced functions */
83 void set_os_device_parameters(DEVICE *dev);
84 static bool dev_get_os_pos(DEVICE *dev, struct mtget *mt_stat);
85 static char *mode_to_str(int mode);
86
87 /*
88  * Allocate and initialize the DEVICE structure
89  * Note, if dev is non-NULL, it is already allocated,
90  * thus we neither allocate it nor free it. This allows
91  * the caller to put the packet in shared memory.
92  *
93  *  Note, for a tape, the device->device_name is the device name
94  *     (e.g. /dev/nst0), and for a file, the device name
95  *     is the directory in which the file will be placed.
96  *
97  */
98 DEVICE *
99 init_dev(JCR *jcr, DEVRES *device)
100 {
101    struct stat statp;
102    bool tape, fifo;
103    int errstat;
104    DCR *dcr = NULL;
105    DEVICE *dev;
106
107    /* Check that device is available */
108    if (stat(device->device_name, &statp) < 0) {
109       berrno be;
110       Jmsg2(jcr, M_ERROR, 0, _("Unable to stat device %s: ERR=%s\n"), 
111          device->device_name, be.strerror());
112       return NULL;
113    }
114    
115    
116    tape = false;
117    fifo = false;
118    if (S_ISDIR(statp.st_mode)) {
119       tape = false;
120    } else if (S_ISCHR(statp.st_mode)) {
121       tape = true;
122    } else if (S_ISFIFO(statp.st_mode)) {
123       fifo = true;
124    } else if (!(device->cap_bits & CAP_REQMOUNT)) {
125       Jmsg2(jcr, M_ERROR, 0, _("%s is an unknown device type. Must be tape or directory\n"
126             " or have RequiresMount=yes for DVD. st_mode=%x\n"),
127          device->device_name, statp.st_mode);
128       return NULL;
129    }
130
131    dev = (DEVICE *)get_memory(sizeof(DEVICE));
132    memset(dev, 0, sizeof(DEVICE));
133    dev->state = ST_MALLOC;
134
135    /* Copy user supplied device parameters from Resource */
136    dev->dev_name = get_memory(strlen(device->device_name)+1);
137    pm_strcpy(dev->dev_name, device->device_name);
138    dev->prt_name = get_memory(strlen(device->device_name) + strlen(device->hdr.name) + 20);
139    /* We edit "Resource-name" (physical-name) */
140    Mmsg(dev->prt_name, "\"%s\" (%s)", device->hdr.name, device->device_name);
141    dev->capabilities = device->cap_bits;
142    dev->min_block_size = device->min_block_size;
143    dev->max_block_size = device->max_block_size;
144    dev->max_volume_size = device->max_volume_size;
145    dev->max_file_size = device->max_file_size;
146    dev->volume_capacity = device->volume_capacity;
147    dev->max_rewind_wait = device->max_rewind_wait;
148    dev->max_open_wait = device->max_open_wait;
149    dev->max_open_vols = device->max_open_vols;
150    dev->vol_poll_interval = device->vol_poll_interval;
151    dev->max_spool_size = device->max_spool_size;
152    dev->drive_index = device->drive_index;
153    dev->autoselect = device->autoselect;
154    if (tape) { /* No parts on tapes */
155       dev->max_part_size = 0;
156    }
157    else {
158       dev->max_part_size = device->max_part_size;
159    }
160    /* Sanity check */
161    if (dev->vol_poll_interval && dev->vol_poll_interval < 60) {
162       dev->vol_poll_interval = 60;
163    }
164    dev->device = device;
165
166    if (tape) {
167       dev->state |= ST_TAPE;
168    } else if (fifo) {
169       dev->state |= ST_FIFO;
170       dev->capabilities |= CAP_STREAM; /* set stream device */
171    } else {
172       dev->state |= ST_FILE;
173    }
174
175    /* If the device requires mount :
176     * - Check that the mount point is available 
177     * - Check that (un)mount commands are defined
178     */
179    if (dev->is_file() && dev->requires_mount()) {
180       if (stat(device->mount_point, &statp) < 0) {
181          berrno be;
182          dev->dev_errno = errno;
183          Jmsg2(jcr, M_ERROR, 0, _("Unable to stat mount point %s: ERR=%s\n"), 
184             device->mount_point, be.strerror());
185          return NULL;
186       }
187       if (!device->mount_command || !device->unmount_command) {
188          Jmsg0(jcr, M_ERROR_TERM, 0, _("Mount and unmount commands must defined for a device which requires mount.\n"));
189       }
190       if (!device->write_part_command) {
191          Jmsg0(jcr, M_ERROR_TERM, 0, _("Write part command must be defined for a device which requires mount.\n"));
192       }
193       dev->state |= ST_DVD;
194    }
195
196    if (dev->max_block_size > 1000000) {
197       Jmsg3(jcr, M_ERROR, 0, _("Block size %u on device %s is too large, using default %u\n"),
198          dev->max_block_size, dev->print_name(), DEFAULT_BLOCK_SIZE);
199       dev->max_block_size = 0;
200    }
201    if (dev->max_block_size % TAPE_BSIZE != 0) {
202       Jmsg2(jcr, M_WARNING, 0, _("Max block size %u not multiple of device %s block size.\n"),
203          dev->max_block_size, dev->print_name());
204    }
205
206    dev->errmsg = get_pool_memory(PM_EMSG);
207    *dev->errmsg = 0;
208
209    if ((errstat = pthread_mutex_init(&dev->mutex, NULL)) != 0) {
210       berrno be;
211       dev->dev_errno = errstat;
212       Mmsg1(dev->errmsg, _("Unable to init mutex: ERR=%s\n"), be.strerror(errstat));
213       Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg);
214    }
215    if ((errstat = pthread_cond_init(&dev->wait, NULL)) != 0) {
216       berrno be;
217       dev->dev_errno = errstat;
218       Mmsg1(dev->errmsg, _("Unable to init cond variable: ERR=%s\n"), be.strerror(errstat));
219       Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg);
220    }
221    if ((errstat = pthread_cond_init(&dev->wait_next_vol, NULL)) != 0) {
222       berrno be;
223       dev->dev_errno = errstat;
224       Mmsg1(dev->errmsg, _("Unable to init cond variable: ERR=%s\n"), be.strerror(errstat));
225       Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg);
226    }
227    if ((errstat = pthread_mutex_init(&dev->spool_mutex, NULL)) != 0) {
228       berrno be;
229       dev->dev_errno = errstat;
230       Mmsg1(dev->errmsg, _("Unable to init mutex: ERR=%s\n"), be.strerror(errstat));
231       Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg);
232    }
233    if ((errstat = rwl_init(&dev->lock)) != 0) {
234       berrno be;
235       dev->dev_errno = errstat;
236       Mmsg1(dev->errmsg, _("Unable to init mutex: ERR=%s\n"), be.strerror(errstat));
237       Jmsg0(jcr, M_ERROR_TERM, 0, dev->errmsg);
238    }
239
240    dev->fd = -1;
241    dev->attached_dcrs = New(dlist(dcr, &dcr->dev_link));
242    Dmsg2(29, "init_dev: tape=%d dev_name=%s\n", dev->is_tape(), dev->dev_name);
243    
244    return dev;
245 }
246
247 /*
248  * Open the device with the operating system and
249  * initialize buffer pointers.
250  *
251  * Returns:  -1  on error
252  *           fd  on success
253  *
254  * Note, for a tape, the VolName is the name we give to the
255  *    volume (not really used here), but for a file, the
256  *    VolName represents the name of the file to be created/opened.
257  *    In the case of a file, the full name is the device name
258  *    (archive_name) with the VolName concatenated.
259  */
260 int
261 DEVICE::open(DCR *dcr, int omode)
262 {
263    if (is_open()) {
264       if (openmode == omode) {
265          return fd;
266       } else {
267         ::close(fd); /* use system close so correct mode will be used on open */
268       }
269    }
270   if (dcr) {
271      bstrncpy(VolCatInfo.VolCatName, dcr->VolumeName, sizeof(VolCatInfo.VolCatName));
272   }
273
274    Dmsg4(29, "open dev: tape=%d dev_name=%s vol=%s mode=%s\n", is_tape(),
275          print_name(), VolCatInfo.VolCatName, mode_to_str(omode));
276    state &= ~(ST_LABEL|ST_APPEND|ST_READ|ST_EOT|ST_WEOT|ST_EOF);
277    label_type = B_BACULA_LABEL;
278    if (is_tape() || is_fifo()) {
279       open_tape_device(omode);
280    } else if (is_dvd()) {
281       Dmsg1(100, "call open_dvd_device mode=%s\n", mode_to_str(omode));
282       open_dvd_device(dcr, omode);
283    } else {
284       Dmsg1(100, "call open_file_device mode=%s\n", mode_to_str(omode));
285       open_file_device(omode);
286    }
287    return fd;
288 }
289
290 void DEVICE::set_mode(int new_mode) 
291 {
292    switch (new_mode) {
293    case CREATE_READ_WRITE:
294       mode = O_CREAT | O_RDWR | O_BINARY;
295       break;
296    case OPEN_READ_WRITE:
297       if (is_dvd() || is_file()) {
298          mode = O_CREAT | O_RDWR | O_BINARY;
299       } else {
300          mode = O_RDWR | O_BINARY;
301       }
302       break;
303    case OPEN_READ_ONLY:
304       mode = O_RDONLY | O_BINARY;
305       break;
306    case OPEN_WRITE_ONLY:
307       mode = O_WRONLY | O_BINARY;
308       break;
309    default:
310       Emsg0(M_ABORT, 0, _("Illegal mode given to open dev.\n"));
311    }
312 }
313
314 void DEVICE::open_tape_device(int omode) 
315 {
316    int nonblocking = 0;;
317    file_size = 0;
318    int timeout;
319    int ioerrcnt = 10;
320    Dmsg0(29, "open dev: device is tape\n");
321
322    set_mode(omode);
323    timeout = max_open_wait;
324    errno = 0;
325    if (open_nowait) {
326        /* Set wait counters to zero for no wait */
327        timeout = ioerrcnt = 0;
328        /* Open drive in non-block mode */
329        nonblocking = O_NONBLOCK;
330    }
331    if (is_fifo() && timeout) {
332       /* Set open timer */
333       tid = start_thread_timer(pthread_self(), timeout);
334    }
335    /* If busy retry each second for max_open_wait seconds */
336 open_again:
337    Dmsg1(500, "Try open %s\n", print_name());
338    /* Use system open() */
339    while ((fd = ::open(dev_name, mode, MODE_RW+nonblocking)) < 0) {
340       berrno be;
341       Dmsg2(500, "Open error errno=%d ERR=%s\n", errno, be.strerror());
342       if (errno == EINTR || errno == EAGAIN) {
343          Dmsg0(500, "Continue open\n");
344          continue;
345       }
346       /* Busy wait for specified time (default = 5 mins) */
347       if (errno == EBUSY && timeout-- > 0) {
348          Dmsg2(100, "Device %s busy. ERR=%s\n", print_name(), be.strerror());
349          bmicrosleep(1, 0);
350          continue;
351       }
352       /* IO error (no volume) try 10 times every 6 seconds */
353       if (errno == EIO && ioerrcnt-- > 0) {
354          bmicrosleep(5, 0);
355          Dmsg0(500, "Continue open\n");
356          continue;
357       }
358       dev_errno = errno;
359       Mmsg2(errmsg, _("Unable to open device %s: ERR=%s\n"),
360             print_name(), be.strerror(dev_errno));
361       /* Stop any open timer we set */
362       if (tid) {
363          stop_thread_timer(tid);
364          tid = 0;
365       }
366       Emsg0(M_FATAL, 0, errmsg);
367       break;
368    }
369    if (fd >= 0) {
370       /* If opened in non-block mode, close it an open it normally */
371       if (nonblocking) {
372          nonblocking = 0;
373          ::close(fd);                /* use system close() */
374          goto open_again;
375       }
376       openmode = omode;              /* save open mode */
377       Dmsg2(100, "openmode=%d %s\n", openmode, mode_to_str(openmode));
378       dev_errno = 0;
379       set_opened();
380       use_count = 1;
381       update_pos_dev(this);                /* update position */
382       set_os_device_parameters(this);      /* do system dependent stuff */
383       Dmsg0(500, "Open OK\n");
384    }
385    /* Stop any open() timer we started */
386    if (tid) {
387       stop_thread_timer(tid);
388       tid = 0;
389    }
390    Dmsg1(29, "open dev: tape %d opened\n", fd);
391 }
392
393 /*
394  * Open a file device
395  */
396 void DEVICE::open_file_device(int omode) 
397 {
398    POOL_MEM archive_name(PM_FNAME);
399
400    /*
401     * Handle opening of File Archive (not a tape)
402     */     
403    Dmsg3(29, "Enter: open_file_dev: %s dev=%s mode=%s\n", is_dvd()?"DVD":"disk",
404          archive_name.c_str(), mode_to_str(omode));
405
406    if (VolCatInfo.VolCatName[0] == 0) {
407       Mmsg(errmsg, _("Could not open file device %s. No Volume name given.\n"),
408          print_name());
409       fd = -1;
410       return;
411    }
412
413    pm_strcpy(archive_name, dev_name);
414    if (archive_name.c_str()[strlen(archive_name.c_str())-1] != '/') {
415       pm_strcat(archive_name, "/");
416    }
417    pm_strcat(archive_name, VolCatInfo.VolCatName);
418          
419    Dmsg3(29, "open dev: %s dev=%s mode=%s\n", is_dvd()?"DVD":"disk",
420          archive_name.c_str(), mode_to_str(omode));
421    openmode = omode;
422    Dmsg2(100, "openmode=%d %s\n", openmode, mode_to_str(openmode));
423    
424    set_mode(omode);
425    /* If creating file, give 0640 permissions */
426    Dmsg3(29, "mode=%s open(%s, 0x%x, 0640)\n", mode_to_str(omode), 
427          archive_name.c_str(), mode);
428    /* Use system open() */
429    if ((fd = ::open(archive_name.c_str(), mode, 0640)) < 0) {
430       berrno be;
431       dev_errno = errno;
432       Mmsg2(errmsg, _("Could not open: %s, ERR=%s\n"), archive_name.c_str(), 
433             be.strerror());
434       Dmsg1(29, "open failed: %s", errmsg);
435       Emsg0(M_FATAL, 0, errmsg);
436    } else {
437       dev_errno = 0;
438       set_opened();
439       use_count = 1;
440       update_pos_dev(this);                /* update position */
441    }
442    Dmsg5(29, "open dev: %s fd=%d opened, part=%d/%d, part_size=%u\n", 
443       is_dvd()?"DVD":"disk", fd, part, num_parts, 
444       part_size);
445 }
446
447 /*
448  * Open a DVD device. N.B. at this point, dcr->VolCatInfo.VolCatName
449  *  has the desired Volume name, but there is NO assurance that
450  *  any other field of VolCatInfo is correct.
451  */
452 void DEVICE::open_dvd_device(DCR *dcr, int omode) 
453 {
454    POOL_MEM archive_name(PM_FNAME);
455    struct stat filestat;
456
457    /*
458     * Handle opening of DVD Volume
459     */     
460    Dmsg3(29, "Enter: open_dvd_dev: %s dev=%s mode=%s\n", is_dvd()?"DVD":"disk",
461          archive_name.c_str(), mode_to_str(omode));
462
463    if (VolCatInfo.VolCatName[0] == 0) {
464       Mmsg(errmsg, _("Could not open file device %s. No Volume name given.\n"),
465          print_name());
466       fd = -1;
467       return;
468    }
469
470    if (part == 0) {
471       file_size = 0;
472    }
473    part_size = 0;
474    
475
476    if (!mount_dev(this, 1)) {
477       Mmsg(errmsg, _("Could not mount device %s.\n"), print_name());
478       Emsg0(M_FATAL, 0, errmsg);
479       fd = -1;
480       return;
481    }
482          
483    Dmsg5(29, "open dev: %s dev=%s mode=%s part=%d npart=%d\n", 
484       is_dvd()?"DVD":"disk", archive_name.c_str(), mode_to_str(omode),
485       part, num_parts);
486    openmode = omode;
487    Dmsg2(100, "openmode=%d %s\n", openmode, mode_to_str(openmode));
488    
489    /*
490     * If we are not trying to access the last part, set mode to 
491     *   OPEN_READ_ONLY as writing would be an error.
492     */
493    if (part < num_parts) {
494       omode = OPEN_READ_ONLY;
495    }
496    set_mode(omode);
497
498    /* 
499     * If we are opening it read-only, it is *probably* on the
500     *   DVD, so try the DVD first, otherwise look in the spool dir.
501     */
502    if (omode == OPEN_READ_ONLY) {
503       make_mounted_dvd_filename(this, archive_name);
504    } else {
505       make_spooled_dvd_filename(this, archive_name);
506    }
507
508    /* If creating file, give 0640 permissions */
509    Dmsg3(29, "mode=%s open(%s, 0x%x, 0640)\n", mode_to_str(omode), 
510          archive_name.c_str(), mode);
511    /* Use system open() */
512    if ((fd = ::open(archive_name.c_str(), mode, 0640)) < 0) {
513       berrno be;
514       dev_errno = errno;
515       Mmsg2(errmsg, _("Could not open: %s, ERR=%s\n"), archive_name.c_str(), 
516             be.strerror());
517       Dmsg1(29, "open failed: %s", errmsg);
518       if (omode == OPEN_READ_ONLY) {
519          make_spooled_dvd_filename(this, archive_name);
520         /* Use system open() */
521          fd = ::open(archive_name.c_str(), mode, 0640);  /* try on spool */
522       }
523    }
524    Dmsg1(100, "after open fd=%d\n", fd);
525    if (fd >= 0) {
526       /* Get size of file */
527       if (fstat(fd, &filestat) < 0) {
528          berrno be;
529          dev_errno = errno;
530          Mmsg2(errmsg, _("Could not fstat: %s, ERR=%s\n"), archive_name.c_str(), 
531                be.strerror());
532          Dmsg1(29, "open failed: %s", errmsg);
533          /* Use system close() */
534          ::close(fd);
535          fd = -1;
536       } else {
537          part_size = filestat.st_size;
538          dev_errno = 0;
539          set_opened();
540          use_count = 1;
541          update_pos_dev(this);                /* update position */
542          /* Check if just created Volume  part */
543          if (omode == OPEN_READ_WRITE && (part == 0 || part_size == 0)) {
544             part++;
545             num_parts = part;
546             VolCatInfo.VolCatParts = num_parts;
547          } else {
548             if (part == 0) {             /* we must have opened the first part */
549                part++;
550             }
551          }
552       }
553    }
554 }
555
556
557 #ifdef debug_tracing
558 #undef rewind_dev
559 bool _rewind_dev(char *file, int line, DEVICE *dev)
560 {
561    Dmsg3(100, "rewind_dev fd=%d called from %s:%d\n", dev->fd, file, line);
562    return rewind_dev(dev);
563 }
564 #endif
565
566 /*
567  * Rewind the device.
568  *  Returns: true  on success
569  *           false on failure
570  */
571 bool rewind_dev(DEVICE *dev)
572 {
573    struct mtop mt_com;
574    unsigned int i;
575
576    Dmsg2(29, "rewind_dev fd=%d %s\n", dev->fd, dev->print_name());
577    if (dev->fd < 0) {
578       dev->dev_errno = EBADF;
579       Mmsg1(dev->errmsg, _("Bad call to rewind_dev. Device %s not open\n"),
580             dev->print_name());
581       Emsg0(M_ABORT, 0, dev->errmsg);
582       return false;
583    }
584    dev->state &= ~(ST_EOT|ST_EOF|ST_WEOT);  /* remove EOF/EOT flags */
585    dev->block_num = dev->file = 0;
586    dev->file_size = 0;
587    dev->file_addr = 0;
588    if (dev->is_tape()) {
589       mt_com.mt_op = MTREW;
590       mt_com.mt_count = 1;
591       /* If we get an I/O error on rewind, it is probably because
592        * the drive is actually busy. We loop for (about 5 minutes)
593        * retrying every 5 seconds.
594        */
595       for (i=dev->max_rewind_wait; ; i -= 5) {
596          if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
597             berrno be;
598             clrerror_dev(dev, MTREW);
599             if (i == dev->max_rewind_wait) {
600                Dmsg1(200, "Rewind error, %s. retrying ...\n", be.strerror());
601             }
602             if (dev->dev_errno == EIO && i > 0) {
603                Dmsg0(200, "Sleeping 5 seconds.\n");
604                bmicrosleep(5, 0);
605                continue;
606             }
607             Mmsg2(dev->errmsg, _("Rewind error on %s. ERR=%s.\n"),
608                dev->print_name(), be.strerror());
609             return false;
610          }
611          break;
612       }
613    } else if (dev->is_file()) {      
614       if (lseek_dev(dev, (off_t)0, SEEK_SET) < 0) {
615          berrno be;
616          dev->dev_errno = errno;
617          Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
618             dev->print_name(), be.strerror());
619          return false;
620       }
621    }
622    return true;
623 }
624
625 void DEVICE::block(int why)
626 {
627    lock_device(this);
628    block_device(this, why);
629    V(mutex);
630 }
631
632 void DEVICE::unblock()
633 {  
634    P(mutex);
635    unblock_device(this);
636    V(mutex);
637 }
638
639 const char *DEVICE::print_blocked() const 
640 {
641    switch (dev_blocked) {
642    case BST_NOT_BLOCKED:
643       return "BST_NOT_BLOCKED";
644    case BST_UNMOUNTED:
645       return "BST_UNMOUNTED";
646    case BST_WAITING_FOR_SYSOP:
647       return "BST_WAITING_FOR_SYSOP";
648    case BST_DOING_ACQUIRE:
649       return "BST_DOING_ACQUIRE";
650    case BST_WRITING_LABEL:
651       return "BST_WRITING_LABEL";
652    case BST_UNMOUNTED_WAITING_FOR_SYSOP:
653       return "BST_UNMOUNTED_WAITING_FOR_SYSOP";
654    case BST_MOUNT:
655       return "BST_MOUNT";
656    default:
657       return "unknown blocked code";
658    }
659 }
660
661 /*
662  * Called to indicate that we have just read an
663  *  EOF from the device.
664  */
665 void DEVICE::set_ateof() 
666
667    set_eof();
668    file++;
669    file_addr = 0;
670    file_size = 0;
671    block_num = 0;
672 }
673
674 /*
675  * Called to indicate we are now at the end of the tape, and
676  *   writing is not possible.
677  */
678 void DEVICE::set_ateot() 
679 {
680    /* Make tape effectively read-only */
681    state |= (ST_EOF|ST_EOT|ST_WEOT);
682    clear_append();
683 }
684
685 /*
686  * Position device to end of medium (end of data)
687  *  Returns: true  on succes
688  *           false on error
689  */
690 bool
691 eod_dev(DEVICE *dev)
692 {
693    struct mtop mt_com;
694    struct mtget mt_stat;
695    bool ok = true;
696    off_t pos;
697
698    if (dev->fd < 0) {
699       dev->dev_errno = EBADF;
700       Mmsg1(dev->errmsg, _("Bad call to eod_dev. Device %s not open\n"),
701             dev->print_name());
702       return false;
703    }
704
705 #if defined (__digital__) && defined (__unix__)
706    return dev->fsf(dev->VolCatInfo.VolCatFiles);
707 #endif
708
709    Dmsg0(29, "eod_dev\n");
710    if (dev->at_eot()) {
711       return true;
712    }
713    dev->state &= ~(ST_EOF);  /* remove EOF flags */
714    dev->block_num = dev->file = 0;
715    dev->file_size = 0;
716    dev->file_addr = 0;
717    if (dev->state & (ST_FIFO | ST_PROG)) {
718       return true;
719    }
720    if (!dev->is_tape()) {
721       pos = lseek_dev(dev, (off_t)0, SEEK_END);
722 //    Dmsg1(100, "====== Seek to %lld\n", pos);
723       if (pos >= 0) {
724          update_pos_dev(dev);
725          dev->state |= ST_EOT;
726          return true;
727       }
728       dev->dev_errno = errno;
729       berrno be;
730       Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
731              dev->print_name(), be.strerror());
732       return false;
733    }
734 #ifdef MTEOM
735    if (dev_cap(dev, CAP_FASTFSF) && !dev_cap(dev, CAP_EOM)) {
736       Dmsg0(100,"Using FAST FSF for EOM\n");
737       /* If unknown position, rewind */
738       if (!dev_get_os_pos(dev, &mt_stat)) {
739         if (!rewind_dev(dev)) {
740           return false;
741         }
742       }
743       mt_com.mt_op = MTFSF;
744       /*
745        * ***FIXME*** fix code to handle case that INT16_MAX is
746        *   not large enough.
747        */
748       mt_com.mt_count = INT16_MAX;    /* use big positive number */
749       if (mt_com.mt_count < 0) {
750          mt_com.mt_count = INT16_MAX; /* brain damaged system */
751       }
752    }
753
754    if (dev_cap(dev, CAP_MTIOCGET) && (dev_cap(dev, CAP_FASTFSF) || dev_cap(dev, CAP_EOM))) {
755       if (dev_cap(dev, CAP_EOM)) {
756          Dmsg0(100,"Using EOM for EOM\n");
757          mt_com.mt_op = MTEOM;
758          mt_com.mt_count = 1;
759       }
760
761       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
762          berrno be;
763          clrerror_dev(dev, mt_com.mt_op);
764          Dmsg1(50, "ioctl error: %s\n", be.strerror());
765          update_pos_dev(dev);
766          Mmsg2(dev->errmsg, _("ioctl MTEOM error on %s. ERR=%s.\n"),
767             dev->print_name(), be.strerror());
768          return false;
769       }
770
771       if (!dev_get_os_pos(dev, &mt_stat)) {
772          berrno be;
773          clrerror_dev(dev, -1);
774          Mmsg2(dev->errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"),
775             dev->print_name(), be.strerror());
776          return false;
777       }
778       Dmsg2(100, "EOD file=%d block=%d\n", mt_stat.mt_fileno, mt_stat.mt_blkno);
779       dev->set_ateof();
780       dev->file = mt_stat.mt_fileno;
781    } else {
782 #else
783    {
784 #endif
785       /*
786        * Rewind then use FSF until EOT reached
787        */
788       if (!rewind_dev(dev)) {
789          return false;
790       }
791       /*
792        * Move file by file to the end of the tape
793        */
794       int file_num;
795       for (file_num=dev->file; !dev->at_eot(); file_num++) {
796          Dmsg0(200, "eod_dev: doing fsf 1\n");
797          if (!dev->fsf(1)) {
798             Dmsg0(200, "fsf error.\n");
799             return false;
800          }
801          /*
802           * Avoid infinite loop. ***FIXME*** possibly add code
803           *   to set EOD or to turn off CAP_FASTFSF if on.
804           */
805          if (file_num == (int)dev->file) {
806             struct mtget mt_stat;
807             Dmsg1(100, "fsf did not advance from file %d\n", file_num);
808             if (dev_get_os_pos(dev, &mt_stat)) {
809                Dmsg2(100, "Adjust file from %d to %d\n", dev->file , mt_stat.mt_fileno);
810                dev->set_ateof();
811                dev->file = mt_stat.mt_fileno;
812             }
813             return false;
814          }
815       }
816    }
817    /*
818     * Some drivers leave us after second EOF when doing
819     * MTEOM, so we must backup so that appending overwrites
820     * the second EOF.
821     */
822    if (dev_cap(dev, CAP_BSFATEOM)) {
823       struct mtget mt_stat;
824       /* Backup over EOF */
825       ok = bsf_dev(dev, 1);
826       /* If BSF worked and fileno is known (not -1), set file */
827       if (dev_get_os_pos(dev, &mt_stat)) {
828          Dmsg2(100, "BSFATEOF adjust file from %d to %d\n", dev->file , mt_stat.mt_fileno);
829          dev->file = mt_stat.mt_fileno;
830       } else {
831          dev->file++;                 /* wing it -- not correct on all OSes */
832       }
833    } else {
834       update_pos_dev(dev);                   /* update position */
835    }
836    Dmsg1(200, "EOD dev->file=%d\n", dev->file);
837    return ok;
838 }
839
840 /*
841  * Set the position of the device -- only for files
842  *   For other devices, there is no generic way to do it.
843  *  Returns: true  on succes
844  *           false on error
845  */
846 bool update_pos_dev(DEVICE *dev)
847 {
848    off_t pos;
849    bool ok = true;
850
851    if (dev->fd < 0) {
852       dev->dev_errno = EBADF;
853       Mmsg0(dev->errmsg, _("Bad device call. Device not open\n"));
854       Emsg0(M_FATAL, 0, dev->errmsg);
855       return false;
856    }
857
858    /* Find out where we are */
859    if (dev->is_file()) {
860       dev->file = 0;
861       dev->file_addr = 0;
862       pos = lseek_dev(dev, (off_t)0, SEEK_CUR);
863       if (pos < 0) {
864          berrno be;
865          dev->dev_errno = errno;
866          Pmsg1(000, "Seek error: ERR=%s\n", be.strerror());
867          Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
868             dev->print_name(), be.strerror());
869          ok = false;
870       } else {
871          dev->file_addr = pos;
872       }
873    }
874    return ok;
875 }
876
877
878 /*
879  * Return the status of the device.  This was meant
880  * to be a generic routine. Unfortunately, it doesn't
881  * seem possible (at least I do not know how to do it
882  * currently), which means that for the moment, this
883  * routine has very little value.
884  *
885  *   Returns: status
886  */
887 uint32_t status_dev(DEVICE *dev)
888 {
889    struct mtget mt_stat;
890    uint32_t stat = 0;
891
892    if (dev->state & (ST_EOT | ST_WEOT)) {
893       stat |= BMT_EOD;
894       Pmsg0(-20, " EOD");
895    }
896    if (dev->state & ST_EOF) {
897       stat |= BMT_EOF;
898       Pmsg0(-20, " EOF");
899    }
900    if (dev->is_tape()) {
901       stat |= BMT_TAPE;
902       Pmsg0(-20," Bacula status:");
903       Pmsg2(-20," file=%d block=%d\n", dev->file, dev->block_num);
904       if (ioctl(dev->fd, MTIOCGET, (char *)&mt_stat) < 0) {
905          berrno be;
906          dev->dev_errno = errno;
907          Mmsg2(dev->errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"),
908             dev->print_name(), be.strerror());
909          return 0;
910       }
911       Pmsg0(-20, " Device status:");
912
913 #if defined(HAVE_LINUX_OS)
914       if (GMT_EOF(mt_stat.mt_gstat)) {
915          stat |= BMT_EOF;
916          Pmsg0(-20, " EOF");
917       }
918       if (GMT_BOT(mt_stat.mt_gstat)) {
919          stat |= BMT_BOT;
920          Pmsg0(-20, " BOT");
921       }
922       if (GMT_EOT(mt_stat.mt_gstat)) {
923          stat |= BMT_EOT;
924          Pmsg0(-20, " EOT");
925       }
926       if (GMT_SM(mt_stat.mt_gstat)) {
927          stat |= BMT_SM;
928          Pmsg0(-20, " SM");
929       }
930       if (GMT_EOD(mt_stat.mt_gstat)) {
931          stat |= BMT_EOD;
932          Pmsg0(-20, " EOD");
933       }
934       if (GMT_WR_PROT(mt_stat.mt_gstat)) {
935          stat |= BMT_WR_PROT;
936          Pmsg0(-20, " WR_PROT");
937       }
938       if (GMT_ONLINE(mt_stat.mt_gstat)) {
939          stat |= BMT_ONLINE;
940          Pmsg0(-20, " ONLINE");
941       }
942       if (GMT_DR_OPEN(mt_stat.mt_gstat)) {
943          stat |= BMT_DR_OPEN;
944          Pmsg0(-20, " DR_OPEN");
945       }
946       if (GMT_IM_REP_EN(mt_stat.mt_gstat)) {
947          stat |= BMT_IM_REP_EN;
948          Pmsg0(-20, " IM_REP_EN");
949       }
950 #endif /* !SunOS && !OSF */
951       if (dev_cap(dev, CAP_MTIOCGET)) {
952          Pmsg2(-20, " file=%d block=%d\n", mt_stat.mt_fileno, mt_stat.mt_blkno);
953       } else {
954          Pmsg2(-20, " file=%d block=%d\n", -1, -1);
955       }
956    } else {
957       stat |= BMT_ONLINE | BMT_BOT;
958    }
959    return stat;
960 }
961
962
963 /*
964  * Load medium in device
965  *  Returns: true  on success
966  *           false on failure
967  */
968 bool load_dev(DEVICE *dev)
969 {
970 #ifdef MTLOAD
971    struct mtop mt_com;
972 #endif
973
974    if (dev->fd < 0) {
975       dev->dev_errno = EBADF;
976       Mmsg0(dev->errmsg, _("Bad call to load_dev. Device not open\n"));
977       Emsg0(M_FATAL, 0, dev->errmsg);
978       return false;
979    }
980    if (!(dev->is_tape())) {
981       return true;
982    }
983 #ifndef MTLOAD
984    Dmsg0(200, "stored: MTLOAD command not available\n");
985    berrno be;
986    dev->dev_errno = ENOTTY;           /* function not available */
987    Mmsg2(dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"),
988          dev->print_name(), be.strerror());
989    return false;
990 #else
991
992    dev->block_num = dev->file = 0;
993    dev->file_size = 0;
994    dev->file_addr = 0;
995    mt_com.mt_op = MTLOAD;
996    mt_com.mt_count = 1;
997    if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
998       berrno be;
999       dev->dev_errno = errno;
1000       Mmsg2(dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"),
1001          dev->print_name(), be.strerror());
1002       return false;
1003    }
1004    return true;
1005 #endif
1006 }
1007
1008 /*
1009  * Rewind device and put it offline
1010  *  Returns: true  on success
1011  *           false on failure
1012  */
1013 bool offline_dev(DEVICE *dev)
1014 {
1015    struct mtop mt_com;
1016
1017    if (dev->fd < 0) {
1018       dev->dev_errno = EBADF;
1019       Mmsg0(dev->errmsg, _("Bad call to offline_dev. Device not open\n"));
1020       Emsg0(M_FATAL, 0, dev->errmsg);
1021       return false;
1022    }
1023    if (!(dev->is_tape())) {
1024       return true;
1025    }
1026
1027    dev->state &= ~(ST_APPEND|ST_READ|ST_EOT|ST_EOF|ST_WEOT);  /* remove EOF/EOT flags */
1028    dev->block_num = dev->file = 0;
1029    dev->file_size = 0;
1030    dev->file_addr = 0;
1031    dev->part = 0;
1032 #ifdef MTUNLOCK
1033    mt_com.mt_op = MTUNLOCK;
1034    mt_com.mt_count = 1;
1035    ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1036 #endif
1037    mt_com.mt_op = MTOFFL;
1038    mt_com.mt_count = 1;
1039    if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1040       berrno be;
1041       dev->dev_errno = errno;
1042       Mmsg2(dev->errmsg, _("ioctl MTOFFL error on %s. ERR=%s.\n"),
1043          dev->print_name(), be.strerror());
1044       return false;
1045    }
1046    Dmsg1(100, "Offlined device %s\n", dev->print_name());
1047    return true;
1048 }
1049
1050 bool offline_or_rewind_dev(DEVICE *dev)
1051 {
1052    if (dev->fd < 0) {
1053       return false;
1054    }
1055    if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) {
1056       return offline_dev(dev);
1057    } else {
1058    /*
1059     * Note, this rewind probably should not be here (it wasn't
1060     *  in prior versions of Bacula), but on FreeBSD, this is
1061     *  needed in the case the tape was "frozen" due to an error
1062     *  such as backspacing after writing and EOF. If it is not
1063     *  done, all future references to the drive get and I/O error.
1064     */
1065       clrerror_dev(dev, MTREW);
1066       return rewind_dev(dev);
1067    }
1068 }
1069
1070 /*
1071  * Foward space a file
1072  *   Returns: true  on success
1073  *            false on failure
1074  */
1075 bool DEVICE::fsf(int num)
1076 {
1077    struct mtget mt_stat;
1078    struct mtop mt_com;
1079    int stat = 0;
1080
1081    if (fd < 0) {
1082       dev_errno = EBADF;
1083       Mmsg0(errmsg, _("Bad call to fsf_dev. Device not open\n"));
1084       Emsg0(M_FATAL, 0, errmsg);
1085       return false;
1086    }
1087
1088    if (!is_tape()) {
1089       return true;
1090    }
1091    if (at_eot()) {
1092       dev_errno = 0;
1093       Mmsg1(errmsg, _("Device %s at End of Tape.\n"), print_name());
1094       return false;
1095    }
1096    if (at_eof()) {
1097       Dmsg0(200, "ST_EOF set on entry to FSF\n");
1098    }
1099
1100    Dmsg0(100, "fsf\n");
1101    block_num = 0;
1102    /*
1103     * If Fast forward space file is set, then we
1104     *  use MTFSF to forward space and MTIOCGET
1105     *  to get the file position. We assume that
1106     *  the SCSI driver will ensure that we do not
1107     *  forward space past the end of the medium.
1108     */
1109    if (dev_cap(this, CAP_FSF) && dev_cap(this, CAP_MTIOCGET) && dev_cap(this, CAP_FASTFSF)) {
1110       mt_com.mt_op = MTFSF;
1111       mt_com.mt_count = num;
1112       stat = ioctl(fd, MTIOCTOP, (char *)&mt_com);
1113       if (stat < 0 || !dev_get_os_pos(this, &mt_stat)) {
1114          berrno be;
1115          set_eot();
1116          Dmsg0(200, "Set ST_EOT\n");
1117          clrerror_dev(this, MTFSF);
1118          Mmsg2(errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"),
1119             print_name(), be.strerror());
1120          Dmsg1(200, "%s", errmsg);
1121          return false;
1122       }
1123       Dmsg2(200, "fsf file=%d block=%d\n", mt_stat.mt_fileno, mt_stat.mt_blkno);
1124       set_ateof();
1125       file = mt_stat.mt_fileno;
1126       return true;
1127
1128    /*
1129     * Here if CAP_FSF is set, and virtually all drives
1130     *  these days support it, we read a record, then forward
1131     *  space one file. Using this procedure, which is slow,
1132     *  is the only way we can be sure that we don't read
1133     *  two consecutive EOF marks, which means End of Data.
1134     */
1135    } else if (dev_cap(this, CAP_FSF)) {
1136       POOLMEM *rbuf;
1137       int rbuf_len;
1138       Dmsg0(200, "FSF has cap_fsf\n");
1139       if (max_block_size == 0) {
1140          rbuf_len = DEFAULT_BLOCK_SIZE;
1141       } else {
1142          rbuf_len = max_block_size;
1143       }
1144       rbuf = get_memory(rbuf_len);
1145       mt_com.mt_op = MTFSF;
1146       mt_com.mt_count = 1;
1147       while (num-- && !at_eot()) {
1148          Dmsg0(100, "Doing read before fsf\n");
1149          if ((stat = read(fd, (char *)rbuf, rbuf_len)) < 0) {
1150             if (errno == ENOMEM) {     /* tape record exceeds buf len */
1151                stat = rbuf_len;        /* This is OK */
1152             /*
1153              * On IBM drives, they return ENOSPC at EOM
1154              *  instead of EOF status
1155              */
1156             } else if (at_eof() && errno == ENOSPC) {
1157                stat = 0;
1158             } else {
1159                berrno be;
1160                set_eot();
1161                clrerror_dev(this, -1);
1162                Dmsg2(100, "Set ST_EOT read errno=%d. ERR=%s\n", dev_errno,
1163                   be.strerror());
1164                Mmsg2(errmsg, _("read error on %s. ERR=%s.\n"),
1165                   print_name(), be.strerror());
1166                Dmsg1(100, "%s", errmsg);
1167                break;
1168             }
1169          }
1170          if (stat == 0) {                /* EOF */
1171             update_pos_dev(this);
1172             Dmsg1(100, "End of File mark from read. File=%d\n", file+1);
1173             /* Two reads of zero means end of tape */
1174             if (at_eof()) {
1175                set_eot();
1176                Dmsg0(100, "Set ST_EOT\n");
1177                break;
1178             } else {
1179                set_ateof();
1180                continue;
1181             }
1182          } else {                        /* Got data */
1183             clear_eot();
1184             clear_eof();
1185          }
1186
1187          Dmsg0(100, "Doing MTFSF\n");
1188          stat = ioctl(fd, MTIOCTOP, (char *)&mt_com);
1189          if (stat < 0) {                 /* error => EOT */
1190             berrno be;
1191             set_eot();
1192             Dmsg0(100, "Set ST_EOT\n");
1193             clrerror_dev(this, MTFSF);
1194             Mmsg2(errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"),
1195                print_name(), be.strerror());
1196             Dmsg0(100, "Got < 0 for MTFSF\n");
1197             Dmsg1(100, "%s", errmsg);
1198          } else {
1199             set_ateof();
1200          }
1201       }
1202       free_memory(rbuf);
1203
1204    /*
1205     * No FSF, so use FSR to simulate it
1206     */
1207    } else {
1208       Dmsg0(200, "Doing FSR for FSF\n");
1209       while (num-- && !at_eot()) {
1210          fsr(INT32_MAX);    /* returns -1 on EOF or EOT */
1211       }
1212       if (at_eot()) {
1213          dev_errno = 0;
1214          Mmsg1(errmsg, _("Device %s at End of Tape.\n"), print_name());
1215          stat = -1;
1216       } else {
1217          stat = 0;
1218       }
1219    }
1220    update_pos_dev(this);
1221    Dmsg1(200, "Return %d from FSF\n", stat);
1222    if (at_eof())
1223       Dmsg0(200, "ST_EOF set on exit FSF\n");
1224    if (at_eot())
1225       Dmsg0(200, "ST_EOT set on exit FSF\n");
1226    Dmsg1(200, "Return from FSF file=%d\n", file);
1227    return stat == 0;
1228 }
1229
1230 /*
1231  * Backward space a file
1232  *  Returns: false on failure
1233  *           true  on success
1234  */
1235 bool
1236 bsf_dev(DEVICE *dev, int num)
1237 {
1238    struct mtop mt_com;
1239    int stat;
1240
1241    if (dev->fd < 0) {
1242       dev->dev_errno = EBADF;
1243       Mmsg0(dev->errmsg, _("Bad call to bsf_dev. Device not open\n"));
1244       Emsg0(M_FATAL, 0, dev->errmsg);
1245       return false;
1246    }
1247
1248    if (!dev->is_tape()) {
1249       Mmsg1(dev->errmsg, _("Device %s cannot BSF because it is not a tape.\n"),
1250          dev->print_name());
1251       return false;
1252    }
1253    Dmsg0(29, "bsf_dev\n");
1254    dev->state &= ~(ST_EOT|ST_EOF);
1255    dev->file -= num;
1256    dev->file_addr = 0;
1257    dev->file_size = 0;
1258    mt_com.mt_op = MTBSF;
1259    mt_com.mt_count = num;
1260    stat = ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1261    if (stat < 0) {
1262       berrno be;
1263       clrerror_dev(dev, MTBSF);
1264       Mmsg2(dev->errmsg, _("ioctl MTBSF error on %s. ERR=%s.\n"),
1265          dev->print_name(), be.strerror());
1266    }
1267    update_pos_dev(dev);
1268    return stat == 0;
1269 }
1270
1271
1272 /*
1273  * Foward space num records
1274  *  Returns: false on failure
1275  *           true  on success
1276  */
1277 bool DEVICE::fsr(int num)
1278 {
1279    struct mtop mt_com;
1280    int stat;
1281
1282    if (fd < 0) {
1283       dev_errno = EBADF;
1284       Mmsg0(errmsg, _("Bad call to fsr. Device not open\n"));
1285       Emsg0(M_FATAL, 0, errmsg);
1286       return false;
1287    }
1288
1289    if (!is_tape()) {
1290       return false;
1291    }
1292    if (!dev_cap(this, CAP_FSR)) {
1293       Mmsg1(errmsg, _("ioctl MTFSR not permitted on %s.\n"), print_name());
1294       return false;
1295    }
1296
1297    Dmsg1(29, "fsr %d\n", num);
1298    mt_com.mt_op = MTFSR;
1299    mt_com.mt_count = num;
1300    stat = ioctl(fd, MTIOCTOP, (char *)&mt_com);
1301    if (stat == 0) {
1302       clear_eof();
1303       block_num += num;
1304    } else {
1305       berrno be;
1306       struct mtget mt_stat;
1307       clrerror_dev(this, MTFSR);
1308       Dmsg1(100, "FSF fail: ERR=%s\n", be.strerror());
1309       if (dev_get_os_pos(this, &mt_stat)) {
1310          Dmsg4(100, "Adjust from %d:%d to %d:%d\n", file,
1311             block_num, mt_stat.mt_fileno, mt_stat.mt_blkno);
1312          file = mt_stat.mt_fileno;
1313          block_num = mt_stat.mt_blkno;
1314       } else {
1315          if (at_eof()) {
1316             set_eot();
1317          } else {
1318             set_ateof();
1319          }
1320       }
1321       Mmsg3(errmsg, _("ioctl MTFSR %d error on %s. ERR=%s.\n"),
1322          num, print_name(), be.strerror());
1323    }
1324    update_pos_dev(this);
1325    return stat == 0;
1326 }
1327
1328 /*
1329  * Backward space a record
1330  *   Returns:  false on failure
1331  *             true  on success
1332  */
1333 bool
1334 bsr_dev(DEVICE *dev, int num)
1335 {
1336    struct mtop mt_com;
1337    int stat;
1338
1339    if (dev->fd < 0) {
1340       dev->dev_errno = EBADF;
1341       Mmsg0(dev->errmsg, _("Bad call to bsr_dev. Device not open\n"));
1342       Emsg0(M_FATAL, 0, dev->errmsg);
1343       return false;
1344    }
1345
1346    if (!dev->is_tape()) {
1347       return false;
1348    }
1349
1350    if (!dev_cap(dev, CAP_BSR)) {
1351       Mmsg1(dev->errmsg, _("ioctl MTBSR not permitted on %s.\n"), dev->print_name());
1352       return false;
1353    }
1354
1355    Dmsg0(29, "bsr_dev\n");
1356    dev->block_num -= num;
1357    dev->state &= ~(ST_EOF|ST_EOT|ST_EOF);
1358    mt_com.mt_op = MTBSR;
1359    mt_com.mt_count = num;
1360    stat = ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1361    if (stat < 0) {
1362       berrno be;
1363       clrerror_dev(dev, MTBSR);
1364       Mmsg2(dev->errmsg, _("ioctl MTBSR error on %s. ERR=%s.\n"),
1365          dev->print_name(), be.strerror());
1366    }
1367    update_pos_dev(dev);
1368    return stat == 0;
1369 }
1370
1371 /*
1372  * Reposition the device to file, block
1373  * Returns: false on failure
1374  *          true  on success
1375  */
1376 bool
1377 reposition_dev(DEVICE *dev, uint32_t file, uint32_t block)
1378 {
1379    if (dev->fd < 0) {
1380       dev->dev_errno = EBADF;
1381       Mmsg0(dev->errmsg, _("Bad call to reposition_dev. Device not open\n"));
1382       Emsg0(M_FATAL, 0, dev->errmsg);
1383       return false;
1384    }
1385
1386    if (!dev->is_tape()) {
1387       off_t pos = (((off_t)file)<<32) + block;
1388       Dmsg1(100, "===== lseek_dev to %d\n", (int)pos);
1389       if (lseek_dev(dev, pos, SEEK_SET) == (off_t)-1) {
1390          berrno be;
1391          dev->dev_errno = errno;
1392          Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
1393             dev->print_name(), be.strerror());
1394          return false;
1395       }
1396       dev->file = file;
1397       dev->block_num = block;
1398       dev->file_addr = pos;
1399       return true;
1400    }
1401    Dmsg4(100, "reposition_dev from %u:%u to %u:%u\n",
1402       dev->file, dev->block_num, file, block);
1403    if (file < dev->file) {
1404       Dmsg0(100, "Rewind_dev\n");
1405       if (!rewind_dev(dev)) {
1406          return false;
1407       }
1408    }
1409    if (file > dev->file) {
1410       Dmsg1(100, "fsf %d\n", file-dev->file);
1411       if (!dev->fsf(file-dev->file)) {
1412          Dmsg1(100, "fsf failed! ERR=%s\n", strerror_dev(dev));
1413          return false;
1414       }
1415       Dmsg2(100, "wanted_file=%d at_file=%d\n", file, dev->file);
1416    }
1417    if (block < dev->block_num) {
1418       Dmsg2(100, "wanted_blk=%d at_blk=%d\n", block, dev->block_num);
1419       Dmsg0(100, "bsf_dev 1\n");
1420       bsf_dev(dev, 1);
1421       Dmsg0(100, "fsf_dev 1\n");
1422       dev->fsf(1);
1423       Dmsg2(100, "wanted_blk=%d at_blk=%d\n", block, dev->block_num);
1424    }
1425    if (dev_cap(dev, CAP_POSITIONBLOCKS) && block > dev->block_num) {
1426       /* Ignore errors as Bacula can read to the correct block */
1427       Dmsg1(100, "fsr %d\n", block-dev->block_num);
1428       return dev->fsr(block-dev->block_num);
1429    }
1430    return true;
1431 }
1432
1433
1434
1435 /*
1436  * Write an end of file on the device
1437  *   Returns: 0 on success
1438  *            non-zero on failure
1439  */
1440 int
1441 weof_dev(DEVICE *dev, int num)
1442 {
1443    struct mtop mt_com;
1444    int stat;
1445    Dmsg0(29, "weof_dev\n");
1446    
1447    if (dev->fd < 0) {
1448       dev->dev_errno = EBADF;
1449       Mmsg0(dev->errmsg, _("Bad call to weof_dev. Device not open\n"));
1450       Emsg0(M_FATAL, 0, dev->errmsg);
1451       return -1;
1452    }
1453    dev->file_size = 0;
1454
1455    if (!dev->is_tape()) {
1456       return 0;
1457    }
1458    if (!dev->can_append()) {
1459       Mmsg0(dev->errmsg, _("Attempt to WEOF on non-appendable Volume\n"));
1460       Emsg0(M_FATAL, 0, dev->errmsg);
1461       return -1;
1462    }
1463       
1464    dev->state &= ~(ST_EOT | ST_EOF);  /* remove EOF/EOT flags */
1465    mt_com.mt_op = MTWEOF;
1466    mt_com.mt_count = num;
1467    stat = ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1468    if (stat == 0) {
1469       dev->block_num = 0;
1470       dev->file += num;
1471       dev->file_addr = 0;
1472    } else {
1473       berrno be;
1474       clrerror_dev(dev, MTWEOF);
1475       if (stat == -1) {
1476          Mmsg2(dev->errmsg, _("ioctl MTWEOF error on %s. ERR=%s.\n"),
1477             dev->print_name(), be.strerror());
1478        }
1479    }
1480    return stat;
1481 }
1482
1483 /*
1484  * Return string message with last error in English
1485  *  Be careful not to call this routine from within dev.c
1486  *  while editing an Mmsg() or you will end up in a recursive
1487  *  loop creating a Segmentation Violation.
1488  */
1489 char *
1490 strerror_dev(DEVICE *dev)
1491 {
1492    return dev->errmsg;
1493 }
1494
1495
1496 /*
1497  * If implemented in system, clear the tape
1498  * error status.
1499  */
1500 void
1501 clrerror_dev(DEVICE *dev, int func)
1502 {
1503    const char *msg = NULL;
1504    struct mtget mt_stat;
1505    char buf[100];
1506
1507    dev->dev_errno = errno;         /* save errno */
1508    if (errno == EIO) {
1509       dev->VolCatInfo.VolCatErrors++;
1510    }
1511
1512    if (!dev->is_tape()) {
1513       return;
1514    }
1515    if (errno == ENOTTY || errno == ENOSYS) { /* Function not implemented */
1516       switch (func) {
1517       case -1:
1518          Emsg0(M_ABORT, 0, "Got ENOTTY on read/write!\n");
1519          break;
1520       case MTWEOF:
1521          msg = "WTWEOF";
1522          dev->capabilities &= ~CAP_EOF; /* turn off feature */
1523          break;
1524 #ifdef MTEOM
1525       case MTEOM:
1526          msg = "WTEOM";
1527          dev->capabilities &= ~CAP_EOM; /* turn off feature */
1528          break;
1529 #endif
1530       case MTFSF:
1531          msg = "MTFSF";
1532          dev->capabilities &= ~CAP_FSF; /* turn off feature */
1533          break;
1534       case MTBSF:
1535          msg = "MTBSF";
1536          dev->capabilities &= ~CAP_BSF; /* turn off feature */
1537          break;
1538       case MTFSR:
1539          msg = "MTFSR";
1540          dev->capabilities &= ~CAP_FSR; /* turn off feature */
1541          break;
1542       case MTBSR:
1543          msg = "MTBSR";
1544          dev->capabilities &= ~CAP_BSR; /* turn off feature */
1545          break;
1546       case MTREW:
1547          msg = "MTREW";
1548          break;
1549 #ifdef MTSETBLK
1550       case MTSETBLK:
1551          msg = "MTSETBLK";
1552          break;
1553 #endif
1554 #ifdef MTSETBSIZ 
1555       case MTSETBSIZ:
1556          msg = "MTSETBSIZ";
1557          break;
1558 #endif
1559 #ifdef MTSRSZ
1560       case MTSRSZ:
1561          msg = "MTSRSZ";
1562          break;
1563 #endif
1564       default:
1565          bsnprintf(buf, sizeof(buf), "unknown func code %d", func);
1566          msg = buf;
1567          break;
1568       }
1569       if (msg != NULL) {
1570          dev->dev_errno = ENOSYS;
1571          Mmsg1(dev->errmsg, _("I/O function \"%s\" not supported on this device.\n"), msg);
1572          Emsg0(M_ERROR, 0, dev->errmsg);
1573       }
1574    }
1575    /* On some systems such as NetBSD, this clears all errors */
1576    ioctl(dev->fd, MTIOCGET, (char *)&mt_stat);
1577
1578 /* Found on Linux */
1579 #ifdef MTIOCLRERR
1580 {
1581    struct mtop mt_com;
1582    mt_com.mt_op = MTIOCLRERR;
1583    mt_com.mt_count = 1;
1584    /* Clear any error condition on the tape */
1585    ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1586    Dmsg0(200, "Did MTIOCLRERR\n");
1587 }
1588 #endif
1589
1590 /* Typically on FreeBSD */
1591 #ifdef MTIOCERRSTAT
1592 {
1593    /* Read and clear SCSI error status */
1594    union mterrstat mt_errstat;
1595    Dmsg2(200, "Doing MTIOCERRSTAT errno=%d ERR=%s\n", dev->dev_errno,
1596       strerror(dev->dev_errno));
1597    ioctl(dev->fd, MTIOCERRSTAT, (char *)&mt_errstat);
1598 }
1599 #endif
1600
1601 /* Clear Subsystem Exception OSF1 */
1602 #ifdef MTCSE
1603 {
1604    struct mtop mt_com;
1605    mt_com.mt_op = MTCSE;
1606    mt_com.mt_count = 1;
1607    /* Clear any error condition on the tape */
1608    ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1609    Dmsg0(200, "Did MTCSE\n");
1610 }
1611 #endif
1612 }
1613
1614 /*
1615  * Flush buffer contents
1616  *  No longer used.
1617  */
1618 int flush_dev(DEVICE *dev)
1619 {
1620    return 1;
1621 }
1622
1623 static void do_close(DEVICE *dev)
1624 {
1625
1626    Dmsg1(29, "really close_dev %s\n", dev->print_name());
1627    if (dev->fd >= 0) {
1628       close(dev->fd);
1629    }
1630
1631    if (!unmount_dev(dev, 1)) {
1632       Dmsg1(0, "Cannot unmount device %s.\n", dev->print_name());
1633    }
1634    
1635    /* Remove the last part file if it is empty */
1636    if (dev->can_append() && (dev->num_parts > 0)) {
1637       struct stat statp;
1638       POOL_MEM archive_name(PM_FNAME);
1639       dev->part = dev->num_parts;
1640       Dmsg1(100, "Call make_dvd_filename. Vol=%s\n", dev->VolCatInfo.VolCatName);
1641       make_spooled_dvd_filename(dev, archive_name);
1642       /* Check that the part file is empty */
1643       if ((stat(archive_name.c_str(), &statp) == 0) && (statp.st_size == 0)) {
1644          Dmsg1(100, "unlink(%s)\n", archive_name.c_str());
1645          unlink(archive_name.c_str());
1646       }
1647    }
1648    
1649    /* Clean up device packet so it can be reused */
1650    dev->fd = -1;
1651    dev->state &= ~(ST_OPENED|ST_LABEL|ST_READ|ST_APPEND|ST_EOT|ST_WEOT|ST_EOF);
1652    dev->label_type = B_BACULA_LABEL;
1653    dev->file = dev->block_num = 0;
1654    dev->file_size = 0;
1655    dev->file_addr = 0;
1656    dev->part = 0;
1657    dev->num_parts = 0;
1658    dev->part_size = 0;
1659    dev->part_start = 0;
1660    dev->EndFile = dev->EndBlock = 0;
1661    memset(&dev->VolCatInfo, 0, sizeof(dev->VolCatInfo));
1662    memset(&dev->VolHdr, 0, sizeof(dev->VolHdr));
1663    if (dev->tid) {
1664       stop_thread_timer(dev->tid);
1665       dev->tid = 0;
1666    }
1667    dev->use_count = 0;
1668    dev->openmode = 0;
1669 }
1670
1671 /*
1672  * Close the device
1673  */
1674 void DEVICE::close()
1675 {
1676    /*if (fd >= 0 && use_count == 1) {*/
1677    /* No need to check if fd >= 0: it is checked again
1678     * in do_close, and do_close MUST be called for volumes
1679     * splitted in parts, even if fd == -1. */
1680    if (use_count == 1) {
1681       do_close(this);
1682    } else if (use_count > 0) {
1683       use_count--;
1684    }
1685
1686 #ifdef FULL_DEBUG
1687    ASSERT(use_count >= 0);
1688 #endif
1689 }
1690
1691
1692 bool truncate_dev(DEVICE *dev)
1693 {
1694    Dmsg1(100, "truncate_dev %s\n", dev->print_name());
1695    if (dev->is_tape()) {
1696       return true;                    /* we don't really truncate tapes */
1697       /* maybe we should rewind and write and eof ???? */
1698    }
1699    
1700    if (dev->is_dvd()) {
1701       Mmsg1(dev->errmsg, _("Truncate DVD %s not supported.\n"), dev->print_name());
1702       return false;   /* we cannot truncate DVDs */
1703    }
1704    
1705    if (ftruncate(dev->fd, 0) != 0) {
1706       berrno be;
1707       Mmsg2(dev->errmsg, _("Unable to truncate device %s. ERR=%s\n"), 
1708             dev->print_name(), be.strerror());
1709       return false;
1710    }
1711    return true;
1712 }
1713
1714 /* Return the resource name for the device */
1715 const char *DEVICE::name() const
1716 {
1717    return device->hdr.name;
1718 }
1719
1720 char *
1721 dev_vol_name(DEVICE *dev)
1722 {
1723    return dev->VolCatInfo.VolCatName;
1724 }
1725
1726 uint32_t dev_block(DEVICE *dev)
1727 {
1728    update_pos_dev(dev);
1729    return dev->block_num;
1730 }
1731
1732 uint32_t dev_file(DEVICE *dev)
1733 {
1734    update_pos_dev(dev);
1735    return dev->file;
1736 }
1737
1738 /*
1739  * Free memory allocated for the device
1740  */
1741 void
1742 term_dev(DEVICE *dev)
1743 {
1744    if (!dev) {
1745       dev->dev_errno = EBADF;
1746       Mmsg0(dev->errmsg, _("Bad call to term_dev. Device not open\n"));
1747       Emsg0(M_FATAL, 0, dev->errmsg);
1748       return;
1749    }
1750    Dmsg1(29, "term_dev: %s\n", dev->print_name());
1751    do_close(dev);
1752    if (dev->dev_name) {
1753       free_memory(dev->dev_name);
1754       dev->dev_name = NULL;
1755    }
1756    if (dev->prt_name) {
1757       free_memory(dev->prt_name);
1758       dev->prt_name = NULL;
1759    }
1760    if (dev->errmsg) {
1761       free_pool_memory(dev->errmsg);
1762       dev->errmsg = NULL;
1763    }
1764    pthread_mutex_destroy(&dev->mutex);
1765    pthread_cond_destroy(&dev->wait);
1766    pthread_cond_destroy(&dev->wait_next_vol);
1767    pthread_mutex_destroy(&dev->spool_mutex);
1768    rwl_destroy(&dev->lock);
1769    if (dev->attached_dcrs) {
1770       delete dev->attached_dcrs;
1771       dev->attached_dcrs = NULL;
1772    }
1773    if (dev->state & ST_MALLOC) {
1774       free_pool_memory((POOLMEM *)dev);
1775    }
1776 }
1777
1778 /*
1779  * This routine initializes the device wait timers
1780  */
1781 void init_device_wait_timers(DCR *dcr)
1782 {
1783    DEVICE *dev = dcr->dev;
1784    JCR *jcr = dcr->jcr;
1785
1786    /* ******FIXME******* put these on config variables */
1787    dev->min_wait = 60 * 60;
1788    dev->max_wait = 24 * 60 * 60;
1789    dev->max_num_wait = 9;              /* 5 waits =~ 1 day, then 1 day at a time */
1790    dev->wait_sec = dev->min_wait;
1791    dev->rem_wait_sec = dev->wait_sec;
1792    dev->num_wait = 0;
1793    dev->poll = false;
1794    dev->BadVolName[0] = 0;
1795
1796    jcr->min_wait = 60 * 60;
1797    jcr->max_wait = 24 * 60 * 60;
1798    jcr->max_num_wait = 9;              /* 5 waits =~ 1 day, then 1 day at a time */
1799    jcr->wait_sec = jcr->min_wait;
1800    jcr->rem_wait_sec = jcr->wait_sec;
1801    jcr->num_wait = 0;
1802
1803 }
1804
1805 void init_jcr_device_wait_timers(JCR *jcr)
1806 {
1807    /* ******FIXME******* put these on config variables */
1808    jcr->min_wait = 60 * 60;
1809    jcr->max_wait = 24 * 60 * 60;
1810    jcr->max_num_wait = 9;              /* 5 waits =~ 1 day, then 1 day at a time */
1811    jcr->wait_sec = jcr->min_wait;
1812    jcr->rem_wait_sec = jcr->wait_sec;
1813    jcr->num_wait = 0;
1814 }
1815
1816
1817 /*
1818  * The dev timers are used for waiting on a particular device 
1819  *
1820  * Returns: true if time doubled
1821  *          false if max time expired
1822  */
1823 bool double_dev_wait_time(DEVICE *dev)
1824 {
1825    dev->wait_sec *= 2;               /* double wait time */
1826    if (dev->wait_sec > dev->max_wait) {   /* but not longer than maxtime */
1827       dev->wait_sec = dev->max_wait;
1828    }
1829    dev->num_wait++;
1830    dev->rem_wait_sec = dev->wait_sec;
1831    if (dev->num_wait >= dev->max_num_wait) {
1832       return false;
1833    }
1834    return true;
1835 }
1836
1837
1838 void set_os_device_parameters(DEVICE *dev)
1839 {
1840 #ifdef HAVE_LINUX_OS
1841    struct mtop mt_com;
1842    if (dev->min_block_size == dev->max_block_size &&
1843        dev->min_block_size == 0) {    /* variable block mode */
1844       mt_com.mt_op = MTSETBLK;
1845       mt_com.mt_count = 0;
1846       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1847          clrerror_dev(dev, MTSETBLK);
1848       }
1849       mt_com.mt_op = MTSETDRVBUFFER;
1850       mt_com.mt_count = MT_ST_CLEARBOOLEANS;
1851       if (!dev_cap(dev, CAP_TWOEOF)) {
1852          mt_com.mt_count |= MT_ST_TWO_FM;
1853       }
1854       if (dev_cap(dev, CAP_EOM)) {
1855          mt_com.mt_count |= MT_ST_FAST_MTEOM;
1856       }
1857       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1858          clrerror_dev(dev, MTSETBLK);
1859       }
1860    }
1861    return;
1862 #endif
1863
1864 #ifdef HAVE_NETBSD_OS
1865    struct mtop mt_com;
1866    if (dev->min_block_size == dev->max_block_size &&
1867        dev->min_block_size == 0) {    /* variable block mode */
1868       mt_com.mt_op = MTSETBSIZ;
1869       mt_com.mt_count = 0;
1870       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1871          clrerror_dev(dev, MTSETBSIZ);
1872       }
1873       /* Get notified at logical end of tape */
1874       mt_com.mt_op = MTEWARN;
1875       mt_com.mt_count = 1;
1876       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1877          clrerror_dev(dev, MTEWARN);
1878       }
1879    }
1880    return;
1881 #endif
1882
1883 #if HAVE_FREEBSD_OS || HAVE_OPENBSD_OS
1884    struct mtop mt_com;
1885    if (dev->min_block_size == dev->max_block_size &&
1886        dev->min_block_size == 0) {    /* variable block mode */
1887       mt_com.mt_op = MTSETBSIZ;
1888       mt_com.mt_count = 0;
1889       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1890          clrerror_dev(dev, MTSETBSIZ);
1891       }
1892    }
1893    return;
1894 #endif
1895
1896 #ifdef HAVE_SUN_OS
1897    struct mtop mt_com;
1898    if (dev->min_block_size == dev->max_block_size &&
1899        dev->min_block_size == 0) {    /* variable block mode */
1900       mt_com.mt_op = MTSRSZ;
1901       mt_com.mt_count = 0;
1902       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1903          clrerror_dev(dev, MTSRSZ);
1904       }
1905    }
1906    return;
1907 #endif
1908 }
1909
1910 static bool dev_get_os_pos(DEVICE *dev, struct mtget *mt_stat)
1911 {
1912    return dev_cap(dev, CAP_MTIOCGET) && 
1913           ioctl(dev->fd, MTIOCGET, (char *)mt_stat) == 0 &&
1914           mt_stat->mt_fileno >= 0;
1915 }
1916
1917 static char *modes[] = {
1918    "CREATE_READ_WRITE",
1919    "OPEN_READ_WRITE",
1920    "OPEN_READ_ONLY",
1921    "OPEN_WRITE_ONLY"
1922 };
1923
1924
1925 static char *mode_to_str(int mode)  
1926 {
1927    return modes[mode-1];
1928 }