source: mainline/uspace/srv/bd/hr/superblock.h@ 8b51009

Last change on this file since 8b51009 was 8b51009, checked in by Miroslav Cimerman <mc@…>, 4 months ago

hr: auto assembly, refactor

Added automatic assembly (with hrctl -A). All disks or their partitions
are scanned for HelenRAID metadata and assembly is attempted.

Main volume list is now locked with RW lock. The volume list
manipulation functions are moved into util.c.

hr_{create,destroy}_vol_struct() are implemented for better reusability
and modularity.

Volume destroy/stop (hrctl -D) now returns EBUSY if someone has still
the volume open()-ed.

  • Property mode set to 100644
File size: 2.8 KB
Line 
1/*
2 * Copyright (c) 2025 Miroslav Cimerman
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup hr
30 * @{
31 */
32/**
33 * @file
34 */
35
36#ifndef _HR_SUPERBLOCK_H
37#define _HR_SUPERBLOCK_H
38
39#include "var.h"
40
41#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)
44
45#define HR_MAGIC_STR "HelenRAID"
46#define HR_MAGIC_SIZE 16
47#define HR_UUID_LEN 16
48/* #define HR_METADATA_VERSION 0 */
49
50typedef struct hr_metadata hr_metadata_t;
51typedef struct hr_volume hr_volume_t;
52
53struct hr_metadata {
54 char magic[HR_MAGIC_SIZE];
55
56 uint8_t uuid[HR_UUID_LEN];
57
58 /* TODO: change to blkno */
59 uint64_t nblocks; /* all blocks */
60 uint64_t data_blkno; /* usable blocks */
61
62 uint64_t truncated_blkno; /* usable blocks */
63 uint64_t data_offset;
64
65 uint64_t counter; /* yet unused */
66 uint32_t version; /* yet unused */
67 uint32_t extent_no;
68
69 uint32_t index; /* index of extent in volume */
70 uint32_t level;
71 uint32_t layout;
72 uint32_t strip_size;
73
74 uint32_t bsize;
75
76 char devname[HR_DEVNAME_LEN];
77};
78
79extern errno_t hr_write_meta_to_vol(hr_volume_t *);
80extern errno_t hr_write_meta_to_ext(hr_volume_t *, size_t);
81extern errno_t hr_fill_vol_from_meta(hr_volume_t *);
82extern errno_t hr_get_metadata_block(service_id_t, void **);
83extern void hr_decode_metadata_from_block(void *, hr_metadata_t *);
84extern void hr_metadata_dump(hr_metadata_t *);
85extern bool hr_valid_md_magic(hr_metadata_t *);
86
87#endif
88
89/** @}
90 */
Note: See TracBrowser for help on using the repository browser.