You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
ext4: let ext4_rename handle inline dir
In case we rename a directory, ext4_rename has to read the dir block and change its dotdot's information. The old ext4_rename encapsulated the dir_block read into itself. So this patch adds a new function ext4_get_first_dir_block() which gets the dir buffer information so the ext4_rename can handle it properly. As it will also change the parent inode number, we return the parent_de so that ext4_rename() can handle it more easily. ext4_find_entry is also changed so that the caller(rename) can tell whether the found entry is an inlined one or not and journaling the corresponding buffer head. Signed-off-by: Tao Ma <boyu.mt@taobao.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
@@ -1424,6 +1424,21 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct buffer_head *ext4_get_first_inline_block(struct inode *inode,
|
||||
struct ext4_dir_entry_2 **parent_de,
|
||||
int *retval)
|
||||
{
|
||||
struct ext4_iloc iloc;
|
||||
|
||||
*retval = ext4_get_inode_loc(inode, &iloc);
|
||||
if (*retval)
|
||||
return NULL;
|
||||
|
||||
*parent_de = (struct ext4_dir_entry_2 *)ext4_raw_inode(&iloc)->i_block;
|
||||
|
||||
return iloc.bh;
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to create the inline data for the new dir.
|
||||
* If it succeeds, return 0, otherwise return the error.
|
||||
|
||||
Reference in New Issue
Block a user