Changeset e0695ce in mainline for uspace/srv/bd/hr/raid5.c
- Timestamp:
- 2025-06-23T16:50:43Z (9 months ago)
- Children:
- 6a8c1569
- Parents:
- f18e36e
- git-author:
- Miroslav Cimerman <mc@…> (2025-06-23 16:47:52)
- git-committer:
- Miroslav Cimerman <mc@…> (2025-06-23 16:50:43)
- File:
-
- 1 edited
-
uspace/srv/bd/hr/raid5.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/hr/raid5.c
rf18e36e re0695ce 150 150 151 151 vol->meta_ops->inc_counter(vol); 152 (void)vol->meta_ops->save(vol, WITH_STATE_CALLBACK);152 vol->meta_ops->save(vol, WITH_STATE_CALLBACK); 153 153 154 154 hr_raid5_vol_state_eval_forced(vol); … … 610 610 611 611 size_t invalid_no = hr_count_extents(vol, HR_EXT_INVALID); 612 613 size_t rebuild_no = hr_count_extents(vol, HR_EXT_REBUILD); 612 614 613 615 fibril_mutex_lock(&vol->hotspare_lock); … … 625 627 626 628 if (state != HR_VOL_REBUILD) { 627 if (hs_no > 0 || invalid_no > 0 ) {629 if (hs_no > 0 || invalid_no > 0 || rebuild_no > 0) { 628 630 fid_t fib = fibril_create(hr_raid5_rebuild, 629 631 vol); … … 720 722 721 723 uint64_t max_blks = DATA_XFER_LIMIT / vol->bsize; 722 uint64_t left = vol->data_blkno / (vol->extent_no - 1); 724 uint64_t left = 725 vol->data_blkno / (vol->extent_no - 1) - vol->rebuild_blk; 723 726 buf = hr_malloc_waitok(max_blks * vol->bsize); 724 727 xorbuf = hr_malloc_waitok(max_blks * vol->bsize); … … 726 729 uint64_t strip_size = vol->strip_size / vol->bsize; /* in blocks */ 727 730 728 uint64_t ba = 0, cnt; 731 size_t cnt; 732 uint64_t ba = vol->rebuild_blk; 729 733 hr_add_data_offset(vol, &ba); 730 734 … … 747 751 false); 748 752 753 HR_NOTE("\"%s\": REBUILD started on extent no. %zu at block %lu.\n", 754 vol->devname, rebuild_idx, ba); 755 756 uint64_t written = 0; 749 757 unsigned int percent, old_percent = 100; 750 758 while (left != 0) { … … 810 818 } 811 819 820 if (written * vol->bsize > HR_REBUILD_SAVE_BYTES) { 821 vol->meta_ops->save(vol, WITH_STATE_CALLBACK); 822 written = 0; 823 } 824 812 825 hr_range_lock_release(rl); 813 826 hr_reset_stripe(stripe); 814 827 828 written += cnt; 815 829 ba += cnt; 816 830 left -= cnt; 831 old_percent = percent; 817 832 818 833 /* … … 829 844 hr_update_ext_state(vol, rebuild_idx, HR_EXT_ONLINE); 830 845 846 atomic_store_explicit(&vol->rebuild_blk, 0, memory_order_relaxed); 847 831 848 hr_mark_vol_state_dirty(vol); 832 849 833 850 fibril_rwlock_write_unlock(&vol->states_lock); 834 835 /* (void)vol->meta_ops->save(vol, WITH_STATE_CALLBACK); */836 837 851 end: 838 852 fibril_rwlock_read_unlock(&vol->extents_lock);
Note:
See TracChangeset
for help on using the changeset viewer.
