mirror of
https://github.com/Stichting-MINIX-Research-Foundation/netbsd.git
synced 2025-08-09 22:20:19 -04:00
91 lines
1.8 KiB
Plaintext
91 lines
1.8 KiB
Plaintext
|
|
|
|
/* constant dm_target structures for error, zero, linear, stripes etc. */
|
|
struct dm_target {
|
|
int (*init)(struct dm_table_entry *, int argc, char **argv);
|
|
int (*destroy)(struct dm_table_entry *);
|
|
int (*strategy)(struct dm_table_entry *, struct buf *);
|
|
int (*upcall)(struct dm_table_entry *, struct buf *);
|
|
|
|
SLIST_ENTRY(dm_target) next;
|
|
};
|
|
|
|
|
|
struct dm_table_entry {
|
|
struct dm_dev *dm_dev; /* backlink */
|
|
uint64_t start;
|
|
uint64_t length;
|
|
|
|
struct dm_target *target;
|
|
void *target_config;
|
|
SLIST_ENTRY(dm_table_entry) next;
|
|
};
|
|
SLIST(dm_table, dm_table_entry);
|
|
|
|
|
|
struct dm_pdev {
|
|
struct vnode *pdev_vnode;
|
|
int refcnt;
|
|
SLIST_ENTRY(dm_pdev) next_pdev;
|
|
};
|
|
SLIST(dm_pdevs, pm_pdev);
|
|
|
|
|
|
struct dm_dev {
|
|
char name[DM_NAME_LEN];
|
|
char uuid[DM_UUID_LEN];
|
|
|
|
int minor;
|
|
uint32_t flags;
|
|
|
|
kmutex_t dev_mtx;
|
|
uint32_t event_nr;
|
|
uint32_t ref_cnt;
|
|
|
|
struct dm_pdev pdevs;
|
|
|
|
int cur_active_table;
|
|
struct dm_table tables[2];
|
|
|
|
struct dm_dev_list upcalls;
|
|
SLIST_NEXT(dm_dev) next_upcall;
|
|
|
|
SLIST_NEXT(dm_dev) next_devlist;
|
|
};
|
|
SLIST(dm_dev_list, dm_dev) dm_devs;
|
|
|
|
|
|
/* for zero,error : dm_target->target_config == NULL */
|
|
/* for linear : */
|
|
struct target_linear_config {
|
|
struct dm_pdev *pdev;
|
|
uint64_t offset;
|
|
};
|
|
|
|
|
|
/* for mirror : */
|
|
struct target_mirror_config {
|
|
struct dm_pdev *orig;
|
|
struct dm_pdev *copies[MAX_MIRROR_COPIES];
|
|
|
|
/* copied blocks bitmaps administration etc*/
|
|
struct dm_pdev *log_pdev; /* for administration */
|
|
uint64_t log_regionsize; /* blocksize of mirror */
|
|
|
|
/* list of parts that still need copied etc.; run length encoded? */
|
|
....
|
|
};
|
|
|
|
|
|
/* for snapshot : */
|
|
struct target_snapshot_config {
|
|
struct dm_dev *orig;
|
|
|
|
/* modified blocks bitmaps administration etc*/
|
|
struct dm_pdev *log_pdev;
|
|
uint64_t log_regionsize;
|
|
/* list of sector renames to the log device */
|
|
...
|
|
};
|
|
|