diff options
author | Zheng Liu <wenqing.lz@taobao.com> | 2013-02-18 00:26:51 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2013-02-18 00:26:51 -0500 |
commit | 06b0c886214a223dde7b21cbfc3008fd20a8ce16 (patch) | |
tree | c1d3c51622e2a885446e8d617b953405412fc3aa /fs/ext4/extents.c | |
parent | 0f70b40613ee14b0cadafeb461034cff81b4419a (diff) |
ext4: refine extent status tree
This commit refines the extent status tree code.
1) A prefix 'es_' is added to to the extent status tree structure
members.
2) Refactored es_remove_extent() so that __es_remove_extent() can be
used by es_insert_extent() to remove the old extent entry(-ies) before
inserting a new one.
3) Rename extent_status_end() to ext4_es_end()
4) ext4_es_can_be_merged() is define to check whether two extents can
be merged or not.
5) Update and clarified comments.
Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reviewed-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/ext4/extents.c')
-rw-r--r-- | fs/ext4/extents.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index b6b54d658dc2..37f94a751ad7 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c | |||
@@ -3528,13 +3528,14 @@ static int ext4_find_delalloc_range(struct inode *inode, | |||
3528 | { | 3528 | { |
3529 | struct extent_status es; | 3529 | struct extent_status es; |
3530 | 3530 | ||
3531 | es.start = lblk_start; | 3531 | es.es_lblk = lblk_start; |
3532 | ext4_es_find_extent(inode, &es); | 3532 | (void)ext4_es_find_extent(inode, &es); |
3533 | if (es.len == 0) | 3533 | if (es.es_len == 0) |
3534 | return 0; /* there is no delay extent in this tree */ | 3534 | return 0; /* there is no delay extent in this tree */ |
3535 | else if (es.start <= lblk_start && lblk_start < es.start + es.len) | 3535 | else if (es.es_lblk <= lblk_start && |
3536 | lblk_start < es.es_lblk + es.es_len) | ||
3536 | return 1; | 3537 | return 1; |
3537 | else if (lblk_start <= es.start && es.start <= lblk_end) | 3538 | else if (lblk_start <= es.es_lblk && es.es_lblk <= lblk_end) |
3538 | return 1; | 3539 | return 1; |
3539 | else | 3540 | else |
3540 | return 0; | 3541 | return 0; |
@@ -4569,7 +4570,7 @@ static int ext4_find_delayed_extent(struct inode *inode, | |||
4569 | struct extent_status es; | 4570 | struct extent_status es; |
4570 | ext4_lblk_t next_del; | 4571 | ext4_lblk_t next_del; |
4571 | 4572 | ||
4572 | es.start = newex->ec_block; | 4573 | es.es_lblk = newex->ec_block; |
4573 | next_del = ext4_es_find_extent(inode, &es); | 4574 | next_del = ext4_es_find_extent(inode, &es); |
4574 | 4575 | ||
4575 | if (newex->ec_start == 0) { | 4576 | if (newex->ec_start == 0) { |
@@ -4577,18 +4578,18 @@ static int ext4_find_delayed_extent(struct inode *inode, | |||
4577 | * No extent in extent-tree contains block @newex->ec_start, | 4578 | * No extent in extent-tree contains block @newex->ec_start, |
4578 | * then the block may stay in 1)a hole or 2)delayed-extent. | 4579 | * then the block may stay in 1)a hole or 2)delayed-extent. |
4579 | */ | 4580 | */ |
4580 | if (es.len == 0) | 4581 | if (es.es_len == 0) |
4581 | /* A hole found. */ | 4582 | /* A hole found. */ |
4582 | return 0; | 4583 | return 0; |
4583 | 4584 | ||
4584 | if (es.start > newex->ec_block) { | 4585 | if (es.es_lblk > newex->ec_block) { |
4585 | /* A hole found. */ | 4586 | /* A hole found. */ |
4586 | newex->ec_len = min(es.start - newex->ec_block, | 4587 | newex->ec_len = min(es.es_lblk - newex->ec_block, |
4587 | newex->ec_len); | 4588 | newex->ec_len); |
4588 | return 0; | 4589 | return 0; |
4589 | } | 4590 | } |
4590 | 4591 | ||
4591 | newex->ec_len = es.start + es.len - newex->ec_block; | 4592 | newex->ec_len = es.es_lblk + es.es_len - newex->ec_block; |
4592 | } | 4593 | } |
4593 | 4594 | ||
4594 | return next_del; | 4595 | return next_del; |