summaryrefslogtreecommitdiff
path: root/extent_io.c
diff options
context:
space:
mode:
authorZach Brown <zab@redhat.com>2013-01-23 12:18:32 -0800
committerZach Brown <zab@redhat.com>2013-02-05 16:09:40 -0800
commit09fac3824db462368f24d3dd4deccafedf5b3c8c (patch)
treeea5b2c3fa9c97b70d36911385d011eb4bb516107 /extent_io.c
parentde763395fb05bcd5c1ae32f9cd88d55cb396231c (diff)
btrfs-progs: don't leak in set_extent_bits
It looks possible to hit the search_again label without using the prealloc. A new prealloc is allocated, leaking the current one. Every use of prealloc sets it to null so let's just allocate a new prealloc when we don't already have one. Signed-off-by: Zach Brown <zab@redhat.com>
Diffstat (limited to 'extent_io.c')
-rw-r--r--extent_io.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/extent_io.c b/extent_io.c
index ebb35b28..d59f2070 100644
--- a/extent_io.c
+++ b/extent_io.c
@@ -300,9 +300,11 @@ int set_extent_bits(struct extent_io_tree *tree, u64 start,
u64 last_start;
u64 last_end;
again:
- prealloc = alloc_extent_state();
- if (!prealloc)
- return -ENOMEM;
+ if (!prealloc) {
+ prealloc = alloc_extent_state();
+ if (!prealloc)
+ return -ENOMEM;
+ }
/*
* this search will find the extents that end after