X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Fdev.h;h=9d022184408efeb35c45561869a163948b5d7f63;hb=5c358307600ad7cd6983b8773f8d7dc1e7346c56;hp=3344ec49e993f97ecf284ebe045f712bc8ca9d77;hpb=b58f32ee0c8cce5b5f7af1416966b8bd2b3ccb6d;p=bacula%2Fbacula diff --git a/bacula/src/stored/dev.h b/bacula/src/stored/dev.h index 3344ec49e9..9d02218440 100644 --- a/bacula/src/stored/dev.h +++ b/bacula/src/stored/dev.h @@ -95,7 +95,8 @@ enum { B_TAPE_DEV, B_DVD_DEV, B_FIFO_DEV, - B_VTL_DEV + B_FAKETAPE_DEV, /* change to B_TAPE_DEV after init */ + B_VTL_DEV }; /* Generic status bits returned from status_dev() */ @@ -197,11 +198,9 @@ struct VOLUME_CAT_INFO { class DEVRES; /* Device resource defined in stored_conf.h */ - class DCR; /* forward reference */ class VOLRES; /* forward reference */ - /* * Device structure definition. There is one of these for * each physical device. Everything here is "global" to @@ -216,6 +215,8 @@ private: bool m_unload; /* set when Volume must be unloaded */ bool m_load; /* set when Volume must be loaded */ int m_num_reserved; /* counter of device reservations */ + int32_t m_slot; /* slot loaded in drive or -1 if none */ + public: DEVICE * volatile swap_dev; /* Swap vol from this device */ dlist *attached_dcrs; /* attached DCR list */ @@ -237,11 +238,11 @@ public: bool initiated; /* set when init_dev() called */ int label_type; /* Bacula/ANSI/IBM label types */ uint32_t drive_index; /* Autochanger drive index (base 0) */ - int32_t Slot; /* Slot currently in drive (base 1) */ POOLMEM *dev_name; /* Physical device name */ POOLMEM *prt_name; /* Name used for display purposes */ char *errmsg; /* nicely edited error message */ uint32_t block_num; /* current block number base 0 */ + uint32_t LastBlock; /* last DEV_BLOCK number written to Volume */ uint32_t file; /* current file number base 0 */ uint64_t file_addr; /* Current file read/write address */ uint64_t file_size; /* Current file size */ @@ -307,11 +308,13 @@ public: int is_autochanger() const { return capabilities & CAP_AUTOCHANGER; } int requires_mount() const { return capabilities & CAP_REQMOUNT; } int is_removable() const { return capabilities & CAP_REM; } - int is_tape() const { return dev_type == B_TAPE_DEV; } + int is_tape() const { return (dev_type == B_TAPE_DEV || + dev_type == B_FAKETAPE_DEV); } int is_file() const { return dev_type == B_FILE_DEV; } int is_fifo() const { return dev_type == B_FIFO_DEV; } int is_dvd() const { return dev_type == B_DVD_DEV; } int is_vtl() const { return dev_type == B_VTL_DEV; } + int is_faketape() const { return dev_type == B_FAKETAPE_DEV; } int is_open() const { return m_fd >= 0; } int is_offline() const { return state & ST_OFFLINE; } int is_labeled() const { return state & ST_LABEL; } @@ -385,6 +388,7 @@ public: void clear_load() { m_load = false; }; char *bstrerror(void) { return errmsg; }; char *print_errmsg() { return errmsg; }; + int32_t get_slot() const { return m_slot; }; void clear_volhdr(); /* in dev.c */ @@ -415,12 +419,24 @@ public: void clrerror(int func); /* in dev.c */ boffset_t lseek(DCR *dcr, boffset_t offset, int whence); /* in dev.c */ bool update_pos(DCR *dcr); /* in dev.c */ + void set_slot(int32_t slot); /* in dev.c */ + void clear_slot(); /* in dev.c */ + + bool update_freespace(); /* in dvd.c */ uint32_t get_file() const { return file; }; uint32_t get_block_num() const { return block_num; }; int fd() const { return m_fd; }; + /* low level operations */ + void init_backend(); + int (*d_open)(const char *pathname, int flags, ...); + int (*d_read)(int fd, void *buffer, unsigned int count); + int (*d_write)(int fd, const void *buffer, unsigned int count); + int (*d_close)(int fd); + int (*d_ioctl)(int fd, unsigned long int request, ...); + /* * Locking and blocking calls */ @@ -556,6 +572,7 @@ public: void set_in_use() { m_in_use = true; }; void clear_in_use() { m_in_use = false; }; void set_slot(int32_t slot) { m_slot = slot; }; + void clear_slot() { m_slot = -1; }; int32_t get_slot() const { return m_slot; }; };