Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 361586
b: refs/heads/master
c: bd38436
h: refs/heads/master
v: v3
  • Loading branch information
Zheng Liu authored and Theodore Ts'o committed Mar 11, 2013
1 parent a1f9e5c commit 23cd9b7
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6ca470d7b5e7639b7925b3202e796282703b6d5d
refs/heads/master: bd384364c1185ecb01f3b8242c915ccb5921c60d
20 changes: 15 additions & 5 deletions trunk/fs/ext4/extents_status.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,17 +333,27 @@ static void ext4_es_free_extent(struct inode *inode, struct extent_status *es)
static int ext4_es_can_be_merged(struct extent_status *es1,
struct extent_status *es2)
{
if (es1->es_lblk + es1->es_len != es2->es_lblk)
if (ext4_es_status(es1) != ext4_es_status(es2))
return 0;

if (ext4_es_status(es1) != ext4_es_status(es2))
if (((__u64) es1->es_len) + es2->es_len > 0xFFFFFFFFULL)
return 0;

if ((ext4_es_is_written(es1) || ext4_es_is_unwritten(es1)) &&
(ext4_es_pblock(es1) + es1->es_len != ext4_es_pblock(es2)))
if (((__u64) es1->es_lblk) + es1->es_len != es2->es_lblk)
return 0;

return 1;
if ((ext4_es_is_written(es1) || ext4_es_is_unwritten(es1)) &&
(ext4_es_pblock(es1) + es1->es_len == ext4_es_pblock(es2)))
return 1;

if (ext4_es_is_hole(es1))
return 1;

/* we need to check delayed extent is without unwritten status */
if (ext4_es_is_delayed(es1) && !ext4_es_is_unwritten(es1))
return 1;

return 0;
}

static struct extent_status *
Expand Down

0 comments on commit 23cd9b7

Please sign in to comment.