Lines Matching defs:disk

117 write_pmbr(int fd, const struct disk *disk)
125 nsects = disk->media_size / disk->sector_size;
128 buffer = calloc(disk->sector_size, 1);
143 write(fd, buffer, disk->sector_size) != disk->sector_size)
151 read_gpt(int fd, const struct disk *disk, struct gpt_hdr *hdr,
160 nsects = disk->gpt_size * sizeof(struct gpt_ent) / disk->sector_size;
162 sz = nsects * disk->sector_size;
167 if (lseek(fd, disk->sector_size, SEEK_SET) != disk->sector_size ||
168 read(fd, buffer, disk->sector_size) != disk->sector_size) {
174 * No GPT on disk. Create one out of thin air.
181 hdr[0].hdr_lba_alt = disk->media_size / disk->sector_size - 1L;
182 hdr[0].hdr_lba_start = disk->lba_start;
183 hdr[0].hdr_lba_end = disk->lba_end;
186 hdr[0].hdr_entries = disk->gpt_size;
191 hdr[1].hdr_lba_table = disk->lba_end + 1;
193 for (i = 0; i < disk->gpt_size; i++) {
202 * We have a GPT on disk. Read it.
205 off = hdr->hdr_lba_table * disk->sector_size;
211 memcpy(tbl, buffer, sizeof(struct gpt_ent) * disk->gpt_size);
212 off = hdr->hdr_lba_alt * disk->sector_size;
214 read(fd, buffer, disk->sector_size) != disk->sector_size) {
226 update_gpt(int fd, const struct disk *disk, struct gpt_hdr *hdr,
240 * the ones that exist on disk already.
243 for (c = disk->chunks->part; c != NULL; c = c->next) {
252 for (c = disk->chunks->part; c != NULL; c = c->next) {
267 for (idx = 0; idx < disk->gpt_size; idx++) {
280 for (c = disk->chunks->part; c != NULL; c = c->next) {
314 if (idx == disk->gpt_size)
321 disk->gpt_size * sizeof(struct gpt_ent));
330 * Write the new GPT back to the disk.
332 bufsz = disk->gpt_size * sizeof(struct gpt_ent);
333 if (bufsz == 0 || bufsz % disk->sector_size)
334 bufsz += disk->sector_size;
335 bufsz = (bufsz / disk->sector_size) * disk->sector_size;
339 off = hdr[0].hdr_lba_self * disk->sector_size;
341 write(fd, buffer, disk->sector_size) != disk->sector_size) {
346 off = hdr[1].hdr_lba_self * disk->sector_size;
348 write(fd, buffer, disk->sector_size) != disk->sector_size) {
352 memcpy(buffer, tbl, disk->gpt_size * sizeof(struct gpt_ent));
353 off = hdr[0].hdr_lba_table * disk->sector_size;
359 off = hdr[1].hdr_lba_table * disk->sector_size;
372 Write_Disk(const struct disk *disk)
382 tbl = malloc(sizeof(struct gpt_ent) * disk->gpt_size);
388 snprintf(devname, sizeof(devname), "%s%s", _PATH_DEV, disk->name);
400 error = write_pmbr(fd, disk);
405 * Read the existing GPT from disk or otherwise create one out of
409 error = read_gpt(fd, disk, hdr, tbl);
416 error = update_gpt(fd, disk, hdr, tbl);