Changeset deacc58d in mainline for uspace/lib/label/src/mbr.c
- Timestamp:
- 2017-06-20T17:34:02Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 80da8f70
- Parents:
- 63e27ef
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/label/src/mbr.c
r63e27ef rdeacc58d 34 34 */ 35 35 36 #include <block.h>37 36 #include <byteorder.h> 38 37 #include <errno.h> … … 43 42 #include "mbr.h" 44 43 45 static int mbr_open( service_id_t, label_t **);44 static int mbr_open(label_bd_t *, label_t **); 46 45 static int mbr_open_ext(label_t *); 47 static int mbr_create( service_id_t, label_t **);46 static int mbr_create(label_bd_t *, label_t **); 48 47 static void mbr_close(label_t *); 49 48 static int mbr_destroy(label_t *); … … 86 85 }; 87 86 88 static int mbr_open( service_id_t sid, label_t **rlabel)87 static int mbr_open(label_bd_t *bd, label_t **rlabel) 89 88 { 90 89 label_t *label = NULL; … … 97 96 int rc; 98 97 99 rc = b lock_get_bsize(sid, &bsize);100 if (rc != EOK) { 101 rc = EIO; 102 goto error; 103 } 104 105 rc = b lock_get_nblocks(sid, &nblocks);98 rc = bd->ops->get_bsize(bd->arg, &bsize); 99 if (rc != EOK) { 100 rc = EIO; 101 goto error; 102 } 103 104 rc = bd->ops->get_nblocks(bd->arg, &nblocks); 106 105 if (rc != EOK) { 107 106 rc = EIO; … … 125 124 } 126 125 127 rc = b lock_read_direct(sid, mbr_ba, 1, mbr);126 rc = bd->ops->read(bd->arg, mbr_ba, 1, mbr); 128 127 if (rc != EOK) { 129 128 rc = EIO; … … 160 159 label->ops = &mbr_label_ops; 161 160 label->ltype = lt_mbr; 162 label-> svc_id = sid;161 label->bd = *bd; 163 162 label->block_size = bsize; 164 163 label->ablock0 = mbr_ablock0; … … 219 218 while (true) { 220 219 /* Read EBR */ 221 rc = block_read_direct(label->svc_id, ebr_b0, 1, ebr);220 rc = label->bd.ops->read(label->bd.arg, ebr_b0, 1, ebr); 222 221 if (rc != EOK) { 223 222 rc = EIO; … … 280 279 } 281 280 282 static int mbr_create( service_id_t sid, label_t **rlabel)281 static int mbr_create(label_bd_t *bd, label_t **rlabel) 283 282 { 284 283 label_t *label = NULL; … … 289 288 int rc; 290 289 291 rc = b lock_get_bsize(sid, &bsize);292 if (rc != EOK) { 293 rc = EIO; 294 goto error; 295 } 296 297 rc = b lock_get_nblocks(sid, &nblocks);290 rc = bd->ops->get_bsize(bd->arg, &bsize); 291 if (rc != EOK) { 292 rc = EIO; 293 goto error; 294 } 295 296 rc = bd->ops->get_nblocks(bd->arg, &nblocks); 298 297 if (rc != EOK) { 299 298 rc = EIO; … … 321 320 mbr->signature = host2uint16_t_le(mbr_br_signature); 322 321 323 rc = b lock_write_direct(sid, mbr_ba, 1, mbr);322 rc = bd->ops->write(bd->arg, mbr_ba, 1, mbr); 324 323 if (rc != EOK) { 325 324 rc = EIO; … … 333 332 label->ltype = lt_mbr; 334 333 label->block_size = bsize; 335 label-> svc_id = sid;334 label->bd = *bd; 336 335 label->ablock0 = mbr_ablock0; 337 336 label->anblocks = nblocks - mbr_ablock0; … … 387 386 } 388 387 389 rc = block_write_direct(label->svc_id, mbr_ba, 1, mbr);388 rc = label->bd.ops->write(label->bd.arg, mbr_ba, 1, mbr); 390 389 if (rc != EOK) { 391 390 rc = EIO; … … 998 997 return ENOMEM; 999 998 1000 rc = block_read_direct(label->svc_id, mbr_ba, 1, br);999 rc = label->bd.ops->read(label->bd.arg, mbr_ba, 1, br); 1001 1000 if (rc != EOK) { 1002 1001 rc = EIO; … … 1006 1005 br->pte[index] = *pte; 1007 1006 1008 rc = block_write_direct(label->svc_id, mbr_ba, 1, br);1007 rc = label->bd.ops->write(label->bd.arg, mbr_ba, 1, br); 1009 1008 if (rc != EOK) { 1010 1009 rc = EIO; … … 1066 1065 br->signature = host2uint16_t_le(mbr_br_signature); 1067 1066 1068 rc = block_write_direct(label->svc_id, ba, 1, br);1067 rc = label->bd.ops->write(label->bd.arg, ba, 1, br); 1069 1068 if (rc != EOK) { 1070 1069 rc = EIO; … … 1091 1090 ba = part->block0 - part->hdr_blocks; 1092 1091 1093 rc = block_write_direct(label->svc_id, ba, 1, br);1092 rc = label->bd.ops->write(label->bd.arg, ba, 1, br); 1094 1093 if (rc != EOK) { 1095 1094 rc = EIO; … … 1118 1117 return ENOMEM; 1119 1118 1120 rc = block_read_direct(label->svc_id, ba, 1, br);1119 rc = label->bd.ops->read(label->bd.arg, ba, 1, br); 1121 1120 if (rc != EOK) { 1122 1121 rc = EIO; … … 1133 1132 mbr_log_part_to_ptes(part, NULL, &br->pte[mbr_ebr_pte_next]); 1134 1133 1135 rc = block_write_direct(label->svc_id, ba, 1, br);1134 rc = label->bd.ops->write(label->bd.arg, ba, 1, br); 1136 1135 if (rc != EOK) { 1137 1136 rc = EIO;
Note:
See TracChangeset
for help on using the changeset viewer.