diff options
Diffstat (limited to 'cpukit/libblock/src/media.c')
-rw-r--r-- | cpukit/libblock/src/media.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/cpukit/libblock/src/media.c b/cpukit/libblock/src/media.c index b4ddd6ad7c..989f80ded2 100644 --- a/cpukit/libblock/src/media.c +++ b/cpukit/libblock/src/media.c @@ -812,15 +812,19 @@ static rtems_status_code disk_detach_worker( 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; } - sc = rtems_bdbuf_syncdev(dev); - if (sc != RTEMS_SUCCESSFUL) { - rsc = RTEMS_IO_ERROR; + dd = rtems_disk_obtain(dev); + if (dd != NULL) { + sc = rtems_bdbuf_syncdev(dd); + if (sc != RTEMS_SUCCESSFUL) { + rsc = RTEMS_IO_ERROR; + } } sc = rtems_disk_delete(dev); @@ -828,7 +832,10 @@ static rtems_status_code disk_detach_worker( rsc = RTEMS_IO_ERROR; } - rtems_bdbuf_purge_dev(dev); + 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)); |