From 3ab9c76d3f84c5d556d1cd67b88766cc4ad7da0b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 5 Mar 2012 16:22:33 +0100 Subject: libblock: Use new API for disk media --- cpukit/libblock/src/media.c | 71 +++++++++------------------------------------ 1 file changed, 14 insertions(+), 57 deletions(-) (limited to 'cpukit/libblock/src/media.c') diff --git a/cpukit/libblock/src/media.c b/cpukit/libblock/src/media.c index 989f80ded2..e533ec4db0 100644 --- a/cpukit/libblock/src/media.c +++ b/cpukit/libblock/src/media.c @@ -7,7 +7,7 @@ */ /* - * Copyright (c) 2009, 2010 embedded brains GmbH. All rights reserved. + * Copyright (c) 2009-2012 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Obere Lagerstr. 30 @@ -22,10 +22,11 @@ #include #include +#include #include #include -#include +#include #include #include @@ -37,8 +38,7 @@ typedef struct { } partition_table; typedef struct { - dev_t physical_disk; - dev_t logical_disk; + size_t index; rtems_blkdev_bnum begin; rtems_blkdev_bnum count; } partition; @@ -577,20 +577,17 @@ static rtems_status_code partition_attach_worker( if (state == RTEMS_MEDIA_STATE_READY) { partition *part = worker_arg; - rtems_device_minor_number minor = - rtems_filesystem_dev_minor_t(part->logical_disk); - char *part_path = rtems_media_append_minor(src, minor); + char *part_path = rtems_media_append_minor(src, part->index); if (part_path == NULL) { return RTEMS_IO_ERROR; } - sc = rtems_disk_create_log( - part->logical_disk, - part->physical_disk, + sc = rtems_blkdev_create_partition( + part_path, + src, part->begin, - part->count, - part_path + part->count ); if (sc != RTEMS_SUCCESSFUL) { free(part_path); @@ -606,28 +603,16 @@ static rtems_status_code partition_attach_worker( static rtems_status_code attach_and_mount_partitions( const char *disk_path, - rtems_bdpart_partition *partitions, + const rtems_bdpart_partition *partitions, size_t count ) { rtems_status_code sc = RTEMS_SUCCESSFUL; - rtems_device_major_number major = 0; - rtems_device_minor_number minor = 0; - dev_t dev = 0; size_t i = 0; - sc = rtems_media_get_device_identifier(disk_path, &dev); - if (sc != RTEMS_SUCCESSFUL) { - return RTEMS_INVALID_ID; - } - - major = rtems_filesystem_dev_major_t(dev); - minor = rtems_filesystem_dev_minor_t(dev) + 1; - - for (i = 0; i < count; ++i, ++minor) { + for (i = 0; i < count; ++i) { partition part_desc = { - .physical_disk = dev, - .logical_disk = rtems_filesystem_make_dev_t(major, minor), + .index = i, .begin = partitions [i].begin, .count = partitions [i].end - partitions [i].begin }; @@ -807,42 +792,14 @@ static rtems_status_code disk_detach_worker( void *worker_arg __attribute__((unused)) ) { - rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_status_code rsc = RTEMS_SUCCESSFUL; if (state == RTEMS_MEDIA_STATE_READY) { - dev_t dev = 0; - rtems_disk_device *dd = NULL; - - sc = rtems_media_get_device_identifier(src, &dev); - if (sc != RTEMS_SUCCESSFUL) { - return RTEMS_IO_ERROR; - } - - dd = rtems_disk_obtain(dev); - if (dd != NULL) { - sc = rtems_bdbuf_syncdev(dd); - if (sc != RTEMS_SUCCESSFUL) { - rsc = RTEMS_IO_ERROR; - } - } + int rv = unlink(src); - sc = rtems_disk_delete(dev); - if (sc != RTEMS_SUCCESSFUL) { + if (rv != 0) { rsc = RTEMS_IO_ERROR; } - - if (dd != NULL) { - rtems_bdbuf_purge_dev(dd); - rtems_disk_release(dd); - } - - if (rtems_filesystem_dev_minor_t(dev) == 0) { - sc = rtems_io_unregister_driver(rtems_filesystem_dev_major_t(dev)); - if (sc != RTEMS_SUCCESSFUL) { - rsc = RTEMS_IO_ERROR; - } - } } return rsc; -- cgit v1.2.3