Changeset aa9bad8 in mainline for uspace/srv/bd/hr/superblock.c


Ignore:
Timestamp:
2025-06-27T22:21:05Z (4 weeks ago)
Author:
Miroslav Cimerman <mc@…>
Children:
2de7c1f
Parents:
78433bb
git-author:
Miroslav Cimerman <mc@…> (2025-06-27 22:14:37)
git-committer:
Miroslav Cimerman <mc@…> (2025-06-27 22:21:05)
Message:

hr: let each format implement own probe

This will allow metadata to have superblocks in
different locations accross versions.

This also greatly reduces the format handling interface,
because now, functions used by the probing done
publicly in superblock.c are now used just
inside specific metadata format code.

File:
1 edited

Legend:

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

    r78433bb raa9bad8  
    6868};
    6969
    70 hr_superblock_ops_t *get_type_ops(hr_metadata_type_t type)
     70hr_superblock_ops_t *hr_get_meta_type_ops(hr_metadata_type_t type)
    7171{
    7272        assert(type >= HR_METADATA_NATIVE && type < HR_METADATA_LAST_DUMMY);
     
    7575}
    7676
    77 errno_t find_metadata(service_id_t svc_id, void **rmetadata,
     77errno_t hr_find_metadata(service_id_t svc_id, void **rmetadata,
    7878    hr_metadata_type_t *rtype)
    7979{
     
    8282        errno_t rc;
    8383        hr_superblock_ops_t *meta_ops;
    84         void *meta_block;
    8584        void *metadata_struct;
    8685
     
    9493                meta_ops = hr_superblock_ops_all[type];
    9594
    96                 metadata_struct = meta_ops->alloc_struct();
    97                 if (metadata_struct == NULL)
    98                         return ENOMEM;
    99 
    100                 rc = meta_ops->get_block(svc_id, &meta_block);
    101                 if (rc == ENOMEM) {
    102                         free(metadata_struct);
    103                         return ENOMEM;
    104                 } else if (rc != EOK) {
    105                         free(metadata_struct);
    106                         continue;
    107                 }
    108 
    109                 rc = meta_ops->decode(meta_block, metadata_struct);
    110 
    111                 free(meta_block);
    112 
     95                rc = meta_ops->probe(svc_id, &metadata_struct);
    11396                if (rc != EOK) {
    114                         free(metadata_struct);
    115                         continue;
    116                 }
    117 
    118                 if (!meta_ops->has_valid_magic(metadata_struct)) {
    119                         free(metadata_struct);
     97                        if (rc != ENOFS)
     98                                return rc;
    12099                        continue;
    121100                }
Note: See TracChangeset for help on using the changeset viewer.