Lines Matching full:layout

773  * allocate_partition() - Allocate a partition and add it to a layout.
774 * @layout: The layout containing the partition.
776 * @offset: The offset into the layout at which the partition begins.
781 static int allocate_partition(struct layout *layout, u8 id, in allocate_partition() argument
794 partition->next = layout->head; in allocate_partition()
795 layout->head = partition; in allocate_partition()
802 * layout.
803 * @layout: The layout.
811 static int __must_check make_partition(struct layout *layout, enum partition_id id, in make_partition() argument
816 block_count_t free_blocks = layout->last_free - layout->first_free; in make_partition()
826 result = vdo_get_partition(layout, id, NULL); in make_partition()
830 offset = beginning ? layout->first_free : (layout->last_free - size); in make_partition()
832 result = allocate_partition(layout, id, offset, size); in make_partition()
836 layout->num_partitions++; in make_partition()
838 layout->first_free += size; in make_partition()
840 layout->last_free = layout->last_free - size; in make_partition()
848 * @offset: The start of the layout on the underlying storage in blocks.
852 * @layout: The layout to initialize.
858 block_count_t summary_blocks, struct layout *layout) in vdo_initialize_layout() argument
868 *layout = (struct layout) { in vdo_initialize_layout()
877 result = make_partition(layout, VDO_BLOCK_MAP_PARTITION, block_map_blocks, true); in vdo_initialize_layout()
879 vdo_uninitialize_layout(layout); in vdo_initialize_layout()
883 result = make_partition(layout, VDO_SLAB_SUMMARY_PARTITION, summary_blocks, in vdo_initialize_layout()
886 vdo_uninitialize_layout(layout); in vdo_initialize_layout()
890 result = make_partition(layout, VDO_RECOVERY_JOURNAL_PARTITION, journal_blocks, in vdo_initialize_layout()
893 vdo_uninitialize_layout(layout); in vdo_initialize_layout()
897 result = make_partition(layout, VDO_SLAB_DEPOT_PARTITION, 0, true); in vdo_initialize_layout()
899 vdo_uninitialize_layout(layout); in vdo_initialize_layout()
905 * vdo_uninitialize_layout() - Clean up a layout.
906 * @layout: The layout to clean up.
908 * All partitions created by this layout become invalid pointers.
910 void vdo_uninitialize_layout(struct layout *layout) in vdo_uninitialize_layout() argument
912 while (layout->head != NULL) { in vdo_uninitialize_layout()
913 struct partition *part = layout->head; in vdo_uninitialize_layout()
915 layout->head = part->next; in vdo_uninitialize_layout()
919 memset(layout, 0, sizeof(struct layout)); in vdo_uninitialize_layout()
924 * @layout: The layout from which to get a partition.
930 int vdo_get_partition(struct layout *layout, enum partition_id id, in vdo_get_partition() argument
935 for (partition = layout->head; partition != NULL; partition = partition->next) { in vdo_get_partition()
947 * vdo_get_known_partition() - Get a partition by id from a validated layout.
948 * @layout: The layout from which to get a partition.
953 struct partition *vdo_get_known_partition(struct layout *layout, enum partition_id id) in vdo_get_known_partition() argument
956 int result = vdo_get_partition(layout, id, &partition); in vdo_get_known_partition()
958 VDO_ASSERT_LOG_ONLY(result == VDO_SUCCESS, "layout has expected partition: %u", id); in vdo_get_known_partition()
963 static void encode_layout(u8 *buffer, size_t *offset, const struct layout *layout) in encode_layout() argument
970 VDO_ASSERT_LOG_ONLY(layout->num_partitions <= U8_MAX, in encode_layout()
971 "layout partition count must fit in a byte"); in encode_layout()
976 encode_u64_le(buffer, offset, layout->first_free); in encode_layout()
977 encode_u64_le(buffer, offset, layout->last_free); in encode_layout()
978 buffer[(*offset)++] = layout->num_partitions; in encode_layout()
981 "encoded size of a layout header must match structure"); in encode_layout()
983 for (partition = layout->head; partition != NULL; partition = partition->next) { in encode_layout()
992 "encoded size of a layout must match header size"); in encode_layout()
996 block_count_t size, struct layout *layout) in decode_layout() argument
1008 /* Layout is variable size, so only do a minimum size check here. */ in decode_layout()
1024 "decoded size of a layout header must match structure"); in decode_layout()
1028 layout->start = start; in decode_layout()
1029 layout->size = size; in decode_layout()
1030 layout->first_free = layout_header.first_free; in decode_layout()
1031 layout->last_free = layout_header.last_free; in decode_layout()
1032 layout->num_partitions = layout_header.partition_count; in decode_layout()
1034 if (layout->num_partitions > VDO_PARTITION_COUNT) { in decode_layout()
1036 "layout has extra partitions"); in decode_layout()
1039 for (i = 0; i < layout->num_partitions; i++) { in decode_layout()
1048 result = allocate_partition(layout, id, partition_offset, count); in decode_layout()
1050 vdo_uninitialize_layout(layout); in decode_layout()
1055 /* Validate that the layout has all (and only) the required partitions */ in decode_layout()
1057 result = vdo_get_partition(layout, REQUIRED_PARTITIONS[i], &partition); in decode_layout()
1059 vdo_uninitialize_layout(layout); in decode_layout()
1061 "layout is missing required partition %u", in decode_layout()
1069 vdo_uninitialize_layout(layout); in decode_layout()
1071 "partitions do not cover the layout"); in decode_layout()
1285 vdo_uninitialize_layout(&states->layout); in vdo_destroy_component_states()
1307 states->vdo.config.physical_blocks, &states->layout); in decode_components()
1355 vdo_uninitialize_layout(&states->layout); in vdo_decode_component_states()
1394 encode_layout(buffer, offset, &states->layout); in vdo_encode_component_states()