Changeset 150adbd2 in mainline


Ignore:
Timestamp:
2025-06-29T10:08:40Z (7 months ago)
Author:
Miroslav Cimerman <mc@…>
Children:
40ab4901
Parents:
93ea452
Message:

hr: add NOOP metadata type

Location:
uspace
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/hrctl/hrctl.c

    r93ea452 r150adbd2  
    5252static errno_t fill_config_devs(int, char **, hr_config_t *);
    5353static errno_t get_vol_configs_from_sif(const char *, hr_config_t **, size_t *);
    54 static int create_from_config(hr_t *, const char *);
    55 static int create_from_argv(hr_t *, int, char **);
     54static int create_from_config(hr_t *, const char *, uint8_t);
     55static int create_from_argv(hr_t *, int, char **, uint8_t);
    5656static int handle_create(hr_t *, int, char **);
    5757static int assemble_from_config(hr_t *, const char *);
     
    7070    "  -h, --help                                Display this message and exit.\n"
    7171    "\n"
    72     "  -c, --create                              Create a volume, options:\n"
     72    "  -c, --create [--no_meta]                  Create a volume, options:\n"
    7373    "      name {-l , --level level} device...   manual device specification, or\n"
    7474    "      -f configuration.sif                  create from configuration file.\n"
     
    108108    "\n"
    109109    "Notes:\n"
     110    "  Add --no_meta after --create to disable storing on-disk metadata.\n"
    110111    "  Simulating an extent failure with -m volume -f index is dangerous. It marks\n"
    111112    "  metadata as dirty in other healthy extents, and zeroes out the superblock\n"
     
    341342}
    342343
    343 static int create_from_config(hr_t *hr, const char *config_path)
     344static int create_from_config(hr_t *hr, const char *config_path,
     345    uint8_t vol_flags)
    344346{
    345347        hr_config_t *vol_configs = NULL;
     
    351353                return EXIT_FAILURE;
    352354        }
     355
     356        for (size_t i = 0; i < vol_count; i++)
     357                vol_configs[i].vol_flags |= vol_flags;
    353358
    354359        for (size_t i = 0; i < vol_count; i++) {
     
    368373}
    369374
    370 static int create_from_argv(hr_t *hr, int argc, char **argv)
     375static int create_from_argv(hr_t *hr, int argc, char **argv, uint8_t vol_flags)
    371376{
    372377        /* we need name + --level + arg + at least one extent */
     
    381386                return EXIT_FAILURE;
    382387        }
     388
     389        vol_config->vol_flags |= vol_flags;
    383390
    384391        const char *name = argv[optind++];
     
    441448{
    442449        int rc;
     450        uint8_t vol_flags = 0;
    443451
    444452        if (optind >= argc) {
    445453                printf(NAME ": no arguments to --create\n");
    446454                return EXIT_FAILURE;
     455        }
     456
     457        if (str_cmp(argv[optind], "--no_meta") == 0) {
     458                vol_flags |= HR_VOL_FLAG_NOOP_META;
     459                optind++;
    447460        }
    448461
     
    461474                }
    462475
    463                 rc = create_from_config(hr, config_path);
     476                rc = create_from_config(hr, config_path, vol_flags);
    464477        } else {
    465                 rc = create_from_argv(hr, argc, argv);
     478                rc = create_from_argv(hr, argc, argv, vol_flags);
    466479        }
    467480
  • uspace/lib/device/include/hr.h

    r93ea452 r150adbd2  
    8888        HR_METADATA_SOFTRAID,
    8989        HR_METADATA_MD,
    90         HR_METADATA_LAST_DUMMY
     90        HR_METADATA_NOOP,
     91        HR_METADATA_LAST_PLACEHOLDER
    9192} hr_metadata_type_t;
     93
     94typedef enum hr_vol_flag {
     95        HR_VOL_FLAG_NOOP_META = 0x01
     96} hr_vol_flag_t;
    9297
    9398typedef struct hr {
     
    100105        size_t dev_no;
    101106        hr_level_t level;
     107        uint8_t vol_flags;
    102108} hr_config_t;
    103109
  • uspace/lib/device/src/hr.c

    r93ea452 r150adbd2  
    554554        case HR_METADATA_MD:
    555555                return "Linux Multiple Device";
     556        case HR_METADATA_NOOP:
     557                return "NOOP Metadata";
    556558        default:
    557559                return "Invalid metadata type value";
  • uspace/srv/bd/hr/hr.c

    r93ea452 r150adbd2  
    131131        }
    132132
    133         rc = hr_create_vol_struct(&vol, cfg->level, cfg->devname,
    134             HR_METADATA_NATIVE);
     133        hr_metadata_type_t meta_type;
     134        if (cfg->vol_flags & HR_VOL_FLAG_NOOP_META)
     135                meta_type = HR_METADATA_NOOP;
     136        else
     137                meta_type = HR_METADATA_NATIVE;
     138
     139        printf("creating with type %d\n", meta_type);
     140        rc = hr_create_vol_struct(&vol, cfg->level, cfg->devname, meta_type);
    135141        if (rc != EOK) {
    136142                free(cfg);
  • uspace/srv/bd/hr/meson.build

    r93ea452 r150adbd2  
    3838            'metadata/foreign/softraid/softraid.c',
    3939            'metadata/native.c',
     40            'metadata/noop.c',
    4041            'parity_stripe.c',
    4142            'raid0.c',
  • uspace/srv/bd/hr/superblock.c

    r93ea452 r150adbd2  
    6161extern hr_superblock_ops_t metadata_softraid_ops;
    6262extern hr_superblock_ops_t metadata_md_ops;
     63extern hr_superblock_ops_t noop_ops;
    6364
    6465static hr_superblock_ops_t *hr_superblock_ops_all[] = {
     
    6768        [HR_METADATA_GEOM_STRIPE] = &metadata_gstripe_ops,
    6869        [HR_METADATA_SOFTRAID] = &metadata_softraid_ops,
    69         [HR_METADATA_MD] = &metadata_md_ops
     70        [HR_METADATA_MD] = &metadata_md_ops,
     71        [HR_METADATA_NOOP] = &noop_ops
    7072};
    7173
    7274hr_superblock_ops_t *hr_get_meta_type_ops(hr_metadata_type_t type)
    7375{
    74         assert(type >= HR_METADATA_NATIVE && type < HR_METADATA_LAST_DUMMY);
     76        assert(type >= HR_METADATA_NATIVE &&
     77            type < HR_METADATA_LAST_PLACEHOLDER);
    7578
    7679        return hr_superblock_ops_all[type];
     
    9295
    9396        volatile hr_metadata_type_t type = HR_METADATA_NATIVE;
    94         for (; type < HR_METADATA_LAST_DUMMY; type++) {
     97        for (; type < HR_METADATA_LAST_PLACEHOLDER; type++) {
    9598                meta_ops = hr_superblock_ops_all[type];
    9699
Note: See TracChangeset for help on using the changeset viewer.