Lines Matching +full:p +full:- +full:state
1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 2012-2013 Philippe De Muyter <phdm@macqel.be>
71 * @state
76 * Description: Reads @count bytes from @state->disk into @buffer.
79 static size_t read_lba(struct parsed_partitions *state, u64 lba, u8 *buffer, in read_lba() argument
84 if (!buffer || lba + count / 512 > get_capacity(state->disk) - 1ULL) in read_lba()
90 unsigned char *data = read_part_sector(state, lba++, §); in read_lba()
99 count -= copied; in read_lba()
106 * @state
113 static struct pvd *alloc_pvd(struct parsed_partitions *state, u32 lba) in alloc_pvd() argument
116 struct pvd *p; in alloc_pvd() local
118 p = kmalloc(count, GFP_KERNEL); in alloc_pvd()
119 if (!p) in alloc_pvd()
122 if (read_lba(state, lba, (u8 *) p, count) < count) { in alloc_pvd()
123 kfree(p); in alloc_pvd()
126 return p; in alloc_pvd()
131 * @state
138 static struct lvname *alloc_lvn(struct parsed_partitions *state, u32 lba) in alloc_lvn() argument
141 struct lvname *p; in alloc_lvn() local
143 p = kmalloc(count, GFP_KERNEL); in alloc_lvn()
144 if (!p) in alloc_lvn()
147 if (read_lba(state, lba, (u8 *) p, count) < count) { in alloc_lvn()
148 kfree(p); in alloc_lvn()
151 return p; in alloc_lvn()
154 int aix_partition(struct parsed_partitions *state) in aix_partition() argument
172 d = read_part_sector(state, 7, §); in aix_partition()
174 struct lvm_rec *p = (struct lvm_rec *)d; in aix_partition() local
175 u16 lvm_version = be16_to_cpu(p->version); in aix_partition()
179 int pp_size_log2 = be16_to_cpu(p->pp_size); in aix_partition()
186 vgda_len = be32_to_cpu(p->vgda_len); in aix_partition()
187 vgda_sector = be32_to_cpu(p->vgda_psn[0]); in aix_partition()
193 strlcat(state->pp_buf, tmp, PAGE_SIZE); in aix_partition()
196 if (vgda_sector && (d = read_part_sector(state, vgda_sector, §))) { in aix_partition()
197 struct vgda *p = (struct vgda *)d; in aix_partition() local
199 numlvs = be16_to_cpu(p->numlvs); in aix_partition()
202 lvip = kcalloc(state->limit, sizeof(struct lv_info), GFP_KERNEL); in aix_partition()
205 if (numlvs && (d = read_part_sector(state, vgda_sector + 1, §))) { in aix_partition()
206 struct lvd *p = (struct lvd *)d; in aix_partition() local
209 n = alloc_lvn(state, vgda_sector + vgda_len - 33); in aix_partition()
213 for (i = 0; foundlvs < numlvs && i < state->limit; i += 1) { in aix_partition()
214 lvip[i].pps_per_lv = be16_to_cpu(p[i].num_lps); in aix_partition()
219 pvd = alloc_pvd(state, vgda_sector + 17); in aix_partition()
224 int numpps = be16_to_cpu(pvd->pp_count); in aix_partition()
225 int psn_part1 = be32_to_cpu(pvd->psn_part1); in aix_partition()
227 int cur_lv_ix = -1; in aix_partition()
232 struct ppe *p = pvd->ppe + i; in aix_partition() local
235 lp_ix = be16_to_cpu(p->lp_ix); in aix_partition()
240 lv_ix = be16_to_cpu(p->lv_ix) - 1; in aix_partition()
241 if (lv_ix >= state->limit) { in aix_partition()
242 cur_lv_ix = -1; in aix_partition()
256 put_partition(state, lv_ix + 1, in aix_partition()
257 (i + 1 - lp_ix) * pp_blocks_size + psn_part1, in aix_partition()
261 strlcat(state->pp_buf, tmp, PAGE_SIZE); in aix_partition()
268 for (i = 0; i < state->limit; i += 1) in aix_partition()