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