Changeset 6f13257 in mainline for uspace/srv/bd/hr/var.h
- Timestamp:
- 2025-05-20T11:01:31Z (2 months ago)
- Children:
- c5b60e25
- Parents:
- a2281efc
- git-author:
- Miroslav Cimerman <mc@…> (2025-05-20 10:55:15)
- git-committer:
- Miroslav Cimerman <mc@…> (2025-05-20 11:01:31)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/var.h
ra2281efc r6f13257 47 47 #include "superblock.h" 48 48 49 #define NAME 50 #define HR_STRIP_SIZE 49 #define NAME "hr" 50 #define HR_STRIP_SIZE DATA_XFER_LIMIT 51 51 52 52 struct hr_volume; … … 56 56 57 57 typedef struct hr_ops { 58 errno_t 59 errno_t 60 void 61 errno_t 58 errno_t (*create)(hr_volume_t *); 59 errno_t (*init)(hr_volume_t *); 60 void (*state_event)(hr_volume_t *); 61 errno_t (*add_hotspare)(hr_volume_t *, service_id_t); 62 62 } hr_ops_t; 63 63 64 64 typedef struct hr_volume { 65 link_t lvolumes;/* link to all volumes list */66 hr_ops_t hr_ops;/* level init and create fcns */67 bd_srvs_t hr_bds;/* block interface to the vol */68 service_id_t svc_id;/* service id */65 link_t lvolumes; /* link to all volumes list */ 66 hr_ops_t hr_ops; /* level init and create fcns */ 67 bd_srvs_t hr_bds; /* block interface to the vol */ 68 service_id_t svc_id; /* service id */ 69 69 70 fibril_mutex_t lock;/* XXX: gone after para */71 list_t range_lock_list;/* list of range locks */72 fibril_mutex_t range_lock_list_lock;/* range locks list lock */73 hr_fpool_t *fge;/* fibril pool */70 fibril_mutex_t lock; /* XXX: gone after para */ 71 list_t range_lock_list; /* list of range locks */ 72 fibril_mutex_t range_lock_list_lock; /* range locks list lock */ 73 hr_fpool_t *fge; /* fibril pool */ 74 74 75 void 76 fibril_mutex_t md_lock;/* lock protecting in_mem_md */75 void *in_mem_md; 76 fibril_mutex_t md_lock; /* lock protecting in_mem_md */ 77 77 78 78 hr_superblock_ops_t *meta_ops; 79 79 80 80 /* invariants */ 81 size_t extent_no;/* number of extents */82 size_t bsize;/* block size */83 uint64_t truncated_blkno;/* blkno per extent */84 uint64_t data_blkno;/* no. of user usable blocks */85 uint64_t data_offset;/* user data offset in blocks */86 uint32_t strip_size;/* strip size */87 hr_level_t level;/* volume level */88 hr_layout_t layout;/* RAID Level Qualifier */89 char 81 size_t extent_no; /* number of extents */ 82 size_t bsize; /* block size */ 83 uint64_t truncated_blkno; /* blkno per extent */ 84 uint64_t data_blkno; /* no. of user usable blocks */ 85 uint64_t data_offset; /* user data offset in blocks */ 86 uint32_t strip_size; /* strip size */ 87 hr_level_t level; /* volume level */ 88 hr_layout_t layout; /* RAID Level Qualifier */ 89 char devname[HR_DEVNAME_LEN]; 90 90 91 hr_extent_t 92 fibril_rwlock_t extents_lock;/* extent service id lock */91 hr_extent_t extents[HR_MAX_EXTENTS]; 92 fibril_rwlock_t extents_lock; /* extent service id lock */ 93 93 94 size_t hotspare_no;/* no. of available hotspares */95 hr_extent_t 96 fibril_mutex_t hotspare_lock;/* lock protecting hotspares */94 size_t hotspare_no; /* no. of available hotspares */ 95 hr_extent_t hotspares[HR_MAX_HOTSPARES]; 96 fibril_mutex_t hotspare_lock; /* lock protecting hotspares */ 97 97 98 fibril_rwlock_t states_lock;/* states lock */98 fibril_rwlock_t states_lock; /* states lock */ 99 99 100 _Atomic bool state_dirty;/* dirty state */100 _Atomic bool state_dirty; /* dirty state */ 101 101 102 102 /* XXX: atomic_uint_least64_t? */ 103 _Atomic uint64_t rebuild_blk; 104 _Atomic int open_cnt;/* open/close() counter */105 hr_vol_state_t state;/* volume state */106 void 103 _Atomic uint64_t rebuild_blk; /* rebuild position */ 104 _Atomic int open_cnt; /* open/close() counter */ 105 hr_vol_state_t state; /* volume state */ 106 void (*state_callback)(hr_volume_t *, size_t, errno_t); 107 107 } hr_volume_t; 108 108 … … 118 118 119 119 typedef struct hr_range_lock { 120 link_t 121 fibril_mutex_t 122 hr_volume_t *vol;/* back-pointer to volume */123 uint64_t off;/* start of the range */124 uint64_t len;/* length of the range */120 link_t link; 121 fibril_mutex_t lock; 122 hr_volume_t *vol; /* back-pointer to volume */ 123 uint64_t off; /* start of the range */ 124 uint64_t len; /* length of the range */ 125 125 126 size_t pending;/* prot. by vol->range_lock_list_lock */127 bool ignore;/* prot. by vol->range_lock_list_lock */126 size_t pending; /* prot. by vol->range_lock_list_lock */ 127 bool ignore; /* prot. by vol->range_lock_list_lock */ 128 128 } hr_range_lock_t; 129 129 130 extern errno_t 131 extern errno_t 132 extern errno_t 130 extern errno_t hr_raid0_create(hr_volume_t *); 131 extern errno_t hr_raid1_create(hr_volume_t *); 132 extern errno_t hr_raid5_create(hr_volume_t *); 133 133 134 extern errno_t 135 extern errno_t 136 extern errno_t 134 extern errno_t hr_raid0_init(hr_volume_t *); 135 extern errno_t hr_raid1_init(hr_volume_t *); 136 extern errno_t hr_raid5_init(hr_volume_t *); 137 137 138 extern void 139 extern void 140 extern void 138 extern void hr_raid0_state_event(hr_volume_t *); 139 extern void hr_raid1_state_event(hr_volume_t *); 140 extern void hr_raid5_state_event(hr_volume_t *); 141 141 142 extern errno_t 143 extern errno_t 142 extern errno_t hr_raid1_add_hotspare(hr_volume_t *, service_id_t); 143 extern errno_t hr_raid5_add_hotspare(hr_volume_t *, service_id_t); 144 144 145 145 #endif
Note:
See TracChangeset
for help on using the changeset viewer.