check.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include <linux/pagemap.h>
  2. #include <linux/blkdev.h>
  3. #include <linux/genhd.h>
  4. /*
  5. * add_gd_partition adds a partitions details to the devices partition
  6. * description.
  7. */
  8. struct parsed_partitions {
  9. struct block_device *bdev;
  10. char name[BDEVNAME_SIZE];
  11. struct {
  12. sector_t from;
  13. sector_t size;
  14. int flags;
  15. bool has_info;
  16. struct partition_meta_info info;
  17. } parts[DISK_MAX_PARTS];
  18. int next;
  19. int limit;
  20. bool access_beyond_eod;
  21. char *pp_buf;
  22. };
  23. static inline void *read_part_sector(struct parsed_partitions *state,
  24. sector_t n, Sector *p)
  25. {
  26. if (n >= get_capacity(state->bdev->bd_disk)) {
  27. state->access_beyond_eod = true;
  28. return NULL;
  29. }
  30. return read_dev_sector(state->bdev, n, p);
  31. }
  32. static inline void
  33. put_partition(struct parsed_partitions *p, int n, sector_t from, sector_t size)
  34. {
  35. if (n < p->limit) {
  36. char tmp[1 + BDEVNAME_SIZE + 10 + 1];
  37. p->parts[n].from = from;
  38. p->parts[n].size = size;
  39. snprintf(tmp, sizeof(tmp), " %s%d", p->name, n);
  40. strlcat(p->pp_buf, tmp, PAGE_SIZE);
  41. }
  42. }
  43. extern int warn_no_part;