Changeset e0695ce in mainline for uspace/srv/bd/hr/metadata/native.c


Ignore:
Timestamp:
2025-06-23T16:50:43Z (9 months ago)
Author:
Miroslav Cimerman <mc@…>
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)
Message:

hr: save REBUILD position

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/hr/metadata/native.c

    rf18e36e re0695ce  
    171171                iter->fini = false;
    172172
    173                 if (iter_meta->counter == max_counter_val)
    174                         vol->extents[iter_meta->index].state = HR_EXT_ONLINE;
    175                 else
    176                         vol->extents[iter_meta->index].state = HR_EXT_INVALID;
     173                hr_ext_state_t final_ext_state = HR_EXT_INVALID;
     174                if (iter_meta->counter == max_counter_val) {
     175                        if (iter_meta->rebuild_pos > 0) {
     176                                final_ext_state = HR_EXT_REBUILD;
     177                                vol->rebuild_blk = iter_meta->rebuild_pos;
     178                                printf("REBUILD SHOULD RESUME at %lu\n",
     179                                    vol->rebuild_blk);
     180                        } else {
     181                                final_ext_state = HR_EXT_ONLINE;
     182                        }
     183                }
     184
     185                vol->extents[iter_meta->index].state = final_ext_state;
    177186        }
    178187
     
    206215        scratch_md.data_offset = host2uint64_t_le(metadata->data_offset);
    207216        scratch_md.counter = host2uint64_t_le(metadata->counter);
     217        scratch_md.rebuild_pos = host2uint64_t_le(metadata->rebuild_pos);
    208218        scratch_md.version = host2uint32_t_le(metadata->version);
    209219        scratch_md.extent_no = host2uint32_t_le(metadata->extent_no);
     
    240250        metadata->data_offset = uint64_t_le2host(scratch_md.data_offset);
    241251        metadata->counter = uint64_t_le2host(scratch_md.counter);
     252        metadata->rebuild_pos = uint64_t_le2host(scratch_md.rebuild_pos);
    242253        metadata->version = uint32_t_le2host(scratch_md.version);
    243254        metadata->extent_no = uint32_t_le2host(scratch_md.extent_no);
     
    249260        memcpy(metadata->devname, scratch_md.devname, HR_DEVNAME_LEN);
    250261
     262        if (metadata->version != 1)
     263                return EINVAL;
     264
    251265        return EOK;
    252266}
     
    394408
    395409                fibril_rwlock_read_lock(&vol->states_lock);
    396 
    397                 /* TODO: special case for REBUILD */
    398                 if (ext->state != HR_EXT_ONLINE) {
     410                hr_ext_state_t s = ext->state;
     411
     412                if (s != HR_EXT_ONLINE && s != HR_EXT_REBUILD) {
    399413                        fibril_rwlock_read_unlock(&vol->states_lock);
    400414                        continue;
     
    404418
    405419                md->index = i;
     420                if (s == HR_EXT_REBUILD)
     421                        md->rebuild_pos = vol->rebuild_blk;
     422                else
     423                        md->rebuild_pos = 0;
    406424                meta_native_encode(md, md_block);
    407425                rc = meta_native_write_block(ext->svc_id, md_block);
Note: See TracChangeset for help on using the changeset viewer.