From: root Date: Sun, 20 Sep 2015 22:47:37 +0000 (+0000) Subject: FIX: the parent directory reference in child directory inode, a.k.a '..' dirent is... X-Git-Tag: v1.0.0~433^2~8 X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=241ba2c8b4e76232dea9a44f3478ee6408ee41c1;p=lwext4.git FIX: the parent directory reference in child directory inode, a.k.a '..' dirent is not correctly reset during rename. --- diff --git a/lwext4/ext4.c b/lwext4/ext4.c index 7ce8786..4b35858 100644 --- a/lwext4/ext4.c +++ b/lwext4/ext4.c @@ -253,7 +253,7 @@ static int ext4_link(struct ext4_mountpoint *mp, struct ext4_inode_ref *parent, } else { #if CONFIG_DIR_INDEX_ENABLE - rc = ext4_dir_dx_reset_parent_inode(parent, + rc = ext4_dir_dx_reset_parent_inode(child, parent->index); if (rc != EOK) return rc; @@ -1220,6 +1220,25 @@ Finish: } +int ext4_fopen_all(ext4_file *f, const char *path, int flags) +{ + struct ext4_mountpoint *mp = ext4_get_mount(path); + int r; + int filetype; + + if (!mp) + return ENOENT; + + filetype = EXT4_DIRECTORY_FILETYPE_UNKNOWN; + + EXT4_MP_LOCK(mp); + ext4_block_cache_write_back(mp->fs.bdev, 1); + r = ext4_generic_open2(f, path, flags, filetype, 0, 0); + ext4_block_cache_write_back(mp->fs.bdev, 0); + EXT4_MP_UNLOCK(mp); + return r; +} + int ext4_ftruncate(ext4_file *f, uint64_t size) { int r;