summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/src/bdbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libblock/src/bdbuf.c')
-rw-r--r--cpukit/libblock/src/bdbuf.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/cpukit/libblock/src/bdbuf.c b/cpukit/libblock/src/bdbuf.c
index 4985dc1e16..c0744c6db2 100644
--- a/cpukit/libblock/src/bdbuf.c
+++ b/cpukit/libblock/src/bdbuf.c
@@ -1754,20 +1754,23 @@ rtems_bdbuf_get_media_block (const rtems_disk_device *dd,
rtems_blkdev_bnum block,
rtems_blkdev_bnum *media_block_ptr)
{
- /*
- * Compute the media block number. Drivers work with media block number not
- * the block number a BD may have as this depends on the block size set by
- * the user.
- */
- rtems_blkdev_bnum mb = rtems_bdbuf_media_block (dd, block);
- if (mb >= dd->size)
+ rtems_status_code sc = RTEMS_SUCCESSFUL;
+
+ if (block < dd->block_count)
+ {
+ /*
+ * Compute the media block number. Drivers work with media block number not
+ * the block number a BD may have as this depends on the block size set by
+ * the user.
+ */
+ *media_block_ptr = rtems_bdbuf_media_block (dd, block) + dd->start;
+ }
+ else
{
- return RTEMS_INVALID_ID;
+ sc = RTEMS_INVALID_ID;
}
- *media_block_ptr = mb + dd->start;
-
- return RTEMS_SUCCESSFUL;
+ return sc;
}
rtems_status_code
@@ -2909,6 +2912,8 @@ rtems_bdbuf_set_block_size (rtems_disk_device *dd, uint32_t block_size)
block_to_media_block_shift = -1;
dd->block_size = block_size;
+ dd->block_count = dd->size / media_blocks_per_block;
+ dd->media_blocks_per_block = media_blocks_per_block;
dd->block_to_media_block_shift = block_to_media_block_shift;
dd->bds_per_group = bds_per_group;
}