ext4: Extent code cleanup
cover ext4: Extent code cleanup
Hi, i've finaly found time to review and test ext4 patches. And i have some fixes:
[1] One more one line fix for ext4-block-reservation patch. IMHO it is better to merge it with my previous block reservation fixes.
[2] Fix compilation with EXT_DEBUG
[3] Some code cleanup
PATCH 1/3 ext4 block reservation fix3
If ext4_reserve_block has failed we have to drop quota.
--- fs/ext4/balloc.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
fs/ext4/balloc.c +1 -1
@@ -1467,7 +1467,7 @@ ext4_fsblk_t ext4_new_blocks(handle_t *handle, struct inode *inode,if (!(EXT4_I (inode)->i_state &EXT4_STATE_BLOCKS_RESERVED )) { *errp =ext4_reserve_blocks (sb, num);if (*errp) -return 0 ; + goto out; reserved = num; }
Signature · 1 line
1.5.2
Re: [PATCH 1/3] ext4 block reservation fix3
thanks, Alex
Quoted 20 lines · Dmitry Monakhov
If
ext4_reserve_blockhas failed we have to drop quota.Signed-off-by Dmitry Monakhov <[email protected]>--- fs/ext4/balloc.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)fs/ext4/balloc.c +1
-1@@ -1467,7 +1467,7 @@ ext4_fsblk_t ext4_new_blocks(handle_t *handle, struct inode *inode,if (!(EXT4_I (inode)->i_state &EXT4_STATE_BLOCKS_RESERVED )) { *errp =ext4_reserve_blocks (sb, num);if (*errp) -return 0 ; + goto out; reserved = num; }
PATCH 2/3 extent compilation fixes
In reply to Dmitry MonakhovFix compilation with EXT_DEBUG, also fix leXX_to_cpu convertions.
--- fs/ext4/extents.c | 18 ++++++++++-------- 1 files changed, 10 insertions(+), 8 deletions(-)
fs/ext4/extents.c +10 -8
@@ -382,13 +382,14 @@ ext4_ext_binsearch_idx(struct inode *inode, struct ext4_ext_path *path, int bloc r = m -1 ; else l = m +1 ; -ext_debug ("%p(%u):%p(%u):%p(%u) " , l, l->ei_block, - m, m->ei_block, r, r->ei_block); +ext_debug ("%p(%u):%p(%u):%p(%u) " , l,le32_to_cpu (l->ei_block), + m,le32_to_cpu (m->ei_block), + r,le32_to_cpu (r->ei_block)); } path->p_idx = l -1 ;ext_debug (" -> %d->%lld " ,le32_to_cpu (path->p_idx->ei_block), -idx_block (path->p_idx)); +idx_pblock (path->p_idx));#ifdef CHECK_BINSEARCH {
@@ -447,8 +448,9 @@ ext4_ext_binsearch(struct inode *inode, struct ext4_ext_path *path, int block) r = m -1 ; else l = m +1 ; -ext_debug ("%p(%u):%p(%u):%p(%u) " , l, l->ee_block, - m, m->ee_block, r, r->ee_block); +ext_debug ("%p(%u):%p(%u):%p(%u) " , l,le32_to_cpu (l->ee_block), + m,le32_to_cpu (m->ee_block), + r,le32_to_cpu (r->ee_block)); } path->p_ext = l -1 ;
@@ -580,7 +582,7 @@ static int ext4_ext_insert_index(handle_t *handle, struct inode *inode,if (curp->p_idx !=EXT_LAST_INDEX (curp->p_hdr)) { len = (len -1 ) *sizeof (struct ext4_extent_idx ); len = len <0 ?0 : len; -ext_debug ("insert new index %d after: %d. " +ext_debug ("insert new index %d after: %llu. " "move %d from 0x%p to 0x%p\n" , logical, ptr, len, (curp->p_idx +1 ), (curp->p_idx +2 ));
@@ -591,7 +593,7 @@ static int ext4_ext_insert_index(handle_t *handle, struct inode *inode,/* insert before */ len = len *sizeof (struct ext4_extent_idx ); len = len <0 ?0 : len; -ext_debug ("insert new index %d before: %d. " +ext_debug ("insert new index %d before: %llu. " "move %d from 0x%p to 0x%p\n" , logical, ptr, len, curp->p_idx, (curp->p_idx +1 ));
@@ -791,7 +793,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,BUG_ON (EXT_MAX_INDEX (path[i].p_hdr) !=EXT_LAST_INDEX (path[i].p_hdr));while (path[i].p_idx <=EXT_MAX_INDEX (path[i].p_hdr)) { -ext_debug ("%d: move %d:%d in new index %llu\n" , i, +ext_debug ("%d: move %d:%llu in new index %llu\n" , i,le32_to_cpu (path[i].p_idx->ei_block),idx_pblock (path[i].p_idx), newblock);
Signature · 1 line
1.5.2
Re: [PATCH 2/3] extent compilation fixes
thanks, Alex
Quoted 68 lines · Dmitry Monakhov
Fix compilation with
EXT_DEBUG, also fixleXX_to_cpuconvertions.Signed-off-by Dmitry Monakhov <[email protected]>--- fs/ext4/extents.c | 18 ++++++++++-------- 1 files changed, 10 insertions(+), 8 deletions(-)fs/ext4/extents.c +10
-8@@ -382,13 +382,14 @@ ext4_ext_binsearch_idx(struct inode *inode, struct ext4_ext_path *path, int bloc r = m -1 ; else l = m +1 ; -ext_debug ("%p(%u):%p(%u):%p(%u) " , l, l->ei_block, - m, m->ei_block, r, r->ei_block); +ext_debug ("%p(%u):%p(%u):%p(%u) " , l,le32_to_cpu (l->ei_block), + m,le32_to_cpu (m->ei_block), + r,le32_to_cpu (r->ei_block)); } path->p_idx = l -1 ;ext_debug (" -> %d->%lld " ,le32_to_cpu (path->p_idx->ei_block), -idx_block (path->p_idx)); +idx_pblock (path->p_idx));#ifdef CHECK_BINSEARCH {@@ -447,8 +448,9 @@ ext4_ext_binsearch(struct inode *inode, struct ext4_ext_path *path, int block) r = m -1 ; else l = m +1 ; -ext_debug ("%p(%u):%p(%u):%p(%u) " , l, l->ee_block, - m, m->ee_block, r, r->ee_block); +ext_debug ("%p(%u):%p(%u):%p(%u) " , l,le32_to_cpu (l->ee_block), + m,le32_to_cpu (m->ee_block), + r,le32_to_cpu (r->ee_block)); } path->p_ext = l -1 ;@@ -580,7 +582,7 @@ static int ext4_ext_insert_index(handle_t *handle, struct inode *inode,if (curp->p_idx !=EXT_LAST_INDEX (curp->p_hdr)) { len = (len -1 ) *sizeof (struct ext4_extent_idx ); len = len <0 ?0 : len; -ext_debug ("insert new index %d after: %d. " +ext_debug ("insert new index %d after: %llu. " "move %d from 0x%p to 0x%p\n" , logical, ptr, len, (curp->p_idx +1 ), (curp->p_idx +2 ));@@ -591,7 +593,7 @@ static int ext4_ext_insert_index(handle_t *handle, struct inode *inode,/* insert before */ len = len *sizeof (struct ext4_extent_idx ); len = len <0 ?0 : len; -ext_debug ("insert new index %d before: %d. " +ext_debug ("insert new index %d before: %llu. " "move %d from 0x%p to 0x%p\n" , logical, ptr, len, curp->p_idx, (curp->p_idx +1 ));@@ -791,7 +793,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,BUG_ON (EXT_MAX_INDEX (path[i].p_hdr) !=EXT_LAST_INDEX (path[i].p_hdr));while (path[i].p_idx <=EXT_MAX_INDEX (path[i].p_hdr)) { -ext_debug ("%d: move %d:%d in new index %llu\n" , i, +ext_debug ("%d: move %d:%llu in new index %llu\n" , i,le32_to_cpu (path[i].p_idx->ei_block),idx_pblock (path[i].p_idx), newblock);
PATCH 3/3 ext4: extent macros cleanup
In reply to Dmitry Monakhov- Replace math equation to it's macro equivalent
- make ext4_ext_grow_indepth() indexes/leaf correct
--- fs/ext4/extents.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-)
fs/ext4/extents.c +7 -4
@@ -375,7 +375,7 @@ ext4_ext_binsearch_idx(struct inode *inode, struct ext4_ext_path *path, int blocext_debug ("binsearch for %d(idx): " , block); l =EXT_FIRST_INDEX (eh) +1 ; - r =EXT_FIRST_INDEX (eh) +le16_to_cpu (eh->eh_entries) -1 ; + r =EXT_LAST_INDEX (eh);while (l <= r) { m = l + (r - l) /2 ;if (block <le32_to_cpu (m->ei_block))
@@ -440,7 +440,7 @@ ext4_ext_binsearch(struct inode *inode, struct ext4_ext_path *path, int block)ext_debug ("binsearch for %d: " , block); l =EXT_FIRST_EXTENT (eh) +1 ; - r =EXT_FIRST_EXTENT (eh) +le16_to_cpu (eh->eh_entries) -1 ; + r =EXT_LAST_EXTENT (eh);while (l <= r) { m = l + (r - l) /2 ;
@@ -922,8 +922,11 @@ static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode, curp->p_hdr->eh_max =cpu_to_le16 (ext4_ext_space_root_idx (inode)); curp->p_hdr->eh_entries =cpu_to_le16 (1 ); curp->p_idx =EXT_FIRST_INDEX (curp->p_hdr); -/* FIXME: it works, but actually path[0] can be index */ - curp->p_idx->ei_block =EXT_FIRST_EXTENT (path[0 ].p_hdr)->ee_block; + +if (path[0 ].p_hdr->eh_depth) + curp->p_idx->ei_block =EXT_FIRST_INDEX (path[0 ].p_hdr)->ei_block; +else + curp->p_idx->ei_block =EXT_FIRST_EXTENT (path[0 ].p_hdr)->ee_block;ext4_idx_store_pblock (curp->p_idx, newblock); neh =ext_inode_hdr (inode);
Signature · 1 line
1.5.2
Re: [PATCH 3/3] ext4: extent macros cleanup
Quoted 44 lines · Dmitry Monakhov
- Replace math equation to it's macro equivalent
- makeext4_ext_grow_indepth()indexes/leaf correctSigned-off-by Dmitry Monakhov <[email protected]>--- fs/ext4/extents.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-)fs/ext4/extents.c +7
-4@@ -375,7 +375,7 @@ ext4_ext_binsearch_idx(struct inode *inode, struct ext4_ext_path *path, int blocext_debug ("binsearch for %d(idx): " , block); l =EXT_FIRST_INDEX (eh) +1 ; - r =EXT_FIRST_INDEX (eh) +le16_to_cpu (eh->eh_entries) -1 ; + r =EXT_LAST_INDEX (eh);while (l <= r) { m = l + (r - l) /2 ;if (block <le32_to_cpu (m->ei_block))@@ -440,7 +440,7 @@ ext4_ext_binsearch(struct inode *inode, struct ext4_ext_path *path, int block)ext_debug ("binsearch for %d: " , block); l =EXT_FIRST_EXTENT (eh) +1 ; - r =EXT_FIRST_EXTENT (eh) +le16_to_cpu (eh->eh_entries) -1 ; + r =EXT_LAST_EXTENT (eh);while (l <= r) { m = l + (r - l) /2 ;@@ -922,8 +922,11 @@ static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode, curp->p_hdr->eh_max =cpu_to_le16 (ext4_ext_space_root_idx (inode)); curp->p_hdr->eh_entries =cpu_to_le16 (1 ); curp->p_idx =EXT_FIRST_INDEX (curp->p_hdr); -/* FIXME: it works, but actually path[0] can be index */ - curp->p_idx->ei_block =EXT_FIRST_EXTENT (path[0 ].p_hdr)->ee_block; + +if (path[0 ].p_hdr->eh_depth) + curp->p_idx->ei_block =EXT_FIRST_INDEX (path[0 ].p_hdr)->ei_block; +else + curp->p_idx->ei_block =EXT_FIRST_EXTENT (path[0 ].p_hdr)->ee_block;ext4_idx_store_pblock (curp->p_idx, newblock); neh =ext_inode_hdr (inode);