Changeset cdfcaea in mainline for uspace/srv/bd/hr/parity_stripe.c


Ignore:
Timestamp:
2025-06-23T13:39:56Z (9 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
f18e36e
Parents:
09c195e8
Message:

hr: RAID 5 rebuild

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/hr/parity_stripe.c

    r09c195e8 rcdfcaea  
    5353    range_t *);
    5454static size_t hr_stripe_merge_extent_spans(hr_stripe_t *, size_t, range_t [2]);
    55 static void hr_reset_stripe(hr_stripe_t *);
    5655static void hr_stripe_extend_range(range_t *, const range_t *);
    5756static bool hr_ranges_overlap(const range_t *, const range_t *, range_t *);
    5857
    59 hr_stripe_t *hr_create_stripes(hr_volume_t *vol, size_t cnt, bool write)
    60 {
    61         hr_stripe_t *stripes = calloc(cnt, sizeof(*stripes));
    62         if (stripes == NULL)
    63                 return NULL;
     58hr_stripe_t *hr_create_stripes(hr_volume_t *vol, uint64_t strip_size,
     59    size_t cnt, bool write)
     60{
     61        hr_stripe_t *stripes = hr_calloc_waitok(cnt, sizeof(*stripes));
    6462
    6563        for (size_t i = 0; i < cnt; i++) {
     
    6866                stripes[i].vol = vol;
    6967                stripes[i].write = write;
    70                 stripes[i].parity = calloc(1, vol->strip_size);
    71                 if (stripes[i].parity == NULL)
    72                         goto error;
    73                 stripes[i].extent_span =
    74                     calloc(vol->extent_no, sizeof(*stripes[i].extent_span));
    75                 if (stripes[i].extent_span == NULL)
    76                         goto error;
     68                stripes[i].parity = hr_calloc_waitok(1, strip_size);
     69                stripes[i].parity_size = strip_size;
     70                stripes[i].extent_span = hr_calloc_waitok(vol->extent_no,
     71                    sizeof(*stripes[i].extent_span));
    7772        }
    7873
    7974        return stripes;
    80 error:
    81         hr_destroy_stripes(stripes, cnt);
    82         return NULL;
    8375}
    8476
     
    9688
    9789        free(stripes);
     90}
     91
     92void hr_reset_stripe(hr_stripe_t *stripe)
     93{
     94        memset(stripe->parity, 0, stripe->parity_size);
     95        stripe->ps_added = 0;
     96        stripe->ps_to_be_added = 0;
     97        stripe->p_count_final = false;
     98
     99        stripe->rc = EOK;
     100        stripe->abort = false;
     101        stripe->done = false;
    98102}
    99103
     
    878882}
    879883
    880 static void hr_reset_stripe(hr_stripe_t *stripe)
    881 {
    882         printf("%s\n", __func__);
    883 
    884         memset(stripe->parity, 0, stripe->vol->strip_size);
    885         stripe->ps_added = 0;
    886         stripe->ps_to_be_added = 0;
    887         stripe->p_count_final = false;
    888 
    889         stripe->rc = EOK;
    890         stripe->abort = false;
    891         stripe->done = false;
    892 }
    893 
    894884/** Extend a range.
    895885 *
Note: See TracChangeset for help on using the changeset viewer.