dm-space-map-metadata.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (C) 2011 Red Hat, Inc.
  4. *
  5. * This file is released under the GPL.
  6. */
  7. #ifndef DM_SPACE_MAP_METADATA_H
  8. #define DM_SPACE_MAP_METADATA_H
  9. #include "dm-transaction-manager.h"
  10. #define DM_SM_METADATA_BLOCK_SIZE (4096 >> SECTOR_SHIFT)
  11. /*
  12. * The metadata device is currently limited in size.
  13. *
  14. * We have one block of index, which can hold 255 index entries. Each
  15. * index entry contains allocation info about ~16k metadata blocks.
  16. */
  17. #define DM_SM_METADATA_MAX_BLOCKS (255 * ((1 << 14) - 64))
  18. #define DM_SM_METADATA_MAX_SECTORS (DM_SM_METADATA_MAX_BLOCKS * DM_SM_METADATA_BLOCK_SIZE)
  19. /*
  20. * Unfortunately we have to use two-phase construction due to the cycle
  21. * between the tm and sm.
  22. */
  23. struct dm_space_map *dm_sm_metadata_init(void);
  24. /*
  25. * Create a fresh space map.
  26. */
  27. int dm_sm_metadata_create(struct dm_space_map *sm,
  28. struct dm_transaction_manager *tm,
  29. dm_block_t nr_blocks,
  30. dm_block_t superblock);
  31. /*
  32. * Open from a previously-recorded root.
  33. */
  34. int dm_sm_metadata_open(struct dm_space_map *sm,
  35. struct dm_transaction_manager *tm,
  36. void *root_le, size_t len);
  37. #endif /* DM_SPACE_MAP_METADATA_H */