| #include <linux/pagemap.h> | 
 | #include <linux/blkdev.h> | 
 | #include <linux/genhd.h> | 
 |  | 
 | /* | 
 |  * add_gd_partition adds a partitions details to the devices partition | 
 |  * description. | 
 |  */ | 
 | struct parsed_partitions { | 
 | 	struct block_device *bdev; | 
 | 	char name[BDEVNAME_SIZE]; | 
 | 	struct { | 
 | 		sector_t from; | 
 | 		sector_t size; | 
 | 		int flags; | 
 | 		bool has_info; | 
 | 		struct partition_meta_info info; | 
 | 	} parts[DISK_MAX_PARTS]; | 
 | 	int next; | 
 | 	int limit; | 
 | 	bool access_beyond_eod; | 
 | 	char *pp_buf; | 
 | }; | 
 |  | 
 | static inline void *read_part_sector(struct parsed_partitions *state, | 
 | 				     sector_t n, Sector *p) | 
 | { | 
 | 	if (n >= get_capacity(state->bdev->bd_disk)) { | 
 | 		state->access_beyond_eod = true; | 
 | 		return NULL; | 
 | 	} | 
 | 	return read_dev_sector(state->bdev, n, p); | 
 | } | 
 |  | 
 | static inline void | 
 | put_partition(struct parsed_partitions *p, int n, sector_t from, sector_t size) | 
 | { | 
 | 	if (n < p->limit) { | 
 | 		char tmp[1 + BDEVNAME_SIZE + 10 + 1]; | 
 |  | 
 | 		p->parts[n].from = from; | 
 | 		p->parts[n].size = size; | 
 | 		snprintf(tmp, sizeof(tmp), " %s%d", p->name, n); | 
 | 		strlcat(p->pp_buf, tmp, PAGE_SIZE); | 
 | 	} | 
 | } | 
 |  | 
 | extern int warn_no_part; | 
 |  |