Changeset 5d96f427 in mainline for uspace/srv/bd/hr/util.c
- Timestamp:
- 2024-11-15T16:44:25Z (6 months ago)
- Children:
- 733564a
- Parents:
- bd51105
- git-author:
- Miroslav Cimerman <mc@…> (2024-11-15 16:08:11)
- git-committer:
- Miroslav Cimerman <mc@…> (2024-11-15 16:44:25)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/util.c
rbd51105 r5d96f427 50 50 errno_t hr_init_devs(hr_volume_t *vol) 51 51 { 52 log_msg(LOG_DEFAULT, LVL_NOTE, "hr_init_devs()");52 DPRINTF("hr_init_devs()\n"); 53 53 54 54 errno_t rc; 55 55 size_t i; 56 57 for (i = 0; i < vol->dev_no; i++) { 58 if (vol->extents[i].svc_id == 0) { 59 vol->extents[i].status = HR_EXT_MISSING; 60 continue; 61 } 62 rc = block_init(vol->extents[i].svc_id); 63 vol->extents[i].status = HR_EXT_ONLINE; 64 log_msg(LOG_DEFAULT, LVL_DEBUG, 65 "hr_init_devs(): initing (%" PRIun ")", 66 vol->extents[i].svc_id); 56 hr_extent_t *extent; 57 58 for (i = 0; i < vol->dev_no; i++) { 59 extent = &vol->extents[i]; 60 if (extent->svc_id == 0) { 61 extent->status = HR_EXT_MISSING; 62 continue; 63 } 64 65 DPRINTF("hr_init_devs(): block_init() on (%lu)\n", 66 extent->svc_id); 67 rc = block_init(extent->svc_id); 68 extent->status = HR_EXT_ONLINE; 69 67 70 if (rc != EOK) { 68 log_msg(LOG_DEFAULT, LVL_ERROR, 69 "hr_init_devs(): initing (%" PRIun ") failed, aborting", 71 ERR_PRINTF("hr_init_devs(): initing (%lu) failed, " 72 "aborting\n", extent->svc_id); 73 break; 74 } 75 } 76 77 return rc; 78 } 79 80 void hr_fini_devs(hr_volume_t *vol) 81 { 82 DPRINTF("hr_fini_devs()\n"); 83 84 size_t i; 85 86 for (i = 0; i < vol->dev_no; i++) { 87 if (vol->extents[i].status != HR_EXT_MISSING) { 88 DPRINTF("hr_fini_devs(): block_fini() on (%lu)\n", 70 89 vol->extents[i].svc_id); 71 break;72 }73 }74 75 return rc;76 }77 78 void hr_fini_devs(hr_volume_t *vol)79 {80 log_msg(LOG_DEFAULT, LVL_NOTE, "hr_fini_devs()");81 82 size_t i;83 84 for (i = 0; i < vol->dev_no; i++)85 if (vol->extents[i].status != HR_EXT_MISSING)86 90 block_fini(vol->extents[i].svc_id); 87 } 88 89 errno_t hr_register_volume(hr_volume_t *new_volume) 90 { 91 log_msg(LOG_DEFAULT, LVL_NOTE, "hr_register_volume()"); 91 } 92 } 93 } 94 95 errno_t hr_register_volume(hr_volume_t *vol) 96 { 97 DPRINTF("hr_register_volume()\n"); 92 98 93 99 errno_t rc; … … 95 101 category_id_t cat_id; 96 102 char *fullname = NULL; 97 98 if (asprintf(&fullname, "devices/%s", new_volume->devname) < 0) 103 char *devname = vol->devname; 104 105 if (asprintf(&fullname, "devices/%s", devname) < 0) 99 106 return ENOMEM; 100 107 101 108 rc = loc_service_register(hr_srv, fullname, &new_id); 102 109 if (rc != EOK) { 103 log_msg(LOG_DEFAULT, LVL_ERROR, 104 "unable to register device \"%s\": %s\n", 105 new_volume->devname, str_error(rc)); 110 ERR_PRINTF("unable to register device \"%s\": %s\n", 111 fullname, str_error(rc)); 106 112 goto error; 107 113 } … … 109 115 rc = loc_category_get_id("raid", &cat_id, IPC_FLAG_BLOCKING); 110 116 if (rc != EOK) { 111 log_msg(LOG_DEFAULT, LVL_ERROR,112 "failed resolving category \"raid\": %s\n",str_error(rc));117 ERR_PRINTF("failed resolving category \"raid\": %s\n", 118 str_error(rc)); 113 119 goto error; 114 120 } … … 116 122 rc = loc_service_add_to_cat(hr_srv, new_id, cat_id); 117 123 if (rc != EOK) { 118 log_msg(LOG_DEFAULT, LVL_ERROR, 119 "failed adding \"%s\" to category \"raid\": %s\n", 120 new_volume->devname, str_error(rc)); 124 ERR_PRINTF("failed adding \"%s\" to category \"raid\": %s\n", 125 fullname, str_error(rc)); 121 126 goto error; 122 127 } 123 128 124 new_volume->svc_id = new_id;129 vol->svc_id = new_id; 125 130 126 131 error: … … 131 136 errno_t hr_check_devs(hr_volume_t *vol, uint64_t *rblkno, size_t *rbsize) 132 137 { 133 log_msg(LOG_DEFAULT, LVL_NOTE, "hr_check_devs()");138 DPRINTF("hr_check_devs()\n"); 134 139 135 140 errno_t rc; … … 139 144 uint64_t last_nblocks = 0; 140 145 uint64_t total_blocks = 0; 141 142 for (i = 0; i < vol->dev_no; i++) { 143 if (vol->extents[i].status == HR_EXT_MISSING) 144 continue; 145 rc = block_get_nblocks(vol->extents[i].svc_id, &nblocks); 146 hr_extent_t *extent; 147 148 for (i = 0; i < vol->dev_no; i++) { 149 extent = &vol->extents[i]; 150 if (extent->status == HR_EXT_MISSING) 151 continue; 152 rc = block_get_nblocks(extent->svc_id, &nblocks); 146 153 if (rc != EOK) 147 154 goto error; 148 155 if (last_nblocks != 0 && nblocks != last_nblocks) { 149 log_msg(LOG_DEFAULT, LVL_ERROR, 150 "number of blocks differs"); 156 ERR_PRINTF("number of blocks differs\n"); 151 157 rc = EINVAL; 152 158 goto error; 153 159 } 160 154 161 total_blocks += nblocks; 155 162 last_nblocks = nblocks; … … 157 164 158 165 for (i = 0; i < vol->dev_no; i++) { 159 if (vol->extents[i].status == HR_EXT_MISSING) 160 continue; 161 rc = block_get_bsize(vol->extents[i].svc_id, &bsize); 166 extent = &vol->extents[i]; 167 if (extent->status == HR_EXT_MISSING) 168 continue; 169 rc = block_get_bsize(extent->svc_id, &bsize); 162 170 if (rc != EOK) 163 171 goto error; 164 172 if (last_bsize != 0 && bsize != last_bsize) { 165 log_msg(LOG_DEFAULT, LVL_ERROR, "block sizes differ");173 ERR_PRINTF("block sizes differ\n"); 166 174 rc = EINVAL; 167 175 goto error; 168 176 } 177 169 178 last_bsize = bsize; 170 179 } 171 180 172 181 if ((bsize % 512) != 0) { 173 log_msg(LOG_DEFAULT, LVL_ERROR, 174 "block size not multiple of 512"); 182 ERR_PRINTF("block size not multiple of 512\n"); 175 183 return EINVAL; 176 184 }
Note:
See TracChangeset
for help on using the changeset viewer.