[rtems commit] libblock: Fix read-ahead task wake-up

Sebastian Huber sebh at rtems.org
Mon Jul 9 09:07:42 UTC 2012


Module:    rtems
Branch:    master
Commit:    5b29a08d691c589b337a0446ca60263fe22d93db
Changeset: http://git.rtems.org/rtems/commit/?id=5b29a08d691c589b337a0446ca60263fe22d93db

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Jul  6 16:39:00 2012 +0200

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.

---

 cpukit/libblock/src/bdbuf.c |   15 ++++++++++-----
 1 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/cpukit/libblock/src/bdbuf.c b/cpukit/libblock/src/bdbuf.c
index 5b66656..f5da0fc 100644
--- a/cpukit/libblock/src/bdbuf.c
+++ b/cpukit/libblock/src/bdbuf.c
@@ -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);
   }
 }
 




More information about the vc mailing list