Whamcloud - gitweb
e2fsck: add support for dirdata feature
[tools/e2fsprogs.git] / lib / ext2fs / link.c
index 6f523ae..a5ed3de 100644 (file)
@@ -46,7 +46,6 @@ static errcode_t alloc_dx_frame(ext2_filsys fs, struct dx_frame *frame)
 
 static void dx_release(struct dx_lookup_info *info)
 {
-       struct ext2_dx_root_info *root;
        int level;
 
        for (level = 0; level < info->levels; level++) {
@@ -98,7 +97,7 @@ static errcode_t dx_lookup(ext2_filsys fs, ext2_ino_t dir,
        int count, limit;
        int hash_alg;
        int hash_flags = diri->i_flags & EXT4_CASEFOLD_FL;
-       __u32 hash, minor_hash;
+       __u32 minor_hash;
        struct dx_frame *frame;
 
        errcode = alloc_dx_frame(fs, &(info->frames[0]));
@@ -193,12 +192,11 @@ static int link_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
        unsigned int rec_len, min_rec_len, curr_rec_len;
        int ret = 0;
        int csum_size = 0;
-       struct ext2_dir_entry_tail *t;
 
        if (ls->done)
                return DIRENT_ABORT;
 
-       rec_len = EXT2_DIR_REC_LEN(ls->namelen);
+       rec_len = EXT2_DIR_NAME_LEN(ls->namelen);
 
        ls->err = ext2fs_get_rec_len(ls->fs, dirent, &curr_rec_len);
        if (ls->err)
@@ -227,7 +225,7 @@ static int link_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
         * truncate it and return.
         */
        if (dirent->inode) {
-               min_rec_len = EXT2_DIR_REC_LEN(ext2fs_dirent_name_len(dirent));
+               min_rec_len = EXT2_DIR_REC_LEN(dirent);
                if (curr_rec_len < (min_rec_len + rec_len))
                        return ret;
                rec_len = curr_rec_len - min_rec_len;
@@ -255,7 +253,7 @@ static int link_proc(ext2_ino_t dir EXT2FS_ATTR((unused)),
        ext2fs_dirent_set_name_len(dirent, ls->namelen);
        strncpy(dirent->name, ls->name, ls->namelen);
        if (ext2fs_has_feature_filetype(ls->sb))
-               ext2fs_dirent_set_file_type(dirent, ls->flags & 0x7);
+               ext2fs_dirent_set_file_type(dirent, ls->flags & EXT2_FT_MASK);
 
        ls->done++;
        return DIRENT_ABORT|DIRENT_CHANGED;
@@ -322,7 +320,7 @@ static errcode_t dx_move_dirents(ext2_filsys fs, struct dx_hash_map *map,
 {
        struct ext2_dir_entry *de;
        int i;
-       int rec_len;
+       int rec_len = 0;
        errcode_t retval;
        int csum_size = 0;
        void *base = to;
@@ -332,7 +330,7 @@ static errcode_t dx_move_dirents(ext2_filsys fs, struct dx_hash_map *map,
 
        for (i = 0; i < count; i++) {
                de = from + map[i].off;
-               rec_len = EXT2_DIR_REC_LEN(ext2fs_dirent_name_len(de));
+               rec_len = EXT2_DIR_REC_LEN(de);
                memcpy(to, de, rec_len);
                retval = ext2fs_set_rec_len(fs, rec_len, to);
                if (retval)
@@ -381,8 +379,8 @@ static errcode_t dx_split_leaf(ext2_filsys fs, ext2_ino_t dir,
        struct ext2_dir_entry *de;
        void *buf2;
        errcode_t retval = 0;
-       int rec_len;
-       int offset, move_size;
+       unsigned int rec_len;
+       unsigned int offset, move_size;
        int i, count = 0;
        struct dx_hash_map *map;
        int continued;
@@ -473,7 +471,7 @@ static errcode_t dx_grow_tree(ext2_filsys fs, ext2_ino_t dir,
                    ext2fs_le16_to_cpu(info->frames[i].head->limit))
                        break;
        /* Need to grow tree depth? */
-       if (i < 0 && info->levels > ext2_dir_htree_level(fs))
+       if (i < 0 && info->levels >= ext2_dir_htree_level(fs))
                return EXT2_ET_DIR_NO_SPACE;
        lblk = size / fs->blocksize;
        size += fs->blocksize;
@@ -571,7 +569,7 @@ static errcode_t dx_link(ext2_filsys fs, ext2_ino_t dir,
        dx_info.namelen = strlen(name);
 again:
        retval = dx_lookup(fs, dir, diri, &dx_info);
-       if (retval < 0)
+       if (retval)
                goto free_buf;
 
        retval = add_dirent_to_buf(fs,