]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/stored/dev.c
Fixes concerning DVD-writing.
[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       if (num_parts == 0) {
478          Dmsg1(29, "Could not mount device %s, this is not a problem (num_parts == 0).\n", print_name());
479       }
480       else {
481          Mmsg(errmsg, _("Could not mount device %s.\n"), print_name());
482          Emsg0(M_FATAL, 0, errmsg);
483          fd = -1;
484          return;
485       }
486    }
487          
488    Dmsg5(29, "open dev: %s dev=%s mode=%s part=%d npart=%d\n", 
489       is_dvd()?"DVD":"disk", archive_name.c_str(), mode_to_str(omode),
490       part, num_parts);
491    openmode = omode;
492    Dmsg2(100, "openmode=%d %s\n", openmode, mode_to_str(openmode));
493    
494    /*
495     * If we are not trying to access the last part, set mode to 
496     *   OPEN_READ_ONLY as writing would be an error.
497     */
498    if (part < num_parts) {
499       omode = OPEN_READ_ONLY;
500       make_mounted_dvd_filename(this, archive_name);
501    }
502    else {
503       make_spooled_dvd_filename(this, archive_name);
504    }
505    set_mode(omode);
506
507    /* If creating file, give 0640 permissions */
508    Dmsg3(29, "mode=%s open(%s, 0x%x, 0640)\n", mode_to_str(omode), 
509          archive_name.c_str(), mode);
510    /* Use system open() */
511    if ((fd = ::open(archive_name.c_str(), mode, 0640)) < 0) {
512       berrno be;
513       dev_errno = errno;
514       Mmsg2(errmsg, _("Could not open: %s, ERR=%s\n"), archive_name.c_str(), 
515             be.strerror());
516       Dmsg1(29, "open failed: %s", errmsg);
517       if (omode == OPEN_READ_ONLY) {
518          make_spooled_dvd_filename(this, archive_name);
519         /* Use system open() */
520          fd = ::open(archive_name.c_str(), mode, 0640);  /* try on spool */
521       }
522    }
523    Dmsg1(100, "after open fd=%d\n", fd);
524    if (fd >= 0) {
525       /* Get size of file */
526       if (fstat(fd, &filestat) < 0) {
527          berrno be;
528          dev_errno = errno;
529          Mmsg2(errmsg, _("Could not fstat: %s, ERR=%s\n"), archive_name.c_str(), 
530                be.strerror());
531          Dmsg1(29, "open failed: %s", errmsg);
532          /* Use system close() */
533          ::close(fd);
534          fd = -1;
535       } else {
536          part_size = filestat.st_size;
537          dev_errno = 0;
538          set_opened();
539          use_count = 1;
540          Dmsg2(100, "after open(2a) part=%d part_size=%d\n", part, part_size);
541          update_pos_dev(this);                /* update position */
542          
543          /* NB: It seems this code is wrong... part number is incremented in open_next_part, not here */
544          
545          /* Check if just created Volume  part */
546 /*         if (omode == OPEN_READ_WRITE && (part == 0 || part_size == 0)) {
547             part++;
548             num_parts = part;
549             VolCatInfo.VolCatParts = num_parts;
550          } else {
551             if (part == 0) {             // we must have opened the first part
552                part++;
553             }
554          }*/
555       }
556    }
557 }
558
559
560 #ifdef debug_tracing
561 #undef rewind_dev
562 bool _rewind_dev(char *file, int line, DEVICE *dev)
563 {
564    Dmsg3(100, "rewind_dev fd=%d called from %s:%d\n", dev->fd, file, line);
565    return rewind_dev(dev);
566 }
567 #endif
568
569 /*
570  * Rewind the device.
571  *  Returns: true  on success
572  *           false on failure
573  */
574 bool rewind_dev(DEVICE *dev)
575 {
576    struct mtop mt_com;
577    unsigned int i;
578
579    Dmsg2(29, "rewind_dev fd=%d %s\n", dev->fd, dev->print_name());
580    if (dev->fd < 0) {
581       dev->dev_errno = EBADF;
582       Mmsg1(dev->errmsg, _("Bad call to rewind_dev. Device %s not open\n"),
583             dev->print_name());
584       Emsg0(M_ABORT, 0, dev->errmsg);
585       return false;
586    }
587    dev->state &= ~(ST_EOT|ST_EOF|ST_WEOT);  /* remove EOF/EOT flags */
588    dev->block_num = dev->file = 0;
589    dev->file_size = 0;
590    dev->file_addr = 0;
591    if (dev->is_tape()) {
592       mt_com.mt_op = MTREW;
593       mt_com.mt_count = 1;
594       /* If we get an I/O error on rewind, it is probably because
595        * the drive is actually busy. We loop for (about 5 minutes)
596        * retrying every 5 seconds.
597        */
598       for (i=dev->max_rewind_wait; ; i -= 5) {
599          if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
600             berrno be;
601             clrerror_dev(dev, MTREW);
602             if (i == dev->max_rewind_wait) {
603                Dmsg1(200, "Rewind error, %s. retrying ...\n", be.strerror());
604             }
605             if (dev->dev_errno == EIO && i > 0) {
606                Dmsg0(200, "Sleeping 5 seconds.\n");
607                bmicrosleep(5, 0);
608                continue;
609             }
610             Mmsg2(dev->errmsg, _("Rewind error on %s. ERR=%s.\n"),
611                dev->print_name(), be.strerror());
612             return false;
613          }
614          break;
615       }
616    } else if (dev->is_file()) {      
617       if (lseek_dev(dev, (off_t)0, SEEK_SET) < 0) {
618          berrno be;
619          dev->dev_errno = errno;
620          Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
621             dev->print_name(), be.strerror());
622          return false;
623       }
624    }
625    return true;
626 }
627
628 void DEVICE::block(int why)
629 {
630    lock_device(this);
631    block_device(this, why);
632    V(mutex);
633 }
634
635 void DEVICE::unblock()
636 {  
637    P(mutex);
638    unblock_device(this);
639    V(mutex);
640 }
641
642 const char *DEVICE::print_blocked() const 
643 {
644    switch (dev_blocked) {
645    case BST_NOT_BLOCKED:
646       return "BST_NOT_BLOCKED";
647    case BST_UNMOUNTED:
648       return "BST_UNMOUNTED";
649    case BST_WAITING_FOR_SYSOP:
650       return "BST_WAITING_FOR_SYSOP";
651    case BST_DOING_ACQUIRE:
652       return "BST_DOING_ACQUIRE";
653    case BST_WRITING_LABEL:
654       return "BST_WRITING_LABEL";
655    case BST_UNMOUNTED_WAITING_FOR_SYSOP:
656       return "BST_UNMOUNTED_WAITING_FOR_SYSOP";
657    case BST_MOUNT:
658       return "BST_MOUNT";
659    default:
660       return "unknown blocked code";
661    }
662 }
663
664 /*
665  * Called to indicate that we have just read an
666  *  EOF from the device.
667  */
668 void DEVICE::set_ateof() 
669
670    set_eof();
671    file++;
672    file_addr = 0;
673    file_size = 0;
674    block_num = 0;
675 }
676
677 /*
678  * Called to indicate we are now at the end of the tape, and
679  *   writing is not possible.
680  */
681 void DEVICE::set_ateot() 
682 {
683    /* Make tape effectively read-only */
684    state |= (ST_EOF|ST_EOT|ST_WEOT);
685    clear_append();
686 }
687
688 /*
689  * Position device to end of medium (end of data)
690  *  Returns: true  on succes
691  *           false on error
692  */
693 bool
694 eod_dev(DEVICE *dev)
695 {
696    struct mtop mt_com;
697    struct mtget mt_stat;
698    bool ok = true;
699    off_t pos;
700
701    if (dev->fd < 0) {
702       dev->dev_errno = EBADF;
703       Mmsg1(dev->errmsg, _("Bad call to eod_dev. Device %s not open\n"),
704             dev->print_name());
705       return false;
706    }
707
708 #if defined (__digital__) && defined (__unix__)
709    return dev->fsf(dev->VolCatInfo.VolCatFiles);
710 #endif
711
712    Dmsg0(29, "eod_dev\n");
713    if (dev->at_eot()) {
714       return true;
715    }
716    dev->state &= ~(ST_EOF);  /* remove EOF flags */
717    dev->block_num = dev->file = 0;
718    dev->file_size = 0;
719    dev->file_addr = 0;
720    if (dev->state & (ST_FIFO | ST_PROG)) {
721       return true;
722    }
723    if (!dev->is_tape()) {
724       pos = lseek_dev(dev, (off_t)0, SEEK_END);
725 //    Dmsg1(100, "====== Seek to %lld\n", pos);
726       if (pos >= 0) {
727          update_pos_dev(dev);
728          dev->state |= ST_EOT;
729          return true;
730       }
731       dev->dev_errno = errno;
732       berrno be;
733       Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
734              dev->print_name(), be.strerror());
735       return false;
736    }
737 #ifdef MTEOM
738    if (dev_cap(dev, CAP_FASTFSF) && !dev_cap(dev, CAP_EOM)) {
739       Dmsg0(100,"Using FAST FSF for EOM\n");
740       /* If unknown position, rewind */
741       if (!dev_get_os_pos(dev, &mt_stat)) {
742         if (!rewind_dev(dev)) {
743           return false;
744         }
745       }
746       mt_com.mt_op = MTFSF;
747       /*
748        * ***FIXME*** fix code to handle case that INT16_MAX is
749        *   not large enough.
750        */
751       mt_com.mt_count = INT16_MAX;    /* use big positive number */
752       if (mt_com.mt_count < 0) {
753          mt_com.mt_count = INT16_MAX; /* brain damaged system */
754       }
755    }
756
757    if (dev_cap(dev, CAP_MTIOCGET) && (dev_cap(dev, CAP_FASTFSF) || dev_cap(dev, CAP_EOM))) {
758       if (dev_cap(dev, CAP_EOM)) {
759          Dmsg0(100,"Using EOM for EOM\n");
760          mt_com.mt_op = MTEOM;
761          mt_com.mt_count = 1;
762       }
763
764       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
765          berrno be;
766          clrerror_dev(dev, mt_com.mt_op);
767          Dmsg1(50, "ioctl error: %s\n", be.strerror());
768          update_pos_dev(dev);
769          Mmsg2(dev->errmsg, _("ioctl MTEOM error on %s. ERR=%s.\n"),
770             dev->print_name(), be.strerror());
771          return false;
772       }
773
774       if (!dev_get_os_pos(dev, &mt_stat)) {
775          berrno be;
776          clrerror_dev(dev, -1);
777          Mmsg2(dev->errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"),
778             dev->print_name(), be.strerror());
779          return false;
780       }
781       Dmsg2(100, "EOD file=%d block=%d\n", mt_stat.mt_fileno, mt_stat.mt_blkno);
782       dev->set_ateof();
783       dev->file = mt_stat.mt_fileno;
784    } else {
785 #else
786    {
787 #endif
788       /*
789        * Rewind then use FSF until EOT reached
790        */
791       if (!rewind_dev(dev)) {
792          return false;
793       }
794       /*
795        * Move file by file to the end of the tape
796        */
797       int file_num;
798       for (file_num=dev->file; !dev->at_eot(); file_num++) {
799          Dmsg0(200, "eod_dev: doing fsf 1\n");
800          if (!dev->fsf(1)) {
801             Dmsg0(200, "fsf error.\n");
802             return false;
803          }
804          /*
805           * Avoid infinite loop. ***FIXME*** possibly add code
806           *   to set EOD or to turn off CAP_FASTFSF if on.
807           */
808          if (file_num == (int)dev->file) {
809             struct mtget mt_stat;
810             Dmsg1(100, "fsf did not advance from file %d\n", file_num);
811             if (dev_get_os_pos(dev, &mt_stat)) {
812                Dmsg2(100, "Adjust file from %d to %d\n", dev->file , mt_stat.mt_fileno);
813                dev->set_ateof();
814                dev->file = mt_stat.mt_fileno;
815             }
816             return false;
817          }
818       }
819    }
820    /*
821     * Some drivers leave us after second EOF when doing
822     * MTEOM, so we must backup so that appending overwrites
823     * the second EOF.
824     */
825    if (dev_cap(dev, CAP_BSFATEOM)) {
826       struct mtget mt_stat;
827       /* Backup over EOF */
828       ok = bsf_dev(dev, 1);
829       /* If BSF worked and fileno is known (not -1), set file */
830       if (dev_get_os_pos(dev, &mt_stat)) {
831          Dmsg2(100, "BSFATEOF adjust file from %d to %d\n", dev->file , mt_stat.mt_fileno);
832          dev->file = mt_stat.mt_fileno;
833       } else {
834          dev->file++;                 /* wing it -- not correct on all OSes */
835       }
836    } else {
837       update_pos_dev(dev);                   /* update position */
838    }
839    Dmsg1(200, "EOD dev->file=%d\n", dev->file);
840    return ok;
841 }
842
843 /*
844  * Set the position of the device -- only for files
845  *   For other devices, there is no generic way to do it.
846  *  Returns: true  on succes
847  *           false on error
848  */
849 bool update_pos_dev(DEVICE *dev)
850 {
851    off_t pos;
852    bool ok = true;
853
854    if (dev->fd < 0) {
855       dev->dev_errno = EBADF;
856       Mmsg0(dev->errmsg, _("Bad device call. Device not open\n"));
857       Emsg0(M_FATAL, 0, dev->errmsg);
858       return false;
859    }
860
861    /* Find out where we are */
862    if (dev->is_file()) {
863       dev->file = 0;
864       dev->file_addr = 0;
865       pos = lseek_dev(dev, (off_t)0, SEEK_CUR);
866       if (pos < 0) {
867          berrno be;
868          dev->dev_errno = errno;
869          Pmsg1(000, "Seek error: ERR=%s\n", be.strerror());
870          Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
871             dev->print_name(), be.strerror());
872          ok = false;
873       } else {
874          dev->file_addr = pos;
875       }
876    }
877    return ok;
878 }
879
880
881 /*
882  * Return the status of the device.  This was meant
883  * to be a generic routine. Unfortunately, it doesn't
884  * seem possible (at least I do not know how to do it
885  * currently), which means that for the moment, this
886  * routine has very little value.
887  *
888  *   Returns: status
889  */
890 uint32_t status_dev(DEVICE *dev)
891 {
892    struct mtget mt_stat;
893    uint32_t stat = 0;
894
895    if (dev->state & (ST_EOT | ST_WEOT)) {
896       stat |= BMT_EOD;
897       Pmsg0(-20, " EOD");
898    }
899    if (dev->state & ST_EOF) {
900       stat |= BMT_EOF;
901       Pmsg0(-20, " EOF");
902    }
903    if (dev->is_tape()) {
904       stat |= BMT_TAPE;
905       Pmsg0(-20," Bacula status:");
906       Pmsg2(-20," file=%d block=%d\n", dev->file, dev->block_num);
907       if (ioctl(dev->fd, MTIOCGET, (char *)&mt_stat) < 0) {
908          berrno be;
909          dev->dev_errno = errno;
910          Mmsg2(dev->errmsg, _("ioctl MTIOCGET error on %s. ERR=%s.\n"),
911             dev->print_name(), be.strerror());
912          return 0;
913       }
914       Pmsg0(-20, " Device status:");
915
916 #if defined(HAVE_LINUX_OS)
917       if (GMT_EOF(mt_stat.mt_gstat)) {
918          stat |= BMT_EOF;
919          Pmsg0(-20, " EOF");
920       }
921       if (GMT_BOT(mt_stat.mt_gstat)) {
922          stat |= BMT_BOT;
923          Pmsg0(-20, " BOT");
924       }
925       if (GMT_EOT(mt_stat.mt_gstat)) {
926          stat |= BMT_EOT;
927          Pmsg0(-20, " EOT");
928       }
929       if (GMT_SM(mt_stat.mt_gstat)) {
930          stat |= BMT_SM;
931          Pmsg0(-20, " SM");
932       }
933       if (GMT_EOD(mt_stat.mt_gstat)) {
934          stat |= BMT_EOD;
935          Pmsg0(-20, " EOD");
936       }
937       if (GMT_WR_PROT(mt_stat.mt_gstat)) {
938          stat |= BMT_WR_PROT;
939          Pmsg0(-20, " WR_PROT");
940       }
941       if (GMT_ONLINE(mt_stat.mt_gstat)) {
942          stat |= BMT_ONLINE;
943          Pmsg0(-20, " ONLINE");
944       }
945       if (GMT_DR_OPEN(mt_stat.mt_gstat)) {
946          stat |= BMT_DR_OPEN;
947          Pmsg0(-20, " DR_OPEN");
948       }
949       if (GMT_IM_REP_EN(mt_stat.mt_gstat)) {
950          stat |= BMT_IM_REP_EN;
951          Pmsg0(-20, " IM_REP_EN");
952       }
953 #endif /* !SunOS && !OSF */
954       if (dev_cap(dev, CAP_MTIOCGET)) {
955          Pmsg2(-20, " file=%d block=%d\n", mt_stat.mt_fileno, mt_stat.mt_blkno);
956       } else {
957          Pmsg2(-20, " file=%d block=%d\n", -1, -1);
958       }
959    } else {
960       stat |= BMT_ONLINE | BMT_BOT;
961    }
962    return stat;
963 }
964
965
966 /*
967  * Load medium in device
968  *  Returns: true  on success
969  *           false on failure
970  */
971 bool load_dev(DEVICE *dev)
972 {
973 #ifdef MTLOAD
974    struct mtop mt_com;
975 #endif
976
977    if (dev->fd < 0) {
978       dev->dev_errno = EBADF;
979       Mmsg0(dev->errmsg, _("Bad call to load_dev. Device not open\n"));
980       Emsg0(M_FATAL, 0, dev->errmsg);
981       return false;
982    }
983    if (!(dev->is_tape())) {
984       return true;
985    }
986 #ifndef MTLOAD
987    Dmsg0(200, "stored: MTLOAD command not available\n");
988    berrno be;
989    dev->dev_errno = ENOTTY;           /* function not available */
990    Mmsg2(dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"),
991          dev->print_name(), be.strerror());
992    return false;
993 #else
994
995    dev->block_num = dev->file = 0;
996    dev->file_size = 0;
997    dev->file_addr = 0;
998    mt_com.mt_op = MTLOAD;
999    mt_com.mt_count = 1;
1000    if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1001       berrno be;
1002       dev->dev_errno = errno;
1003       Mmsg2(dev->errmsg, _("ioctl MTLOAD error on %s. ERR=%s.\n"),
1004          dev->print_name(), be.strerror());
1005       return false;
1006    }
1007    return true;
1008 #endif
1009 }
1010
1011 /*
1012  * Rewind device and put it offline
1013  *  Returns: true  on success
1014  *           false on failure
1015  */
1016 bool offline_dev(DEVICE *dev)
1017 {
1018    struct mtop mt_com;
1019
1020    if (dev->fd < 0) {
1021       dev->dev_errno = EBADF;
1022       Mmsg0(dev->errmsg, _("Bad call to offline_dev. Device not open\n"));
1023       Emsg0(M_FATAL, 0, dev->errmsg);
1024       return false;
1025    }
1026    if (!(dev->is_tape())) {
1027       return true;
1028    }
1029
1030    dev->state &= ~(ST_APPEND|ST_READ|ST_EOT|ST_EOF|ST_WEOT);  /* remove EOF/EOT flags */
1031    dev->block_num = dev->file = 0;
1032    dev->file_size = 0;
1033    dev->file_addr = 0;
1034    dev->part = 0;
1035 #ifdef MTUNLOCK
1036    mt_com.mt_op = MTUNLOCK;
1037    mt_com.mt_count = 1;
1038    ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1039 #endif
1040    mt_com.mt_op = MTOFFL;
1041    mt_com.mt_count = 1;
1042    if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1043       berrno be;
1044       dev->dev_errno = errno;
1045       Mmsg2(dev->errmsg, _("ioctl MTOFFL error on %s. ERR=%s.\n"),
1046          dev->print_name(), be.strerror());
1047       return false;
1048    }
1049    Dmsg1(100, "Offlined device %s\n", dev->print_name());
1050    return true;
1051 }
1052
1053 bool offline_or_rewind_dev(DEVICE *dev)
1054 {
1055    if (dev->fd < 0) {
1056       return false;
1057    }
1058    if (dev_cap(dev, CAP_OFFLINEUNMOUNT)) {
1059       return offline_dev(dev);
1060    } else {
1061    /*
1062     * Note, this rewind probably should not be here (it wasn't
1063     *  in prior versions of Bacula), but on FreeBSD, this is
1064     *  needed in the case the tape was "frozen" due to an error
1065     *  such as backspacing after writing and EOF. If it is not
1066     *  done, all future references to the drive get and I/O error.
1067     */
1068       clrerror_dev(dev, MTREW);
1069       return rewind_dev(dev);
1070    }
1071 }
1072
1073 /*
1074  * Foward space a file
1075  *   Returns: true  on success
1076  *            false on failure
1077  */
1078 bool DEVICE::fsf(int num)
1079 {
1080    struct mtget mt_stat;
1081    struct mtop mt_com;
1082    int stat = 0;
1083
1084    if (fd < 0) {
1085       dev_errno = EBADF;
1086       Mmsg0(errmsg, _("Bad call to fsf_dev. Device not open\n"));
1087       Emsg0(M_FATAL, 0, errmsg);
1088       return false;
1089    }
1090
1091    if (!is_tape()) {
1092       return true;
1093    }
1094    if (at_eot()) {
1095       dev_errno = 0;
1096       Mmsg1(errmsg, _("Device %s at End of Tape.\n"), print_name());
1097       return false;
1098    }
1099    if (at_eof()) {
1100       Dmsg0(200, "ST_EOF set on entry to FSF\n");
1101    }
1102
1103    Dmsg0(100, "fsf\n");
1104    block_num = 0;
1105    /*
1106     * If Fast forward space file is set, then we
1107     *  use MTFSF to forward space and MTIOCGET
1108     *  to get the file position. We assume that
1109     *  the SCSI driver will ensure that we do not
1110     *  forward space past the end of the medium.
1111     */
1112    if (dev_cap(this, CAP_FSF) && dev_cap(this, CAP_MTIOCGET) && dev_cap(this, CAP_FASTFSF)) {
1113       mt_com.mt_op = MTFSF;
1114       mt_com.mt_count = num;
1115       stat = ioctl(fd, MTIOCTOP, (char *)&mt_com);
1116       if (stat < 0 || !dev_get_os_pos(this, &mt_stat)) {
1117          berrno be;
1118          set_eot();
1119          Dmsg0(200, "Set ST_EOT\n");
1120          clrerror_dev(this, MTFSF);
1121          Mmsg2(errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"),
1122             print_name(), be.strerror());
1123          Dmsg1(200, "%s", errmsg);
1124          return false;
1125       }
1126       Dmsg2(200, "fsf file=%d block=%d\n", mt_stat.mt_fileno, mt_stat.mt_blkno);
1127       set_ateof();
1128       file = mt_stat.mt_fileno;
1129       return true;
1130
1131    /*
1132     * Here if CAP_FSF is set, and virtually all drives
1133     *  these days support it, we read a record, then forward
1134     *  space one file. Using this procedure, which is slow,
1135     *  is the only way we can be sure that we don't read
1136     *  two consecutive EOF marks, which means End of Data.
1137     */
1138    } else if (dev_cap(this, CAP_FSF)) {
1139       POOLMEM *rbuf;
1140       int rbuf_len;
1141       Dmsg0(200, "FSF has cap_fsf\n");
1142       if (max_block_size == 0) {
1143          rbuf_len = DEFAULT_BLOCK_SIZE;
1144       } else {
1145          rbuf_len = max_block_size;
1146       }
1147       rbuf = get_memory(rbuf_len);
1148       mt_com.mt_op = MTFSF;
1149       mt_com.mt_count = 1;
1150       while (num-- && !at_eot()) {
1151          Dmsg0(100, "Doing read before fsf\n");
1152          if ((stat = read(fd, (char *)rbuf, rbuf_len)) < 0) {
1153             if (errno == ENOMEM) {     /* tape record exceeds buf len */
1154                stat = rbuf_len;        /* This is OK */
1155             /*
1156              * On IBM drives, they return ENOSPC at EOM
1157              *  instead of EOF status
1158              */
1159             } else if (at_eof() && errno == ENOSPC) {
1160                stat = 0;
1161             } else {
1162                berrno be;
1163                set_eot();
1164                clrerror_dev(this, -1);
1165                Dmsg2(100, "Set ST_EOT read errno=%d. ERR=%s\n", dev_errno,
1166                   be.strerror());
1167                Mmsg2(errmsg, _("read error on %s. ERR=%s.\n"),
1168                   print_name(), be.strerror());
1169                Dmsg1(100, "%s", errmsg);
1170                break;
1171             }
1172          }
1173          if (stat == 0) {                /* EOF */
1174             update_pos_dev(this);
1175             Dmsg1(100, "End of File mark from read. File=%d\n", file+1);
1176             /* Two reads of zero means end of tape */
1177             if (at_eof()) {
1178                set_eot();
1179                Dmsg0(100, "Set ST_EOT\n");
1180                break;
1181             } else {
1182                set_ateof();
1183                continue;
1184             }
1185          } else {                        /* Got data */
1186             clear_eot();
1187             clear_eof();
1188          }
1189
1190          Dmsg0(100, "Doing MTFSF\n");
1191          stat = ioctl(fd, MTIOCTOP, (char *)&mt_com);
1192          if (stat < 0) {                 /* error => EOT */
1193             berrno be;
1194             set_eot();
1195             Dmsg0(100, "Set ST_EOT\n");
1196             clrerror_dev(this, MTFSF);
1197             Mmsg2(errmsg, _("ioctl MTFSF error on %s. ERR=%s.\n"),
1198                print_name(), be.strerror());
1199             Dmsg0(100, "Got < 0 for MTFSF\n");
1200             Dmsg1(100, "%s", errmsg);
1201          } else {
1202             set_ateof();
1203          }
1204       }
1205       free_memory(rbuf);
1206
1207    /*
1208     * No FSF, so use FSR to simulate it
1209     */
1210    } else {
1211       Dmsg0(200, "Doing FSR for FSF\n");
1212       while (num-- && !at_eot()) {
1213          fsr(INT32_MAX);    /* returns -1 on EOF or EOT */
1214       }
1215       if (at_eot()) {
1216          dev_errno = 0;
1217          Mmsg1(errmsg, _("Device %s at End of Tape.\n"), print_name());
1218          stat = -1;
1219       } else {
1220          stat = 0;
1221       }
1222    }
1223    update_pos_dev(this);
1224    Dmsg1(200, "Return %d from FSF\n", stat);
1225    if (at_eof())
1226       Dmsg0(200, "ST_EOF set on exit FSF\n");
1227    if (at_eot())
1228       Dmsg0(200, "ST_EOT set on exit FSF\n");
1229    Dmsg1(200, "Return from FSF file=%d\n", file);
1230    return stat == 0;
1231 }
1232
1233 /*
1234  * Backward space a file
1235  *  Returns: false on failure
1236  *           true  on success
1237  */
1238 bool
1239 bsf_dev(DEVICE *dev, int num)
1240 {
1241    struct mtop mt_com;
1242    int stat;
1243
1244    if (dev->fd < 0) {
1245       dev->dev_errno = EBADF;
1246       Mmsg0(dev->errmsg, _("Bad call to bsf_dev. Device not open\n"));
1247       Emsg0(M_FATAL, 0, dev->errmsg);
1248       return false;
1249    }
1250
1251    if (!dev->is_tape()) {
1252       Mmsg1(dev->errmsg, _("Device %s cannot BSF because it is not a tape.\n"),
1253          dev->print_name());
1254       return false;
1255    }
1256    Dmsg0(29, "bsf_dev\n");
1257    dev->state &= ~(ST_EOT|ST_EOF);
1258    dev->file -= num;
1259    dev->file_addr = 0;
1260    dev->file_size = 0;
1261    mt_com.mt_op = MTBSF;
1262    mt_com.mt_count = num;
1263    stat = ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1264    if (stat < 0) {
1265       berrno be;
1266       clrerror_dev(dev, MTBSF);
1267       Mmsg2(dev->errmsg, _("ioctl MTBSF error on %s. ERR=%s.\n"),
1268          dev->print_name(), be.strerror());
1269    }
1270    update_pos_dev(dev);
1271    return stat == 0;
1272 }
1273
1274
1275 /*
1276  * Foward space num records
1277  *  Returns: false on failure
1278  *           true  on success
1279  */
1280 bool DEVICE::fsr(int num)
1281 {
1282    struct mtop mt_com;
1283    int stat;
1284
1285    if (fd < 0) {
1286       dev_errno = EBADF;
1287       Mmsg0(errmsg, _("Bad call to fsr. Device not open\n"));
1288       Emsg0(M_FATAL, 0, errmsg);
1289       return false;
1290    }
1291
1292    if (!is_tape()) {
1293       return false;
1294    }
1295    if (!dev_cap(this, CAP_FSR)) {
1296       Mmsg1(errmsg, _("ioctl MTFSR not permitted on %s.\n"), print_name());
1297       return false;
1298    }
1299
1300    Dmsg1(29, "fsr %d\n", num);
1301    mt_com.mt_op = MTFSR;
1302    mt_com.mt_count = num;
1303    stat = ioctl(fd, MTIOCTOP, (char *)&mt_com);
1304    if (stat == 0) {
1305       clear_eof();
1306       block_num += num;
1307    } else {
1308       berrno be;
1309       struct mtget mt_stat;
1310       clrerror_dev(this, MTFSR);
1311       Dmsg1(100, "FSF fail: ERR=%s\n", be.strerror());
1312       if (dev_get_os_pos(this, &mt_stat)) {
1313          Dmsg4(100, "Adjust from %d:%d to %d:%d\n", file,
1314             block_num, mt_stat.mt_fileno, mt_stat.mt_blkno);
1315          file = mt_stat.mt_fileno;
1316          block_num = mt_stat.mt_blkno;
1317       } else {
1318          if (at_eof()) {
1319             set_eot();
1320          } else {
1321             set_ateof();
1322          }
1323       }
1324       Mmsg3(errmsg, _("ioctl MTFSR %d error on %s. ERR=%s.\n"),
1325          num, print_name(), be.strerror());
1326    }
1327    update_pos_dev(this);
1328    return stat == 0;
1329 }
1330
1331 /*
1332  * Backward space a record
1333  *   Returns:  false on failure
1334  *             true  on success
1335  */
1336 bool
1337 bsr_dev(DEVICE *dev, int num)
1338 {
1339    struct mtop mt_com;
1340    int stat;
1341
1342    if (dev->fd < 0) {
1343       dev->dev_errno = EBADF;
1344       Mmsg0(dev->errmsg, _("Bad call to bsr_dev. Device not open\n"));
1345       Emsg0(M_FATAL, 0, dev->errmsg);
1346       return false;
1347    }
1348
1349    if (!dev->is_tape()) {
1350       return false;
1351    }
1352
1353    if (!dev_cap(dev, CAP_BSR)) {
1354       Mmsg1(dev->errmsg, _("ioctl MTBSR not permitted on %s.\n"), dev->print_name());
1355       return false;
1356    }
1357
1358    Dmsg0(29, "bsr_dev\n");
1359    dev->block_num -= num;
1360    dev->state &= ~(ST_EOF|ST_EOT|ST_EOF);
1361    mt_com.mt_op = MTBSR;
1362    mt_com.mt_count = num;
1363    stat = ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1364    if (stat < 0) {
1365       berrno be;
1366       clrerror_dev(dev, MTBSR);
1367       Mmsg2(dev->errmsg, _("ioctl MTBSR error on %s. ERR=%s.\n"),
1368          dev->print_name(), be.strerror());
1369    }
1370    update_pos_dev(dev);
1371    return stat == 0;
1372 }
1373
1374 /*
1375  * Reposition the device to file, block
1376  * Returns: false on failure
1377  *          true  on success
1378  */
1379 bool
1380 reposition_dev(DEVICE *dev, uint32_t file, uint32_t block)
1381 {
1382    if (dev->fd < 0) {
1383       dev->dev_errno = EBADF;
1384       Mmsg0(dev->errmsg, _("Bad call to reposition_dev. Device not open\n"));
1385       Emsg0(M_FATAL, 0, dev->errmsg);
1386       return false;
1387    }
1388
1389    if (!dev->is_tape()) {
1390       off_t pos = (((off_t)file)<<32) + block;
1391       Dmsg1(100, "===== lseek_dev to %d\n", (int)pos);
1392       if (lseek_dev(dev, pos, SEEK_SET) == (off_t)-1) {
1393          berrno be;
1394          dev->dev_errno = errno;
1395          Mmsg2(dev->errmsg, _("lseek_dev error on %s. ERR=%s.\n"),
1396             dev->print_name(), be.strerror());
1397          return false;
1398       }
1399       dev->file = file;
1400       dev->block_num = block;
1401       dev->file_addr = pos;
1402       return true;
1403    }
1404    Dmsg4(100, "reposition_dev from %u:%u to %u:%u\n",
1405       dev->file, dev->block_num, file, block);
1406    if (file < dev->file) {
1407       Dmsg0(100, "Rewind_dev\n");
1408       if (!rewind_dev(dev)) {
1409          return false;
1410       }
1411    }
1412    if (file > dev->file) {
1413       Dmsg1(100, "fsf %d\n", file-dev->file);
1414       if (!dev->fsf(file-dev->file)) {
1415          Dmsg1(100, "fsf failed! ERR=%s\n", strerror_dev(dev));
1416          return false;
1417       }
1418       Dmsg2(100, "wanted_file=%d at_file=%d\n", file, dev->file);
1419    }
1420    if (block < dev->block_num) {
1421       Dmsg2(100, "wanted_blk=%d at_blk=%d\n", block, dev->block_num);
1422       Dmsg0(100, "bsf_dev 1\n");
1423       bsf_dev(dev, 1);
1424       Dmsg0(100, "fsf_dev 1\n");
1425       dev->fsf(1);
1426       Dmsg2(100, "wanted_blk=%d at_blk=%d\n", block, dev->block_num);
1427    }
1428    if (dev_cap(dev, CAP_POSITIONBLOCKS) && block > dev->block_num) {
1429       /* Ignore errors as Bacula can read to the correct block */
1430       Dmsg1(100, "fsr %d\n", block-dev->block_num);
1431       return dev->fsr(block-dev->block_num);
1432    }
1433    return true;
1434 }
1435
1436
1437
1438 /*
1439  * Write an end of file on the device
1440  *   Returns: 0 on success
1441  *            non-zero on failure
1442  */
1443 int
1444 weof_dev(DEVICE *dev, int num)
1445 {
1446    struct mtop mt_com;
1447    int stat;
1448    Dmsg0(29, "weof_dev\n");
1449    
1450    if (dev->fd < 0) {
1451       dev->dev_errno = EBADF;
1452       Mmsg0(dev->errmsg, _("Bad call to weof_dev. Device not open\n"));
1453       Emsg0(M_FATAL, 0, dev->errmsg);
1454       return -1;
1455    }
1456    dev->file_size = 0;
1457
1458    if (!dev->is_tape()) {
1459       return 0;
1460    }
1461    if (!dev->can_append()) {
1462       Mmsg0(dev->errmsg, _("Attempt to WEOF on non-appendable Volume\n"));
1463       Emsg0(M_FATAL, 0, dev->errmsg);
1464       return -1;
1465    }
1466       
1467    dev->state &= ~(ST_EOT | ST_EOF);  /* remove EOF/EOT flags */
1468    mt_com.mt_op = MTWEOF;
1469    mt_com.mt_count = num;
1470    stat = ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1471    if (stat == 0) {
1472       dev->block_num = 0;
1473       dev->file += num;
1474       dev->file_addr = 0;
1475    } else {
1476       berrno be;
1477       clrerror_dev(dev, MTWEOF);
1478       if (stat == -1) {
1479          Mmsg2(dev->errmsg, _("ioctl MTWEOF error on %s. ERR=%s.\n"),
1480             dev->print_name(), be.strerror());
1481        }
1482    }
1483    return stat;
1484 }
1485
1486 /*
1487  * Return string message with last error in English
1488  *  Be careful not to call this routine from within dev.c
1489  *  while editing an Mmsg() or you will end up in a recursive
1490  *  loop creating a Segmentation Violation.
1491  */
1492 char *
1493 strerror_dev(DEVICE *dev)
1494 {
1495    return dev->errmsg;
1496 }
1497
1498
1499 /*
1500  * If implemented in system, clear the tape
1501  * error status.
1502  */
1503 void
1504 clrerror_dev(DEVICE *dev, int func)
1505 {
1506    const char *msg = NULL;
1507    struct mtget mt_stat;
1508    char buf[100];
1509
1510    dev->dev_errno = errno;         /* save errno */
1511    if (errno == EIO) {
1512       dev->VolCatInfo.VolCatErrors++;
1513    }
1514
1515    if (!dev->is_tape()) {
1516       return;
1517    }
1518    if (errno == ENOTTY || errno == ENOSYS) { /* Function not implemented */
1519       switch (func) {
1520       case -1:
1521          Emsg0(M_ABORT, 0, "Got ENOTTY on read/write!\n");
1522          break;
1523       case MTWEOF:
1524          msg = "WTWEOF";
1525          dev->capabilities &= ~CAP_EOF; /* turn off feature */
1526          break;
1527 #ifdef MTEOM
1528       case MTEOM:
1529          msg = "WTEOM";
1530          dev->capabilities &= ~CAP_EOM; /* turn off feature */
1531          break;
1532 #endif
1533       case MTFSF:
1534          msg = "MTFSF";
1535          dev->capabilities &= ~CAP_FSF; /* turn off feature */
1536          break;
1537       case MTBSF:
1538          msg = "MTBSF";
1539          dev->capabilities &= ~CAP_BSF; /* turn off feature */
1540          break;
1541       case MTFSR:
1542          msg = "MTFSR";
1543          dev->capabilities &= ~CAP_FSR; /* turn off feature */
1544          break;
1545       case MTBSR:
1546          msg = "MTBSR";
1547          dev->capabilities &= ~CAP_BSR; /* turn off feature */
1548          break;
1549       case MTREW:
1550          msg = "MTREW";
1551          break;
1552 #ifdef MTSETBLK
1553       case MTSETBLK:
1554          msg = "MTSETBLK";
1555          break;
1556 #endif
1557 #ifdef MTSETBSIZ 
1558       case MTSETBSIZ:
1559          msg = "MTSETBSIZ";
1560          break;
1561 #endif
1562 #ifdef MTSRSZ
1563       case MTSRSZ:
1564          msg = "MTSRSZ";
1565          break;
1566 #endif
1567       default:
1568          bsnprintf(buf, sizeof(buf), "unknown func code %d", func);
1569          msg = buf;
1570          break;
1571       }
1572       if (msg != NULL) {
1573          dev->dev_errno = ENOSYS;
1574          Mmsg1(dev->errmsg, _("I/O function \"%s\" not supported on this device.\n"), msg);
1575          Emsg0(M_ERROR, 0, dev->errmsg);
1576       }
1577    }
1578    /* On some systems such as NetBSD, this clears all errors */
1579    ioctl(dev->fd, MTIOCGET, (char *)&mt_stat);
1580
1581 /* Found on Linux */
1582 #ifdef MTIOCLRERR
1583 {
1584    struct mtop mt_com;
1585    mt_com.mt_op = MTIOCLRERR;
1586    mt_com.mt_count = 1;
1587    /* Clear any error condition on the tape */
1588    ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1589    Dmsg0(200, "Did MTIOCLRERR\n");
1590 }
1591 #endif
1592
1593 /* Typically on FreeBSD */
1594 #ifdef MTIOCERRSTAT
1595 {
1596    /* Read and clear SCSI error status */
1597    union mterrstat mt_errstat;
1598    Dmsg2(200, "Doing MTIOCERRSTAT errno=%d ERR=%s\n", dev->dev_errno,
1599       strerror(dev->dev_errno));
1600    ioctl(dev->fd, MTIOCERRSTAT, (char *)&mt_errstat);
1601 }
1602 #endif
1603
1604 /* Clear Subsystem Exception OSF1 */
1605 #ifdef MTCSE
1606 {
1607    struct mtop mt_com;
1608    mt_com.mt_op = MTCSE;
1609    mt_com.mt_count = 1;
1610    /* Clear any error condition on the tape */
1611    ioctl(dev->fd, MTIOCTOP, (char *)&mt_com);
1612    Dmsg0(200, "Did MTCSE\n");
1613 }
1614 #endif
1615 }
1616
1617 /*
1618  * Flush buffer contents
1619  *  No longer used.
1620  */
1621 int flush_dev(DEVICE *dev)
1622 {
1623    return 1;
1624 }
1625
1626 static void do_close(DEVICE *dev)
1627 {
1628
1629    Dmsg1(29, "really close_dev %s\n", dev->print_name());
1630    if (dev->fd >= 0) {
1631       close(dev->fd);
1632    }
1633
1634    if (!unmount_dev(dev, 1)) {
1635       Dmsg1(0, "Cannot unmount device %s.\n", dev->print_name());
1636    }
1637    
1638    /* Remove the last part file if it is empty */
1639    if (dev->can_append() && (dev->num_parts > 0)) {
1640       struct stat statp;
1641       POOL_MEM archive_name(PM_FNAME);
1642       dev->part = dev->num_parts;
1643       Dmsg1(100, "Call make_dvd_filename. Vol=%s\n", dev->VolCatInfo.VolCatName);
1644       make_spooled_dvd_filename(dev, archive_name);
1645       /* Check that the part file is empty */
1646       if ((stat(archive_name.c_str(), &statp) == 0) && (statp.st_size == 0)) {
1647          Dmsg1(100, "unlink(%s)\n", archive_name.c_str());
1648          unlink(archive_name.c_str());
1649       }
1650    }
1651    
1652    /* Clean up device packet so it can be reused */
1653    dev->fd = -1;
1654    dev->state &= ~(ST_OPENED|ST_LABEL|ST_READ|ST_APPEND|ST_EOT|ST_WEOT|ST_EOF);
1655    dev->label_type = B_BACULA_LABEL;
1656    dev->file = dev->block_num = 0;
1657    dev->file_size = 0;
1658    dev->file_addr = 0;
1659    dev->part = 0;
1660    dev->num_parts = 0;
1661    dev->part_size = 0;
1662    dev->part_start = 0;
1663    dev->EndFile = dev->EndBlock = 0;
1664    memset(&dev->VolCatInfo, 0, sizeof(dev->VolCatInfo));
1665    memset(&dev->VolHdr, 0, sizeof(dev->VolHdr));
1666    if (dev->tid) {
1667       stop_thread_timer(dev->tid);
1668       dev->tid = 0;
1669    }
1670    dev->use_count = 0;
1671    dev->openmode = 0;
1672 }
1673
1674 /*
1675  * Close the device
1676  */
1677 void DEVICE::close()
1678 {
1679    /*if (fd >= 0 && use_count == 1) {*/
1680    /* No need to check if fd >= 0: it is checked again
1681     * in do_close, and do_close MUST be called for volumes
1682     * splitted in parts, even if fd == -1. */
1683    if (use_count == 1) {
1684       do_close(this);
1685    } else if (use_count > 0) {
1686       use_count--;
1687    }
1688
1689 #ifdef FULL_DEBUG
1690    ASSERT(use_count >= 0);
1691 #endif
1692 }
1693
1694
1695 bool truncate_dev(DEVICE *dev)
1696 {
1697    Dmsg1(100, "truncate_dev %s\n", dev->print_name());
1698    if (dev->is_tape()) {
1699       return true;                    /* we don't really truncate tapes */
1700       /* maybe we should rewind and write and eof ???? */
1701    }
1702    
1703    if (dev->is_dvd()) {
1704       Mmsg1(dev->errmsg, _("Truncate DVD %s not supported.\n"), dev->print_name());
1705       return false;   /* we cannot truncate DVDs */
1706    }
1707    
1708    if (ftruncate(dev->fd, 0) != 0) {
1709       berrno be;
1710       Mmsg2(dev->errmsg, _("Unable to truncate device %s. ERR=%s\n"), 
1711             dev->print_name(), be.strerror());
1712       return false;
1713    }
1714    return true;
1715 }
1716
1717 /* Return the resource name for the device */
1718 const char *DEVICE::name() const
1719 {
1720    return device->hdr.name;
1721 }
1722
1723 char *
1724 dev_vol_name(DEVICE *dev)
1725 {
1726    return dev->VolCatInfo.VolCatName;
1727 }
1728
1729 uint32_t dev_block(DEVICE *dev)
1730 {
1731    update_pos_dev(dev);
1732    return dev->block_num;
1733 }
1734
1735 uint32_t dev_file(DEVICE *dev)
1736 {
1737    update_pos_dev(dev);
1738    return dev->file;
1739 }
1740
1741 /*
1742  * Free memory allocated for the device
1743  */
1744 void
1745 term_dev(DEVICE *dev)
1746 {
1747    if (!dev) {
1748       dev->dev_errno = EBADF;
1749       Mmsg0(dev->errmsg, _("Bad call to term_dev. Device not open\n"));
1750       Emsg0(M_FATAL, 0, dev->errmsg);
1751       return;
1752    }
1753    Dmsg1(29, "term_dev: %s\n", dev->print_name());
1754    do_close(dev);
1755    if (dev->dev_name) {
1756       free_memory(dev->dev_name);
1757       dev->dev_name = NULL;
1758    }
1759    if (dev->prt_name) {
1760       free_memory(dev->prt_name);
1761       dev->prt_name = NULL;
1762    }
1763    if (dev->errmsg) {
1764       free_pool_memory(dev->errmsg);
1765       dev->errmsg = NULL;
1766    }
1767    pthread_mutex_destroy(&dev->mutex);
1768    pthread_cond_destroy(&dev->wait);
1769    pthread_cond_destroy(&dev->wait_next_vol);
1770    pthread_mutex_destroy(&dev->spool_mutex);
1771    rwl_destroy(&dev->lock);
1772    if (dev->attached_dcrs) {
1773       delete dev->attached_dcrs;
1774       dev->attached_dcrs = NULL;
1775    }
1776    if (dev->state & ST_MALLOC) {
1777       free_pool_memory((POOLMEM *)dev);
1778    }
1779 }
1780
1781 /*
1782  * This routine initializes the device wait timers
1783  */
1784 void init_device_wait_timers(DCR *dcr)
1785 {
1786    DEVICE *dev = dcr->dev;
1787    JCR *jcr = dcr->jcr;
1788
1789    /* ******FIXME******* put these on config variables */
1790    dev->min_wait = 60 * 60;
1791    dev->max_wait = 24 * 60 * 60;
1792    dev->max_num_wait = 9;              /* 5 waits =~ 1 day, then 1 day at a time */
1793    dev->wait_sec = dev->min_wait;
1794    dev->rem_wait_sec = dev->wait_sec;
1795    dev->num_wait = 0;
1796    dev->poll = false;
1797    dev->BadVolName[0] = 0;
1798
1799    jcr->min_wait = 60 * 60;
1800    jcr->max_wait = 24 * 60 * 60;
1801    jcr->max_num_wait = 9;              /* 5 waits =~ 1 day, then 1 day at a time */
1802    jcr->wait_sec = jcr->min_wait;
1803    jcr->rem_wait_sec = jcr->wait_sec;
1804    jcr->num_wait = 0;
1805
1806 }
1807
1808 void init_jcr_device_wait_timers(JCR *jcr)
1809 {
1810    /* ******FIXME******* put these on config variables */
1811    jcr->min_wait = 60 * 60;
1812    jcr->max_wait = 24 * 60 * 60;
1813    jcr->max_num_wait = 9;              /* 5 waits =~ 1 day, then 1 day at a time */
1814    jcr->wait_sec = jcr->min_wait;
1815    jcr->rem_wait_sec = jcr->wait_sec;
1816    jcr->num_wait = 0;
1817 }
1818
1819
1820 /*
1821  * The dev timers are used for waiting on a particular device 
1822  *
1823  * Returns: true if time doubled
1824  *          false if max time expired
1825  */
1826 bool double_dev_wait_time(DEVICE *dev)
1827 {
1828    dev->wait_sec *= 2;               /* double wait time */
1829    if (dev->wait_sec > dev->max_wait) {   /* but not longer than maxtime */
1830       dev->wait_sec = dev->max_wait;
1831    }
1832    dev->num_wait++;
1833    dev->rem_wait_sec = dev->wait_sec;
1834    if (dev->num_wait >= dev->max_num_wait) {
1835       return false;
1836    }
1837    return true;
1838 }
1839
1840
1841 void set_os_device_parameters(DEVICE *dev)
1842 {
1843 #ifdef HAVE_LINUX_OS
1844    struct mtop mt_com;
1845    if (dev->min_block_size == dev->max_block_size &&
1846        dev->min_block_size == 0) {    /* variable block mode */
1847       mt_com.mt_op = MTSETBLK;
1848       mt_com.mt_count = 0;
1849       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1850          clrerror_dev(dev, MTSETBLK);
1851       }
1852       mt_com.mt_op = MTSETDRVBUFFER;
1853       mt_com.mt_count = MT_ST_CLEARBOOLEANS;
1854       if (!dev_cap(dev, CAP_TWOEOF)) {
1855          mt_com.mt_count |= MT_ST_TWO_FM;
1856       }
1857       if (dev_cap(dev, CAP_EOM)) {
1858          mt_com.mt_count |= MT_ST_FAST_MTEOM;
1859       }
1860       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1861          clrerror_dev(dev, MTSETBLK);
1862       }
1863    }
1864    return;
1865 #endif
1866
1867 #ifdef HAVE_NETBSD_OS
1868    struct mtop mt_com;
1869    if (dev->min_block_size == dev->max_block_size &&
1870        dev->min_block_size == 0) {    /* variable block mode */
1871       mt_com.mt_op = MTSETBSIZ;
1872       mt_com.mt_count = 0;
1873       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1874          clrerror_dev(dev, MTSETBSIZ);
1875       }
1876       /* Get notified at logical end of tape */
1877       mt_com.mt_op = MTEWARN;
1878       mt_com.mt_count = 1;
1879       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1880          clrerror_dev(dev, MTEWARN);
1881       }
1882    }
1883    return;
1884 #endif
1885
1886 #if HAVE_FREEBSD_OS || HAVE_OPENBSD_OS
1887    struct mtop mt_com;
1888    if (dev->min_block_size == dev->max_block_size &&
1889        dev->min_block_size == 0) {    /* variable block mode */
1890       mt_com.mt_op = MTSETBSIZ;
1891       mt_com.mt_count = 0;
1892       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1893          clrerror_dev(dev, MTSETBSIZ);
1894       }
1895    }
1896    return;
1897 #endif
1898
1899 #ifdef HAVE_SUN_OS
1900    struct mtop mt_com;
1901    if (dev->min_block_size == dev->max_block_size &&
1902        dev->min_block_size == 0) {    /* variable block mode */
1903       mt_com.mt_op = MTSRSZ;
1904       mt_com.mt_count = 0;
1905       if (ioctl(dev->fd, MTIOCTOP, (char *)&mt_com) < 0) {
1906          clrerror_dev(dev, MTSRSZ);
1907       }
1908    }
1909    return;
1910 #endif
1911 }
1912
1913 static bool dev_get_os_pos(DEVICE *dev, struct mtget *mt_stat)
1914 {
1915    return dev_cap(dev, CAP_MTIOCGET) && 
1916           ioctl(dev->fd, MTIOCGET, (char *)mt_stat) == 0 &&
1917           mt_stat->mt_fileno >= 0;
1918 }
1919
1920 static char *modes[] = {
1921    "CREATE_READ_WRITE",
1922    "OPEN_READ_WRITE",
1923    "OPEN_READ_ONLY",
1924    "OPEN_WRITE_ONLY"
1925 };
1926
1927
1928 static char *mode_to_str(int mode)  
1929 {
1930    return modes[mode-1];
1931 }