Do not verify checksum upon seeking in the directory.
[lwext4.git] / lwext4 / ext4.c
index 78b920379639e62a2cc27aab850a266c689cbeb2..ac379b95a0199052c5e216cf4d9b006f7731f039 100644 (file)
@@ -198,35 +198,36 @@ static int ext4_link(struct ext4_mountpoint *mp, struct ext4_inode_ref *parent,
        if (ext4_inode_is_type(&mp->fs.sb, child->inode,
                               EXT4_INODE_MODE_DIRECTORY) &&
            !rename) {
-               rc = ext4_dir_add_entry(child, ".", strlen("."), child);
-               if (rc != EOK) {
-                       ext4_dir_remove_entry(parent, name, strlen(name));
-                       return rc;
-               }
-
-               rc = ext4_dir_add_entry(child, "..", strlen(".."), parent);
-               if (rc != EOK) {
-                       ext4_dir_remove_entry(parent, name, strlen(name));
-                       ext4_dir_remove_entry(child, ".", strlen("."));
-                       return rc;
-               }
-
-               /*New empty directory. Two links (. and ..) */
-               ext4_inode_set_links_count(child->inode, 2);
 
 #if CONFIG_DIR_INDEX_ENABLE
                /* Initialize directory index if supported */
-               if (ext4_sb_has_feature_compatible(
-                       &mp->fs.sb, EXT4_FEATURE_COMPAT_DIR_INDEX)) {
-                       rc = ext4_dir_dx_init(child);
+               if (ext4_sb_feature_com(&mp->fs.sb, EXT4_FCOM_DIR_INDEX)) {
+                       rc = ext4_dir_dx_init(child, parent);
                        if (rc != EOK)
                                return rc;
 
                        ext4_inode_set_flag(child->inode,
                                            EXT4_INODE_FLAG_INDEX);
                        child->dirty = true;
-               }
+               } else
 #endif
+               {
+                       rc = ext4_dir_add_entry(child, ".", strlen("."), child);
+                       if (rc != EOK) {
+                               ext4_dir_remove_entry(parent, name, strlen(name));
+                               return rc;
+                       }
+
+                       rc = ext4_dir_add_entry(child, "..", strlen(".."), parent);
+                       if (rc != EOK) {
+                               ext4_dir_remove_entry(parent, name, strlen(name));
+                               ext4_dir_remove_entry(child, ".", strlen("."));
+                               return rc;
+                       }
+               }
+
+               /*New empty directory. Two links (. and ..) */
+               ext4_inode_set_links_count(child->inode, 2);
 
                ext4_fs_inode_links_count_inc(parent);
                child->dirty = true;