diff options
| author | ngkaho1234 <ngkaho1234@gmail.com> | 2016-02-14 14:49:52 +0000 |
|---|---|---|
| committer | ngkaho1234 <ngkaho1234@gmail.com> | 2016-02-14 14:49:52 +0000 |
| commit | 9503c359b58ef633f2de0f3a169c94e15edecccf (patch) | |
| tree | eab79a692461655aa5f88d5ff443527599caf5cc /src | |
| parent | 91d3934d13b81f5edd3811af364bd412ba1d880d (diff) | |
ext4_extent: introduce need_split boolean to invoke splitting.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ext4_extent.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/ext4_extent.c b/src/ext4_extent.c index 63a85d9..3669ba1 100644 --- a/src/ext4_extent.c +++ b/src/ext4_extent.c @@ -901,19 +901,20 @@ static inline bool ext4_ext_can_append(struct ext4_extent *ex1, struct ext4_exte return 1; } -#define EXT_INODE_HDR_NEED_GROW 0x1 - static int ext4_ext_insert_leaf(struct ext4_inode_ref *inode_ref, struct ext4_extent_path *path, int at, struct ext4_extent *newext, - int flags) + int flags, + bool *need_split) { struct ext4_extent_path *curp = path + at; struct ext4_extent *ex = curp->extent; int len, err, unwritten; struct ext4_extent_header *eh; + *need_split = false; + if (curp->extent && to_le32(newext->first_block) == to_le32(curp->extent->first_block)) return EIO; @@ -944,7 +945,8 @@ static int ext4_ext_insert_leaf(struct ext4_inode_ref *inode_ref, if (to_le16(curp->header->entries_count) == to_le16(curp->header->max_entries_count)) { - err = EXT_INODE_HDR_NEED_GROW; + err = EIO; + *need_split = true; goto out; } else { eh = curp->header; @@ -1084,13 +1086,15 @@ int ext4_ext_insert_extent(struct ext4_inode_ref *inode_ref, struct ext4_extent_ struct ext4_extent_path *path = *ppath; struct ext4_extent_path *npath = NULL; bool ins_right_leaf = false; + bool need_split; again: depth = ext_depth(inode_ref->inode); ret = ext4_ext_insert_leaf(inode_ref, path, depth, newext, - flags); - if (ret == EXT_INODE_HDR_NEED_GROW) { + flags, + &need_split); + if (ret == EIO && need_split == true) { int i; for (i = depth, level = 0;i >= 0;i--, level++) if (EXT_HAS_FREE_INDEX(path + i)) |
