diff options
Diffstat (limited to 'fs/ext4/inline.c')
| -rw-r--r-- | fs/ext4/inline.c | 27 | 
1 files changed, 16 insertions, 11 deletions
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c index b41512d1badc..3cf01629010d 100644 --- a/fs/ext4/inline.c +++ b/fs/ext4/inline.c @@ -795,7 +795,7 @@ ext4_journalled_write_inline_data(struct inode *inode,   *    clear the inode state safely.   * 2. The inode has inline data, then we need to read the data, make it   *    update and dirty so that ext4_da_writepages can handle it. We don't - *    need to start the journal since the file's metatdata isn't changed now. + *    need to start the journal since the file's metadata isn't changed now.   */  static int ext4_da_convert_inline_data_to_extent(struct address_space *mapping,  						 struct inode *inode, @@ -1031,7 +1031,7 @@ static int ext4_add_dirent_to_inline(handle_t *handle,  	err = ext4_journal_get_write_access(handle, iloc->bh);  	if (err)  		return err; -	ext4_insert_dentry(inode, de, inline_size, fname); +	ext4_insert_dentry(dir, inode, de, inline_size, fname);  	ext4_show_inline_dir(dir, iloc->bh, inline_start, inline_size); @@ -1100,7 +1100,7 @@ static int ext4_update_inline_dir(handle_t *handle, struct inode *dir,  	int old_size = EXT4_I(dir)->i_inline_size - EXT4_MIN_INLINE_DATA_SIZE;  	int new_size = get_max_inline_xattr_value_size(dir, iloc); -	if (new_size - old_size <= EXT4_DIR_REC_LEN(1)) +	if (new_size - old_size <= ext4_dir_rec_len(1, NULL))  		return -ENOSPC;  	ret = ext4_update_inline_data(handle, dir, @@ -1380,8 +1380,8 @@ int ext4_inlinedir_to_tree(struct file *dir_file,  			fake.name_len = 1;  			strcpy(fake.name, ".");  			fake.rec_len = ext4_rec_len_to_disk( -						EXT4_DIR_REC_LEN(fake.name_len), -						inline_size); +					  ext4_dir_rec_len(fake.name_len, NULL), +					  inline_size);  			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);  			de = &fake;  			pos = EXT4_INLINE_DOTDOT_OFFSET; @@ -1390,8 +1390,8 @@ int ext4_inlinedir_to_tree(struct file *dir_file,  			fake.name_len = 2;  			strcpy(fake.name, "..");  			fake.rec_len = ext4_rec_len_to_disk( -						EXT4_DIR_REC_LEN(fake.name_len), -						inline_size); +					  ext4_dir_rec_len(fake.name_len, NULL), +					  inline_size);  			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);  			de = &fake;  			pos = EXT4_INLINE_DOTDOT_SIZE; @@ -1406,7 +1406,12 @@ int ext4_inlinedir_to_tree(struct file *dir_file,  			}  		} -		ext4fs_dirhash(dir, de->name, de->name_len, hinfo); +		if (ext4_hash_in_dirent(dir)) { +			hinfo->hash = EXT4_DIRENT_HASH(de); +			hinfo->minor_hash = EXT4_DIRENT_MINOR_HASH(de); +		} else { +			ext4fs_dirhash(dir, de->name, de->name_len, hinfo); +		}  		if ((hinfo->hash < start_hash) ||  		    ((hinfo->hash == start_hash) &&  		     (hinfo->minor_hash < start_minor_hash))) @@ -1488,8 +1493,8 @@ int ext4_read_inline_dir(struct file *file,  	 * So we will use extra_offset and extra_size to indicate them  	 * during the inline dir iteration.  	 */ -	dotdot_offset = EXT4_DIR_REC_LEN(1); -	dotdot_size = dotdot_offset + EXT4_DIR_REC_LEN(2); +	dotdot_offset = ext4_dir_rec_len(1, NULL); +	dotdot_size = dotdot_offset + ext4_dir_rec_len(2, NULL);  	extra_offset = dotdot_size - EXT4_INLINE_DOTDOT_SIZE;  	extra_size = extra_offset + inline_size; @@ -1524,7 +1529,7 @@ int ext4_read_inline_dir(struct file *file,  			 * failure will be detected in the  			 * dirent test below. */  			if (ext4_rec_len_from_disk(de->rec_len, extra_size) -				< EXT4_DIR_REC_LEN(1)) +				< ext4_dir_rec_len(1, NULL))  				break;  			i += ext4_rec_len_from_disk(de->rec_len,  						    extra_size);  |