Changeset 56214383 in mainline
- Timestamp:
- 2025-03-29T12:09:58Z (3 months ago)
- Children:
- 49de61c
- Parents:
- 8a65373
- Location:
- uspace/srv/bd/hr
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/raid1.c
r8a65373 r56214383 145 145 HR_DEBUG("%s()", __func__); 146 146 147 errno_t rc = EOK; 148 149 fibril_mutex_lock(&vol->hotspare_lock); 150 151 if (vol->hotspare_no >= HR_MAX_HOTSPARES) { 152 HR_ERROR("hr_raid1_add_hotspare(): cannot add more hotspares " 153 "to \"%s\"\n", vol->devname); 154 rc = ELIMIT; 155 goto error; 156 } 157 158 size_t hs_idx = vol->hotspare_no; 159 160 vol->hotspare_no++; 161 162 hr_update_hotspare_svc_id(vol, hs_idx, hotspare); 163 hr_update_hotspare_status(vol, hs_idx, HR_EXT_HOTSPARE); 164 165 hr_mark_vol_state_dirty(vol); 166 error: 167 fibril_mutex_unlock(&vol->hotspare_lock); 147 errno_t rc = hr_util_add_hotspare(vol, hotspare); 168 148 169 149 hr_raid1_update_vol_status(vol); … … 656 636 service_id_t hs_svc_id = vol->hotspares[hs].svc_id; 657 637 658 /* TODO: if rc != EOK, try next hotspare */659 errno_t rc = block_init(hs_svc_id);660 if (rc != EOK) {661 HR_ERROR("hr_raid1_rebuild(): initing hotspare (%lu) failed\n",662 hs_svc_id);663 return rc;664 }665 666 638 hr_update_ext_svc_id(vol, bad, hs_svc_id); 667 639 hr_update_ext_status(vol, bad, HR_EXT_HOTSPARE); -
uspace/srv/bd/hr/raid5.c
r8a65373 r56214383 150 150 errno_t hr_raid5_add_hotspare(hr_volume_t *vol, service_id_t hotspare) 151 151 { 152 HR_DEBUG(" hr_raid5_add_hotspare()\n");152 HR_DEBUG("%s()", __func__); 153 153 154 154 fibril_mutex_lock(&vol->lock); 155 fibril_mutex_lock(&vol->hotspare_lock); 156 157 if (vol->hotspare_no >= HR_MAX_HOTSPARES) { 158 HR_ERROR("hr_raid5_add_hotspare(): cannot add more hotspares " 159 "to \"%s\"\n", vol->devname); 160 fibril_mutex_unlock(&vol->lock); 161 return ELIMIT; 162 } 163 164 vol->hotspares[vol->hotspare_no].svc_id = hotspare; 165 166 vol->hotspare_no++; 167 168 hr_update_hotspare_status(vol, vol->hotspare_no - 1, HR_EXT_HOTSPARE); 155 156 errno_t rc = hr_util_add_hotspare(vol, hotspare); 157 if (rc != EOK) 158 goto end; 169 159 170 160 /* … … 184 174 } 185 175 186 fibril_mutex_unlock(&vol->hotspare_lock); 176 end: 187 177 fibril_mutex_unlock(&vol->lock); 188 178 189 return EOK;179 return rc; 190 180 } 191 181 … … 770 760 hr_extent_t *rebuild_ext = &vol->extents[bad]; 771 761 772 rc = block_init(rebuild_ext->svc_id);773 if (rc != EOK) {774 HR_ERROR("hr_raid5_rebuild(): initing (%lu) failed, "775 "aborting rebuild\n", rebuild_ext->svc_id);776 goto end;777 }778 779 762 HR_DEBUG("hr_raid5_rebuild(): starting rebuild on (%lu)\n", 780 763 rebuild_ext->svc_id); -
uspace/srv/bd/hr/util.c
r8a65373 r56214383 983 983 } 984 984 985 errno_t hr_util_add_hotspare(hr_volume_t *vol, service_id_t hotspare) 986 { 987 HR_DEBUG("%s()", __func__); 988 989 errno_t rc = EOK; 990 991 fibril_mutex_lock(&vol->hotspare_lock); 992 993 if (vol->hotspare_no >= HR_MAX_HOTSPARES) { 994 HR_ERROR("%s(): cannot add more hotspares " 995 "to \"%s\"\n", __func__, vol->devname); 996 rc = ELIMIT; 997 goto end; 998 } 999 1000 rc = block_init(hotspare); 1001 if (rc != EOK) 1002 goto end; 1003 1004 size_t hs_idx = vol->hotspare_no; 1005 1006 vol->hotspare_no++; 1007 1008 hr_update_hotspare_svc_id(vol, hs_idx, hotspare); 1009 hr_update_hotspare_status(vol, hs_idx, HR_EXT_HOTSPARE); 1010 1011 hr_mark_vol_state_dirty(vol); 1012 end: 1013 fibril_mutex_unlock(&vol->hotspare_lock); 1014 return rc; 1015 } 1016 985 1017 /** @} 986 1018 */ -
uspace/srv/bd/hr/util.h
r8a65373 r56214383 78 78 uint64_t); 79 79 extern errno_t hr_util_try_auto_assemble(size_t *); 80 extern errno_t hr_util_add_hotspare(hr_volume_t *, service_id_t); 80 81 81 82 #endif
Note:
See TracChangeset
for help on using the changeset viewer.