1. Extra directory remove caching.
[lwext4.git] / lwext4 / ext4.c
index 60f44fa73c1b2c51950100ab312f831dd4aa657e..f7fe07a0f3b61d7e803027615894a3e892517b3b 100644 (file)
 /**@brief   Mount point descrpitor.*/\r
 struct ext4_mountpoint {\r
 \r
-    /**@brief  Mount point name (@ref ext4_mount)*/\r
+    /**@brief   Mount point name (@ref ext4_mount)*/\r
     const char *name;\r
 \r
-    /**@brief  Os dependent lock/unlock functions.*/\r
+    /**@brief   Os dependent lock/unlock functions.*/\r
     struct ext4_lock *os_locks;\r
 \r
-    /**@brief  Ext4 filesystem internals.*/\r
+    /**@brief   Ext4 filesystem internals.*/\r
     struct ext4_fs fs;\r
 \r
-    /**@brief  Dynamic alocation cache flag.*/\r
+    /**@brief   Dynamic alocation cache flag.*/\r
     bool cache_dynamic;\r
 };\r
 \r
 /**@brief   Block devices descriptor.*/\r
-struct _ext4_devices {\r
+struct _ext4_devices {\r
 \r
     /**@brief   Block device name (@ref ext4_device_register)*/\r
     const char *name;\r
@@ -87,11 +87,11 @@ struct      _ext4_devices {
     struct ext4_bcache *bc;\r
 };\r
 \r
-/**@brief      Block devices.*/\r
-struct _ext4_devices _bdevices[CONFIG_EXT4_BLOCKDEVS_COUNT];\r
+/**@brief   Block devices.*/\r
+struct _ext4_devices _bdevices[CONFIG_EXT4_BLOCKDEVS_COUNT];\r
 \r
 \r
-/**@brief      Mountpoints.*/\r
+/**@brief   Mountpoints.*/\r
 struct ext4_mountpoint _mp[CONFIG_EXT4_MOUNTPOINTS_COUNT];\r
 \r
 \r
@@ -105,8 +105,8 @@ int ext4_device_register(struct ext4_blockdev *bd, struct ext4_bcache *bc,
     for (i = 0; i < CONFIG_EXT4_BLOCKDEVS_COUNT; ++i) {\r
         if(!_bdevices[i].name){\r
             _bdevices[i].name   = dev_name;\r
-            _bdevices[i].bd    = bd;\r
-            _bdevices[i].bc    = bc;\r
+            _bdevices[i].bd = bd;\r
+            _bdevices[i].bc = bc;\r
             return EOK;\r
         }\r
     }\r
@@ -388,11 +388,11 @@ int ext4_mount(const char * dev_name, char *mount_point)
 }\r
 \r
 \r
-int    ext4_umount(char *mount_point)\r
+int ext4_umount(char *mount_point)\r
 {\r
-    int        i;\r
-    int        r = EOK;\r
-    struct ext4_mountpoint     *mp = 0;\r
+    int i;\r
+    int r = EOK;\r
+    struct ext4_mountpoint *mp = 0;\r
 \r
     for (i = 0; i < CONFIG_EXT4_MOUNTPOINTS_COUNT; ++i) {\r
         if(_mp[i].name){\r
@@ -502,7 +502,7 @@ static bool ext4_parse_flags(const char *flags, uint32_t *file_flags)
     }\r
 \r
     if(!strcmp(flags, "a") || !strcmp(flags, "ab")){\r
-        *file_flags = O_WRONLY | O_CREAT | O_APPEND    ;\r
+        *file_flags = O_WRONLY | O_CREAT | O_APPEND;\r
         return true;\r
     }\r
 \r
@@ -531,10 +531,10 @@ static int ext4_generic_open (ext4_file *f, const char *path,
 {\r
     struct ext4_mountpoint *mp = ext4_get_mount(path);\r
     struct ext4_directory_search_result result;\r
-    struct ext4_inode_ref      ref;\r
-    bool       is_goal = false;\r
-    uint8_t    inode_type = EXT4_DIRECTORY_FILETYPE_DIR;\r
-    int                r = ENOENT;\r
+    struct ext4_inode_ref ref;\r
+    bool is_goal = false;\r
+    uint8_t inode_type = EXT4_DIRECTORY_FILETYPE_DIR;\r
+    int r = ENOENT;\r
     uint32_t next_inode;\r
 \r
     f->mp = 0;\r
@@ -585,7 +585,7 @@ static int ext4_generic_open (ext4_file *f, const char *path,
                 break;\r
 \r
             /*O_CREAT allows create new entry*/\r
-            struct ext4_inode_ref      child_ref;\r
+            struct ext4_inode_ref child_ref;\r
             r = ext4_fs_alloc_inode(&mp->fs, &child_ref, is_goal ? !file_expect : true);\r
             if(r != EOK)\r
                 break;\r
@@ -790,7 +790,7 @@ int ext4_fread(ext4_file *f, void *buf, uint32_t size, uint32_t *rcnt)
     uint32_t fblock_start;\r
     uint32_t fblock_cnt;\r
     struct ext4_block b;\r
-    uint8_t    *u8_buf = buf;\r
+    uint8_t *u8_buf = buf;\r
     struct ext4_inode_ref ref;\r
     uint32_t sblock;\r
     uint32_t sblock_end;\r
@@ -821,7 +821,7 @@ int ext4_fread(ext4_file *f, void *buf, uint32_t size, uint32_t *rcnt)
 \r
     block_size = ext4_sb_get_block_size(&f->mp->fs.sb);\r
     size = size > (f->fsize - f->fpos) ? (f->fsize - f->fpos) : size;\r
-    sblock     = (f->fpos) / block_size;\r
+    sblock = (f->fpos) / block_size;\r
     sblock_end = (f->fpos + size) / block_size;\r
     u = (f->fpos) % block_size;\r
 \r
@@ -916,13 +916,13 @@ int ext4_fread(ext4_file *f, void *buf, uint32_t size, uint32_t *rcnt)
     return r;\r
 }\r
 \r
-int    ext4_fwrite(ext4_file *f, void *buf, uint32_t size, uint32_t *wcnt)\r
+int ext4_fwrite(ext4_file *f, void *buf, uint32_t size, uint32_t *wcnt)\r
 {\r
     int r = EOK;\r
     uint32_t u;\r
     uint32_t fblock;\r
     struct ext4_block b;\r
-    uint8_t    *u8_buf = buf;\r
+    uint8_t *u8_buf = buf;\r
     struct ext4_inode_ref ref;\r
     uint32_t sblock;\r
     uint32_t sblock_end;\r
@@ -962,7 +962,7 @@ int ext4_fwrite(ext4_file *f, void *buf, uint32_t size, uint32_t *wcnt)
     if(f->fsize % block_size)\r
         file_blocks++;\r
 \r
-    sblock     = (f->fpos) / block_size;\r
+    sblock = (f->fpos) / block_size;\r
 \r
     u = (f->fpos) % block_size;\r
 \r
@@ -1167,6 +1167,9 @@ int ext4_dir_rm(const char *path)
 \r
     inode_current = f.inode;\r
     dir_end = false;\r
+\r
+    ext4_block_delay_cache_flush(mp->fs.bdev, 1);\r
+\r
     do {\r
         /*Load directory node.*/\r
         r = ext4_fs_get_inode_ref(&f.mp->fs, inode_current, &current);\r
@@ -1300,7 +1303,7 @@ int ext4_dir_rm(const char *path)
 \r
     }while(depth);\r
 \r
-\r
+    ext4_block_delay_cache_flush(mp->fs.bdev, 0);\r
     EXT4_MP_UNLOCK(mp);\r
     return r;\r
 }\r