Changeset a5ec426 in mainline


Ignore:
Timestamp:
2025-03-31T17:08:27Z (6 weeks ago)
Author:
Miroslav Cimerman <mc@…>
Children:
0277ec2
Parents:
baa4929
Message:

hr: superblock: move to last block

Location:
uspace/srv/bd/hr
Files:
2 edited

Legend:

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

    rbaa4929 ra5ec426  
    8383                metadata->index = host2uint32_t_le(i);
    8484
    85                 rc = block_write_direct(vol->extents[i].svc_id, HR_META_OFF,
    86                     HR_META_SIZE, metadata);
     85                rc = block_write_direct(vol->extents[i].svc_id,
     86                    vol->extents[i].blkno - 1, HR_META_SIZE, metadata);
    8787                if (rc != EOK)
    8888                        goto error;
     
    114114        metadata->index = host2uint32_t_le(ext);
    115115
    116         rc = block_write_direct(vol->extents[ext].svc_id, HR_META_OFF,
    117             HR_META_SIZE, metadata);
     116        rc = block_write_direct(vol->extents[ext].svc_id,
     117            vol->extents[ext].blkno - 1, HR_META_SIZE, metadata);
    118118        if (rc != EOK)
    119119                goto error;
     
    134134        HR_DEBUG("%s()", __func__);
    135135
    136         size_t meta_blkno = HR_META_OFF + HR_META_SIZE;
     136        size_t meta_blkno = HR_META_SIZE;
    137137
    138138        if (vol->level != HR_LVL_1)
     
    193193                assembly_svc_id_order[i] = vol->extents[i].svc_id;
    194194
     195        /*
     196         * XXX: sanitize metadata, for example if truncated_blkno <= extent.blkno
     197         * or bsize == extent.bsize
     198         */
     199
    195200        size_t md_order_indices[HR_MAX_EXTENTS] = { 0 };
    196201        for (size_t i = 0; i < vol->extent_no; i++) {
     
    255260}
    256261
     262/* XXX: rewrite with read_metadata_block() */
    257263static errno_t read_metadata(service_id_t dev, hr_metadata_t *metadata)
    258264{
     
    264270                return rc;
    265271
    266         if (nblocks < HR_META_SIZE + HR_META_OFF)
    267                 return EINVAL;
    268 
    269         rc = block_read_direct(dev, HR_META_OFF, HR_META_SIZE, metadata);
     272        if (nblocks < HR_META_SIZE)
     273                return EINVAL;
     274
     275        rc = block_read_direct(dev, nblocks - 1, HR_META_SIZE, metadata);
    270276        if (rc != EOK)
    271277                return rc;
     
    293299                return rc;
    294300
    295         if (blkno < HR_META_OFF + HR_META_SIZE)
     301        if (blkno < HR_META_SIZE)
    296302                return EINVAL;
    297303
     
    300306                return ENOMEM;
    301307
    302         rc = block_read_direct(dev, HR_META_OFF, HR_META_SIZE, block);
     308        rc = block_read_direct(dev, blkno - 1, HR_META_SIZE, block);
    303309        if (rc != EOK) {
    304310                free(block);
  • uspace/srv/bd/hr/superblock.h

    rbaa4929 ra5ec426  
    3939#include "var.h"
    4040
     41/*
     42 * Metadata is stored on the last block of an extent.
     43 */
    4144#define HR_META_SIZE            1       /* in blocks */
    42 #define HR_META_OFF             7       /* in blocks */
    43 #define HR_DATA_OFF             (HR_META_OFF + HR_META_SIZE)
     45#define HR_DATA_OFF             0
    4446
    4547#define HR_MAGIC_STR            "HelenRAID"
     
    7577
    7678        char            devname[HR_DEVNAME_LEN];
    77 };
     79} __attribute__((packed));
    7880
    7981extern errno_t  hr_write_meta_to_vol(hr_volume_t *);
Note: See TracChangeset for help on using the changeset viewer.