[rtems commit] libblock: Add optional free at delete request

Sebastian Huber sebh at rtems.org
Tue Mar 13 11:31:32 UTC 2012


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon Mar  5 10:01:37 2012 +0100

libblock: Add optional free at delete request

---

 cpukit/libblock/include/rtems/ramdisk.h |   10 ++++++++++
 cpukit/libblock/src/ramdisk-driver.c    |    9 ++++++++-
 2 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/cpukit/libblock/include/rtems/ramdisk.h b/cpukit/libblock/include/rtems/ramdisk.h
index 71efc9f..a396bd6 100644
--- a/cpukit/libblock/include/rtems/ramdisk.h
+++ b/cpukit/libblock/include/rtems/ramdisk.h
@@ -136,6 +136,11 @@ typedef struct ramdisk {
    * @brief Trace enable.
    */
   bool trace;
+
+  /**
+   * @brief Free the RAM disk at the block device delete request.
+   */
+  bool free_at_delete_request;
 } ramdisk;
 
 extern const rtems_driver_address_table ramdisk_ops;
@@ -213,6 +218,11 @@ ramdisk *ramdisk_allocate(
 
 void ramdisk_free(ramdisk *rd);
 
+static inline void ramdisk_enable_free_at_delete_request(ramdisk *rd)
+{
+  rd->free_at_delete_request = true;
+}
+
 /**
  * @brief Allocates, initializes and registers a RAM disk.
  *
diff --git a/cpukit/libblock/src/ramdisk-driver.c b/cpukit/libblock/src/ramdisk-driver.c
index 2bc8d27..da36d79 100644
--- a/cpukit/libblock/src/ramdisk-driver.c
+++ b/cpukit/libblock/src/ramdisk-driver.c
@@ -102,12 +102,13 @@ ramdisk_write(struct ramdisk *rd, rtems_blkdev_request *req)
 int
 ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
 {
+    struct ramdisk *rd = rtems_disk_get_driver_data(dd);
+
     switch (req)
     {
         case RTEMS_BLKIO_REQUEST:
         {
             rtems_blkdev_request *r = argp;
-            struct ramdisk *rd = rtems_disk_get_driver_data(dd);
 
             switch (r->req)
             {
@@ -124,6 +125,12 @@ ramdisk_ioctl(rtems_disk_device *dd, uint32_t req, void *argp)
             break;
         }
 
+        case RTEMS_BLKIO_DELETED:
+            if (rd->free_at_delete_request) {
+              ramdisk_free(rd);
+            }
+            break;
+
         default:
             return rtems_blkdev_ioctl (dd, req, argp);
             break;




More information about the vc mailing list