Changeset f1be66bf in mainline
- Timestamp:
- 2025-03-06T21:47:13Z (2 months ago)
- Children:
- d2da1be
- Parents:
- d6fe2a1
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/raid5.c
rd6fe2a1 rf1be66bf 102 102 } 103 103 104 fibril_rwlock_write_lock(&new_volume->states_lock); 105 104 106 rc = hr_raid5_update_vol_status(new_volume); 105 if (rc != EOK) 107 if (rc != EOK) { 108 fibril_rwlock_write_unlock(&new_volume->states_lock); 106 109 return rc; 110 } 107 111 108 112 bd_srvs_init(&new_volume->hr_bds); … … 111 115 112 116 rc = hr_register_volume(new_volume); 117 118 fibril_rwlock_write_unlock(&new_volume->states_lock); 113 119 114 120 return rc; … … 140 146 { 141 147 fibril_mutex_lock(&vol->lock); 148 fibril_rwlock_write_lock(&vol->states_lock); 142 149 (void)hr_raid5_update_vol_status(vol); 150 fibril_rwlock_write_unlock(&vol->states_lock); 143 151 fibril_mutex_unlock(&vol->lock); 144 152 } … … 149 157 150 158 fibril_mutex_lock(&vol->lock); 159 fibril_mutex_lock(&vol->hotspare_lock); 151 160 152 161 if (vol->hotspare_no >= HR_MAX_HOTSPARES) { … … 158 167 159 168 vol->hotspares[vol->hotspare_no].svc_id = hotspare; 160 hr_update_hotspare_status(vol, vol->hotspare_no, HR_EXT_HOTSPARE);161 169 162 170 vol->hotspare_no++; 171 172 hr_update_hotspare_status(vol, vol->hotspare_no - 1, HR_EXT_HOTSPARE); 163 173 164 174 /* … … 169 179 "spawning new rebuild fibril\n"); 170 180 fid_t fib = fibril_create(hr_raid5_rebuild, vol); 171 if (fib == 0) 181 if (fib == 0) { 182 fibril_mutex_unlock(&vol->hotspare_lock); 183 fibril_mutex_unlock(&vol->lock); 172 184 return ENOMEM; 185 } 173 186 fibril_start(fib); 174 187 fibril_detach(fib); 175 188 } 176 189 190 fibril_mutex_unlock(&vol->hotspare_lock); 177 191 fibril_mutex_unlock(&vol->lock); 178 192 … … 587 601 left = cnt; 588 602 603 fibril_rwlock_write_lock(&vol->states_lock); 589 604 while (left != 0) { 590 605 phys_block = ext_stripe * strip_size + strip_off; … … 684 699 error: 685 700 (void)hr_raid5_update_vol_status(vol); 701 fibril_rwlock_write_unlock(&vol->states_lock); 686 702 fibril_mutex_unlock(&vol->lock); 687 703 return rc; … … 697 713 698 714 fibril_mutex_lock(&vol->lock); 715 fibril_rwlock_read_lock(&vol->extents_lock); 716 fibril_rwlock_write_lock(&vol->states_lock); 699 717 700 718 if (vol->hotspare_no == 0) { … … 738 756 739 757 vol->hotspares[hotspare_idx].svc_id = 0; 758 fibril_mutex_lock(&vol->hotspare_lock); 740 759 hr_update_hotspare_status(vol, hotspare_idx, HR_EXT_MISSING); 760 fibril_mutex_unlock(&vol->hotspare_lock); 741 761 742 762 vol->hotspare_no--; … … 813 833 * during rebuild. 814 834 */ 835 fibril_rwlock_write_unlock(&vol->states_lock); 815 836 fibril_mutex_unlock(&vol->lock); 816 837 fibril_mutex_lock(&vol->lock); 838 fibril_rwlock_write_lock(&vol->states_lock); 817 839 } 818 840 … … 829 851 (void)hr_raid5_update_vol_status(vol); 830 852 853 fibril_rwlock_write_unlock(&vol->states_lock); 854 fibril_rwlock_read_unlock(&vol->extents_lock); 831 855 fibril_mutex_unlock(&vol->lock); 832 856
Note:
See TracChangeset
for help on using the changeset viewer.