ext4_bcache: add ext4_bcache_cleanup routine.
authorngkaho1234 <ngkaho1234@gmail.com>
Sun, 20 Dec 2015 10:51:14 +0000 (10:51 +0000)
committerngkaho1234 <ngkaho1234@gmail.com>
Sun, 20 Dec 2015 10:57:14 +0000 (10:57 +0000)
lwext4/ext4.c
lwext4/ext4_bcache.c
lwext4/ext4_bcache.h

index 346df46027ecb0f5172fe2bd64fb22fe0b497cd5..d9381a2961dd7eeb8c8291b89d8b2050064e8dcc 100644 (file)
@@ -403,6 +403,7 @@ int ext4_mount(const char *dev_name, const char *mount_point)
        /*Bind block cache to block device*/
        r = ext4_block_bind_bcache(bd, bc);
        if (r != EOK) {
+               ext4_bcache_cleanup(bc);
                ext4_block_fini(bd);
                if (mp->cache_dynamic) {
                        ext4_bcache_fini_dynamic(bc);
@@ -437,6 +438,7 @@ int ext4_umount(const char *mount_point)
 
        mp->mounted = 0;
 
+       ext4_bcache_cleanup(mp->fs.bdev->bc);
        if (mp->cache_dynamic) {
                ext4_bcache_fini_dynamic(mp->fs.bdev->bc);
                free(mp->fs.bdev->bc);
index b4e247c6dce3df94bea306a65aa69b8e7d4dbbfa..3b1c108536a2c53a306da4d8750cd25997db6b1b 100644 (file)
@@ -81,6 +81,15 @@ int ext4_bcache_init_dynamic(struct ext4_bcache *bc, uint32_t cnt,
        return EOK;
 }
 
+void ext4_bcache_cleanup(struct ext4_bcache *bc)
+{
+       struct ext4_buf *buf, *tmp;
+       RB_FOREACH_SAFE(buf, ext4_buf_lba, &bc->lba_root, tmp) {
+               ext4_block_flush_buf(bc->bdev, buf);
+               ext4_bcache_drop_buf(bc, buf);
+       }
+}
+
 int ext4_bcache_fini_dynamic(struct ext4_bcache *bc)
 {
        memset(bc, 0, sizeof(struct ext4_bcache));
index 938f13bb3f0191bb5fc922e196c458fe63d06035..1dfec5f392e0373626cf76852ba13b0e1e14c9f5 100644 (file)
@@ -219,6 +219,10 @@ ext4_bcache_remove_dirty_node(struct ext4_bcache *bc, struct ext4_buf *buf) {
 int ext4_bcache_init_dynamic(struct ext4_bcache *bc, uint32_t cnt,
                             uint32_t itemsize);
 
+/**@brief   Do cleanup works on block cache.
+ * @param   bc block cache descriptor.*/
+void ext4_bcache_cleanup(struct ext4_bcache *bc);
+
 /**@brief   Dynamic de-initialization of block cache.
  * @param   bc block cache descriptor
  * @return  standard error code*/