Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 22747e8 in mainline


Ignore:
Timestamp:
2015-08-03T20:23:37Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial
Children:
83dd743
Parents:
6439741
Message:

Fix setting next EBR entry. Fix deleting first logical partition.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/label/src/mbr.c

    r6439741 r22747e8  
    237237                rc = mbr_pte_to_log_part(label, ebr_b0, ethis);
    238238                if (rc != EOK) {
    239                         rc= EIO;
     239                        rc = EIO;
    240240                        goto error;
    241241                }
     
    627627        mbr_pte_t pte;
    628628        label_part_t *prev;
     629        label_part_t *next;
     630        uint64_t ep_b0;
    629631        int rc;
    630632
     
    659661                                return EIO;
    660662                        }
     663
     664                        /* Delete EBR */
     665                        rc = mbr_ebr_delete(part->label, part);
     666                        if (rc != EOK)
     667                                return EIO;
    661668                } else {
     669                        next = mbr_log_part_next(part);
    662670                        list_remove(&part->llog);
    663                 }
    664 
    665                 /* Delete EBR */
    666                 mbr_ebr_delete(part->label, part);
     671
     672                        if (next != NULL) {
     673                                /*
     674                                 * Relocate next partitions EBR to the beginning
     675                                 * of extended partition. This also overwrites
     676                                 * the EBR of the former first partition.
     677                                 */
     678
     679                                /* First block of extended partition */
     680                                ep_b0 = part->label->ext_part->block0;
     681
     682                                next->hdr_blocks = next->block0 - ep_b0;
     683
     684                                rc = mbr_ebr_create(part->label, next);
     685                                if (rc != EOK) {
     686                                        list_prepend(&part->llog, &part->label->log_parts);
     687                                        return EIO;
     688                                }
     689                        } else {
     690                                /* Delete EBR */
     691                                rc = mbr_ebr_delete(part->label, part);
     692                                if (rc != EOK)
     693                                        return EIO;
     694                        }
     695                }
    667696
    668697                /* Update indices */
     
    768797        return EOK;
    769798}
    770 #include <stdio.h>
     799
    771800static void mbr_log_part_to_ptes(label_part_t *part, mbr_pte_t *pthis,
    772801    mbr_pte_t *pnext)
     
    781810        assert(link_used(&part->llog));
    782811        assert(part->block0 >= ep_b0);
    783         printf("part->hdr_blocks = %" PRIu64 "\n", part->hdr_blocks);
    784         printf("part->block0 = %" PRIu64 "\n", part->block0);
    785         printf("ep_b0 = %" PRIu64 "\n", ep_b0);
    786812        assert(part->hdr_blocks <= part->block0 - ep_b0);
    787813
     
    796822        /* 'Next' EBR entry */
    797823        if (pnext != NULL) {
    798                 next = mbr_part_next(part);
     824                next = mbr_log_part_next(part);
    799825
    800826                memset(pnext, 0, sizeof(mbr_pte_t));
Note: See TracChangeset for help on using the changeset viewer.