Btrfs: fix unnecessary while loop when search the free space cache
PATCH 1/1 Btrfs: fix unnecessary while loop when search the free space cache
When we find a bitmap free space entry, we may check the previous extent entry covers the offset or not. But if we find this entry is also a bitmap entry, we will continue to check the previous entry of the current one by a while loop. It is unnecessary because it is impossible that the extent entry which is in front of a bitmap entry can cover the offset of the entry after that bitmap entry.
--- fs/btrfs/free-space-cache.c | 15 +++++---------- 1 files changed, 5 insertions(+), 10 deletions(-)
fs/btrfs/free-space-cache.c +5 -10
@@ -1250,18 +1250,13 @@ tree_search_offset(struct btrfs_free_space_ctl *ctl,* if previous extent entry covers the offset, * we should return it instead of the bitmap entry */ - n = &entry->offset_index; -while (1 ) { - n =rb_prev (n); -if (!n) -break ; + n =rb_prev (&entry->offset_index); +if (n) { prev = rb_entry(n, struct btrfs_free_space, offset_index); -if (!prev->bitmap) { -if (prev->offset + prev->bytes > offset) - entry = prev; -break ; - } +if (!prev->bitmap && + prev->offset + prev->bytes > offset) + entry = prev; } }return entry;
Signature · 1 line
1.7.6.5
PATCH v2 1/1 Btrfs: fix unnecessary while loop when search the free space, cache
When we find a bitmap free space entry, we may check the previous extent entry covers the offset or not. But if we find this entry is also a bitmap entry, we will continue to check the previous entry of the current one by a while loop. It is unnecessary because it is impossible that the extent entry which is in front of a bitmap entry can cover the offset of the entry after that bitmap entry.
---
Changelog v1 -> v2:
- fix the same problem in the other place
--- fs/btrfs/free-space-cache.c | 30 ++++++++++-------------------- 1 files changed, 10 insertions(+), 20 deletions(-)
fs/btrfs/free-space-cache.c +10 -20
@@ -1250,18 +1250,13 @@ tree_search_offset(struct btrfs_free_space_ctl *ctl,* if previous extent entry covers the offset, * we should return it instead of the bitmap entry */ - n = &entry->offset_index; -while (1 ) { - n =rb_prev (n); -if (!n) -break ; + n =rb_prev (&entry->offset_index); +if (n) { prev = rb_entry(n, struct btrfs_free_space, offset_index); -if (!prev->bitmap) { -if (prev->offset + prev->bytes > offset) - entry = prev; -break ; - } +if (!prev->bitmap && + prev->offset + prev->bytes > offset) + entry = prev; } }return entry;
@@ -1287,18 +1282,13 @@ tree_search_offset(struct btrfs_free_space_ctl *ctl, }if (entry->bitmap) { - n = &entry->offset_index; -while (1 ) { - n =rb_prev (n); -if (!n) -break ; + n =rb_prev (&entry->offset_index); +if (n) { prev = rb_entry(n, struct btrfs_free_space, offset_index); -if (!prev->bitmap) { -if (prev->offset + prev->bytes > offset) -return prev; -break ; - } +if (!prev->bitmap && + prev->offset + prev->bytes > offset) +return prev; }if (entry->offset +BITS_PER_BITMAP * ctl->unit > offset)return entry;
Signature · 1 line
1.7.6.5
Re: [PATCH V2] Btrfs: fix unnecessary while loop when search the free space, cache
Quoted 7 lines · Miao Xie
When we find a bitmap free space entry, we may check the previous extent entry covers the offset or not. But if we find this entry is also a bitmap entry, we will continue to check the previous entry of the current one by a while loop. It is unnecessary because it is impossible that the extent entry which is in front of a bitmap entry can cover the offset of the entry after that bitmap entry.
Looks good to me.
Quoted 61 lines
Signed-off-by Miao Xie <[email protected]>---
Changelog v1 -> v2:
- fix the same problem in the other place--- fs/btrfs/free-space-cache.c | 30 ++++++++++-------------------- 1 files changed, 10 insertions(+), 20 deletions(-)fs/btrfs/free-space-cache.c +10
-20@@ -1250,18 +1250,13 @@ tree_search_offset(struct btrfs_free_space_ctl *ctl,* if previous extent entry covers the offset, * we should return it instead of the bitmap entry */ - n = &entry->offset_index; -while (1 ) { - n =rb_prev (n); -if (!n) -break ; + n =rb_prev (&entry->offset_index); +if (n) { prev = rb_entry(n, struct btrfs_free_space, offset_index); -if (!prev->bitmap) { -if (prev->offset + prev->bytes > offset) - entry = prev; -break ; - } +if (!prev->bitmap && + prev->offset + prev->bytes > offset) + entry = prev; } }return entry;@@ -1287,18 +1282,13 @@ tree_search_offset(struct btrfs_free_space_ctl *ctl, }if (entry->bitmap) { - n = &entry->offset_index; -while (1 ) { - n =rb_prev (n); -if (!n) -break ; + n =rb_prev (&entry->offset_index); +if (n) { prev = rb_entry(n, struct btrfs_free_space, offset_index); -if (!prev->bitmap) { -if (prev->offset + prev->bytes > offset) -return prev; -break ; - } +if (!prev->bitmap && + prev->offset + prev->bytes > offset) +return prev; }if (entry->offset +BITS_PER_BITMAP * ctl->unit > offset)return entry;