Changeset 5b320ac in mainline for uspace/lib/device


Ignore:
Timestamp:
2024-11-22T18:38:49Z (14 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
d0f0744
Parents:
06f2762
Message:

hr: hotspares + RAID1 rebuild

Location:
uspace/lib/device
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/device/include/hr.h

    r06f2762 r5b320ac  
    4343/* for now */
    4444#define HR_MAX_EXTENTS 4
     45#define HR_MAX_HOTSPARES HR_MAX_EXTENTS
    4546
    4647#define HR_DEVNAME_LEN 32
     
    5758        HR_VOL_ONLINE,  /* OK, OPTIMAL */
    5859        HR_VOL_FAULTY,
    59         HR_VOL_DEGRADED /* also used for partial, but usable mirror */
     60        HR_VOL_DEGRADED, /* also used for partial, but usable mirror */
     61        HR_VOL_REBUILD
    6062} hr_vol_status_t;
    6163
     
    6365        HR_EXT_ONLINE,  /* OK */
    6466        HR_EXT_MISSING,
    65         HR_EXT_FAILED
     67        HR_EXT_FAILED,
     68        HR_EXT_REBUILD,
     69        HR_EXT_HOTSPARE
    6670} hr_ext_status_t;
    6771
     
    8488typedef struct hr_vol_info {
    8589        hr_extent_t extents[HR_MAX_EXTENTS];
     90        hr_extent_t hotspares[HR_MAX_HOTSPARES];
    8691        size_t extent_no;
     92        size_t hotspare_no;
    8793        service_id_t svc_id;
    8894        hr_level_t level;
     
    98104extern errno_t hr_create(hr_t *, hr_config_t *, bool);
    99105extern errno_t hr_stop(const char *, long);
     106extern errno_t hr_add_hotspare(service_id_t, service_id_t);
    100107extern errno_t hr_print_status(void);
    101108
  • uspace/lib/device/include/ipc/hr.h

    r06f2762 r5b320ac  
    4242        HR_ASSEMBLE,
    4343        HR_STOP,
     44        HR_ADD_HOTSPARE,
    4445        HR_STATUS
    4546} hr_request_t;
  • uspace/lib/device/src/hr.c

    r06f2762 r5b320ac  
    166166                        printf("          %s    %zu       %s\n", hr_get_ext_status_msg(ext->status), i, devname);
    167167        }
     168
     169        if (vol_info->hotspare_no == 0)
     170                return EOK;
     171
     172        printf("hotspares: [status] [index] [devname]\n");
     173        for (i = 0; i < vol_info->hotspare_no; i++) {
     174                ext = &vol_info->hotspares[i];
     175                if (ext->status == HR_EXT_MISSING) {
     176                        devname = (char *) "MISSING-devname";
     177                } else {
     178                        rc = loc_service_get_name(ext->svc_id, &devname);
     179                        if (rc != EOK)
     180                                return rc;
     181                }
     182                printf("            %s   %zu     %s\n",
     183                    hr_get_ext_status_msg(ext->status), i, devname);
     184        }
     185
    168186        return EOK;
    169187}
     
    194212        if (rc != EOK)
    195213                goto error;
     214error:
     215        hr_sess_destroy(hr);
     216        return rc;
     217}
     218
     219errno_t hr_add_hotspare(service_id_t vol_svc_id, service_id_t hs_svc_id)
     220{
     221        hr_t *hr;
     222        errno_t rc;
     223        async_exch_t *exch;
     224
     225        rc = hr_sess_init(&hr);
     226        if (rc != EOK)
     227                return rc;
     228
     229        exch = async_exchange_begin(hr->sess);
     230        if (exch == NULL) {
     231                rc = EINVAL;
     232                goto error;
     233        }
     234
     235        rc = async_req_2_0(exch, HR_ADD_HOTSPARE, vol_svc_id, hs_svc_id);
     236        async_exchange_end(exch);
    196237error:
    197238        hr_sess_destroy(hr);
     
    277318        case HR_VOL_DEGRADED:
    278319                return "DEGRADED";
     320        case HR_VOL_REBUILD:
     321                return "REBUILD";
    279322        default:
    280323                return "UNKNOWN";
     
    291334        case HR_EXT_FAILED:
    292335                return "FAILED";
     336        case HR_EXT_REBUILD:
     337                return "REBUILD";
     338        case HR_EXT_HOTSPARE:
     339                return "HOTSPARE";
    293340        default:
    294341                return "UNKNOWN";
Note: See TracChangeset for help on using the changeset viewer.