forked from Imagelibrary/rtems
libblock: Fix read-ahead task wake-up
In case the read-ahead task is not configured we must not send a wake-up event. This would send the wake-up event to the executing task. We must send the wake-up event only in case the request list changes from empty to non-empty. Since otherwise we may send a false transfer event.
This commit is contained in:
@@ -2039,17 +2039,22 @@ static void
|
||||
rtems_bdbuf_check_read_ahead_trigger (rtems_disk_device *dd,
|
||||
rtems_blkdev_bnum block)
|
||||
{
|
||||
if (dd->read_ahead.trigger == block
|
||||
if (bdbuf_cache.read_ahead_task != 0
|
||||
&& dd->read_ahead.trigger == block
|
||||
&& !rtems_bdbuf_is_read_ahead_active (dd))
|
||||
{
|
||||
rtems_status_code sc;
|
||||
rtems_chain_control *chain = &bdbuf_cache.read_ahead_chain;
|
||||
|
||||
if (rtems_chain_is_empty (chain))
|
||||
{
|
||||
sc = rtems_event_send (bdbuf_cache.read_ahead_task,
|
||||
RTEMS_BDBUF_READ_AHEAD_WAKE_UP);
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_RA_WAKE_UP);
|
||||
}
|
||||
|
||||
rtems_chain_append_unprotected (chain, &dd->read_ahead.node);
|
||||
sc = rtems_event_send (bdbuf_cache.read_ahead_task,
|
||||
RTEMS_BDBUF_READ_AHEAD_WAKE_UP);
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_RA_WAKE_UP);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user