]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/dev.h
Simplify two messages in acquire.c
[bacula/bacula] / bacula / src / stored / dev.h
index 83e794c1b24f8e8dae03190aa68cd7f8253a1847..4bcc54b7781a5f2d6dce169dc64775ece7de7d68 100644 (file)
@@ -6,7 +6,7 @@
  *
  */
 /*
-   Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+   Copyright (C) 2000-2003 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -45,6 +45,9 @@
 /* Arguments to open_dev() */
 #define READ_WRITE 0
 #define READ_ONLY  1
+#define OPEN_READ_WRITE 0
+#define OPEN_READ_ONLY  1
+#define OPEN_WRITE_ONLY 2
 
 /* Generic status bits returned from status_dev() */
 #define MT_TAPE      (1<<0)                /* is tape device */
 #define MT_IM_REP_EN (1<<9)                /* immediate report enabled */
 
 
+/* Test capabilities */
+#define dev_cap(dev, cap) ((dev)->capabilities & (cap))
+
 /* Bits for device capabilities */
-#define CAP_EOF          0x0001       /* has MTWEOF */
-#define CAP_BSR          0x0002       /* has MTBSR */
-#define CAP_BSF          0x0004       /* has MTBSF */
-#define CAP_FSR          0x0008       /* has MTFSR */
-#define CAP_FSF          0x0010       /* has MTFSF */
-#define CAP_EOM          0x0020       /* has MTEOM */
-#define CAP_REM          0x0040       /* is removable media */
-#define CAP_RACCESS      0x0080       /* is random access device */
-#define CAP_AUTOMOUNT    0x0100       /* Read device at start to see what is there */
-#define CAP_LABEL        0x0200       /* Label blank tapes */
-#define CAP_ANONVOLS     0x0400       /* Mount without knowing volume name */
-#define CAP_ALWAYSOPEN   0x0800       /* always keep device open */
-#define CAP_AUTOCHANGER  0x1000       /* AutoChanger */
+#define CAP_EOF            0x0001     /* has MTWEOF */
+#define CAP_BSR            0x0002     /* has MTBSR */
+#define CAP_BSF            0x0004     /* has MTBSF */
+#define CAP_FSR            0x0008     /* has MTFSR */
+#define CAP_FSF            0x0010     /* has MTFSF */
+#define CAP_EOM            0x0020     /* has MTEOM */
+#define CAP_REM            0x0040     /* is removable media */
+#define CAP_RACCESS        0x0080     /* is random access device */
+#define CAP_AUTOMOUNT      0x0100     /* Read device at start to see what is there */
+#define CAP_LABEL          0x0200     /* Label blank tapes */
+#define CAP_ANONVOLS       0x0400     /* Mount without knowing volume name */
+#define CAP_ALWAYSOPEN     0x0800     /* always keep device open */
+#define CAP_AUTOCHANGER    0x1000     /* AutoChanger */
 #define CAP_OFFLINEUNMOUNT 0x2000     /* Offline before unmount */
-
-
-/* Tape state bits */
-#define ST_OPENED    0x001            /* set when device opened */
-#define ST_TAPE      0x002            /* is a tape device */  
-#define ST_LABEL     0x004            /* label found */
-#define ST_MALLOC    0x008            /* dev packet malloc'ed in init_dev() */
-#define ST_APPEND    0x010            /* ready for Bacula append */
-#define ST_READ      0x020            /* ready for Bacula read */
-#define ST_EOT       0x040            /* at end of tape */
-#define ST_WEOT      0x080            /* Got EOT on write */
-#define ST_EOF       0x100            /* Read EOF i.e. zero bytes */
-#define ST_NEXTVOL   0x200            /* Start writing on next volume */
-#define ST_SHORT     0x400            /* Short block read */
+#define CAP_STREAM         0x4000     /* Stream device */
+#define CAP_BSFATEOM       0x8000     /* Backspace file at EOM */
+
+/* Test state */
+#define dev_state(dev, state) ((dev)->state & (state))
+
+/* Device state bits */
+#define ST_OPENED    0x0001           /* set when device opened */
+#define ST_TAPE      0x0002           /* is a tape device */  
+#define ST_FILE      0x0004           /* is a file device */
+#define ST_FIFO      0x0008           /* is a fifo device */
+#define ST_PROG      0x0010           /* is a program device */
+#define ST_LABEL     0x0020           /* label found */
+#define ST_MALLOC    0x0040           /* dev packet malloc'ed in init_dev() */
+#define ST_APPEND    0x0080           /* ready for Bacula append */
+#define ST_READ      0x0100           /* ready for Bacula read */
+#define ST_EOT       0x0200           /* at end of tape */
+#define ST_WEOT      0x0400           /* Got EOT on write */
+#define ST_EOF       0x0800           /* Read EOF i.e. zero bytes */
+#define ST_NEXTVOL   0x1000           /* Start writing on next volume */
+#define ST_SHORT     0x2000           /* Short block read */
 
 /* dev_blocked states (mutually exclusive) */
 #define BST_NOT_BLOCKED       0       /* not blocked */
 #define BST_DOING_ACQUIRE     3       /* Opening/validating/moving tape */
 #define BST_WRITING_LABEL     4       /* Labeling a tape */  
 #define BST_UNMOUNTED_WAITING_FOR_SYSOP 5 /* Closed by user during mount request */
+#define BST_MOUNT             6       /* Mount request */
 
 /* Volume Catalog Information structure definition */
 typedef struct s_volume_catalog_info {
@@ -110,7 +124,9 @@ typedef struct s_volume_catalog_info {
    uint32_t VolCatReads;              /* Number of reads this volume */
    uint32_t VolCatRecycles;           /* Number of recycles this volume */
    int32_t  Slot;                     /* Slot in changer */
-   uint64_t VolCatMaxBytes;           /* max bytes to write */
+   uint32_t VolCatMaxJobs;            /* Maximum Jobs to write to volume */
+   uint32_t VolCatMaxFiles;           /* Maximum files to write to volume */
+   uint64_t VolCatMaxBytes;           /* Max bytes to write to volume */
    uint64_t VolCatCapacityBytes;      /* capacity estimate */
    char VolCatStatus[20];             /* Volume status */
    char VolCatName[MAX_NAME_LENGTH];  /* Desired volume to mount */
@@ -126,10 +142,8 @@ typedef struct s_steal_lock {
 /* Device structure definition */
 typedef struct s_device {
    struct s_device *next;             /* pointer to next open device */
+   struct s_device *prev;             /* pointer to prev open device */
    void *attached_jcrs;               /* attached JCR list */
-#ifdef NEW_LOCK
-   brwlock_t lock;                    /* new device locking mechanism */
-#endif
    pthread_mutex_t mutex;             /* access control */
    pthread_cond_t wait;               /* thread wait variable */
    pthread_cond_t wait_next_vol;      /* wait for tape to be mounted */
@@ -147,18 +161,19 @@ typedef struct s_device {
    char *errmsg;                      /* nicely edited error message */
    uint32_t block_num;                /* current block number base 0 */
    uint32_t file;                     /* current file number base 0 */
-   uint64_t file_bytes;               /* bytes in this file */
-   uint32_t LastBlockNumWritten;      /* last block written */
+   uint64_t file_addr;                /* Current file read/write address */
+   uint32_t EndBlock;                 /* last block written */
+   uint32_t EndFile;                  /* last file written */
    uint32_t min_block_size;           /* min block size */
    uint32_t max_block_size;           /* max block size */
-   uint32_t max_volume_jobs;          /* max jobs to put on one volume */
-   uint64_t max_volume_files;         /* max files to put on one volume */
    uint64_t max_volume_size;          /* max bytes to put on one volume */
    uint64_t max_file_size;            /* max file size to put in one file on volume */
    uint64_t volume_capacity;          /* advisory capacity */
    uint32_t max_rewind_wait;          /* max secs to allow for rewind */
    uint32_t max_open_wait;            /* max secs to allow for open */
+   uint32_t max_open_vols;            /* max simultaneous open volumes */
    void *device;                      /* pointer to Device Resource */
+   btimer_id tid;                     /* timer id */
 
    VOLUME_CAT_INFO VolCatInfo;        /* Volume Catalog Information */
    VOLUME_LABEL VolHdr;               /* Actual volume label */