btrfs-progs: clear_extent_bits: Fix memory leak.
[platform/upstream/btrfs-progs.git] / extent_io.c
1
2 /*
3  * Copyright (C) 2007 Oracle.  All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public
7  * License v2 as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public
15  * License along with this program; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 021110-1307, USA.
18  */
19 #define _XOPEN_SOURCE 600
20 #define __USE_XOPEN2K
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <sys/types.h>
24 #include <sys/stat.h>
25 #include <fcntl.h>
26 #include <unistd.h>
27 #include "kerncompat.h"
28 #include "extent_io.h"
29 #include "list.h"
30 #include "ctree.h"
31 #include "volumes.h"
32
33 static u64 cache_soft_max = 1024 * 1024 * 256;
34 static u64 cache_hard_max = 1 * 1024 * 1024 * 1024;
35
36 void extent_io_tree_init(struct extent_io_tree *tree)
37 {
38         cache_tree_init(&tree->state);
39         cache_tree_init(&tree->cache);
40         INIT_LIST_HEAD(&tree->lru);
41         tree->cache_size = 0;
42 }
43
44 static struct extent_state *alloc_extent_state(void)
45 {
46         struct extent_state *state;
47
48         state = malloc(sizeof(*state));
49         if (!state)
50                 return NULL;
51         state->cache_node.objectid = 0;
52         state->refs = 1;
53         state->state = 0;
54         state->xprivate = 0;
55         return state;
56 }
57
58 static void btrfs_free_extent_state(struct extent_state *state)
59 {
60         state->refs--;
61         BUG_ON(state->refs < 0);
62         if (state->refs == 0)
63                 free(state);
64 }
65
66 static void free_extent_state_func(struct cache_extent *cache)
67 {
68         struct extent_state *es;
69
70         es = container_of(cache, struct extent_state, cache_node);
71         btrfs_free_extent_state(es);
72 }
73
74 void extent_io_tree_cleanup(struct extent_io_tree *tree)
75 {
76         struct extent_buffer *eb;
77
78         while(!list_empty(&tree->lru)) {
79                 eb = list_entry(tree->lru.next, struct extent_buffer, lru);
80                 if (eb->refs != 1) {
81                         fprintf(stderr, "extent buffer leak: "
82                                 "start %llu len %u\n",
83                                 (unsigned long long)eb->start, eb->len);
84                         eb->refs = 1;
85                 }
86                 free_extent_buffer(eb);
87         }
88
89         cache_tree_free_extents(&tree->state, free_extent_state_func);
90 }
91
92 static inline void update_extent_state(struct extent_state *state)
93 {
94         state->cache_node.start = state->start;
95         state->cache_node.size = state->end + 1 - state->start;
96 }
97
98 /*
99  * Utility function to look for merge candidates inside a given range.
100  * Any extents with matching state are merged together into a single
101  * extent in the tree. Extents with EXTENT_IO in their state field are
102  * not merged
103  */
104 static int merge_state(struct extent_io_tree *tree,
105                        struct extent_state *state)
106 {
107         struct extent_state *other;
108         struct cache_extent *other_node;
109
110         if (state->state & EXTENT_IOBITS)
111                 return 0;
112
113         other_node = prev_cache_extent(&state->cache_node);
114         if (other_node) {
115                 other = container_of(other_node, struct extent_state,
116                                      cache_node);
117                 if (other->end == state->start - 1 &&
118                     other->state == state->state) {
119                         state->start = other->start;
120                         update_extent_state(state);
121                         remove_cache_extent(&tree->state, &other->cache_node);
122                         btrfs_free_extent_state(other);
123                 }
124         }
125         other_node = next_cache_extent(&state->cache_node);
126         if (other_node) {
127                 other = container_of(other_node, struct extent_state,
128                                      cache_node);
129                 if (other->start == state->end + 1 &&
130                     other->state == state->state) {
131                         other->start = state->start;
132                         update_extent_state(other);
133                         remove_cache_extent(&tree->state, &state->cache_node);
134                         btrfs_free_extent_state(state);
135                 }
136         }
137         return 0;
138 }
139
140 /*
141  * insert an extent_state struct into the tree.  'bits' are set on the
142  * struct before it is inserted.
143  */
144 static int insert_state(struct extent_io_tree *tree,
145                         struct extent_state *state, u64 start, u64 end,
146                         int bits)
147 {
148         int ret;
149
150         BUG_ON(end < start);
151         state->state |= bits;
152         state->start = start;
153         state->end = end;
154         update_extent_state(state);
155         ret = insert_cache_extent(&tree->state, &state->cache_node);
156         BUG_ON(ret);
157         merge_state(tree, state);
158         return 0;
159 }
160
161 /*
162  * split a given extent state struct in two, inserting the preallocated
163  * struct 'prealloc' as the newly created second half.  'split' indicates an
164  * offset inside 'orig' where it should be split.
165  */
166 static int split_state(struct extent_io_tree *tree, struct extent_state *orig,
167                        struct extent_state *prealloc, u64 split)
168 {
169         int ret;
170         prealloc->start = orig->start;
171         prealloc->end = split - 1;
172         prealloc->state = orig->state;
173         update_extent_state(prealloc);
174         orig->start = split;
175         update_extent_state(orig);
176         ret = insert_cache_extent(&tree->state, &prealloc->cache_node);
177         BUG_ON(ret);
178         return 0;
179 }
180
181 /*
182  * clear some bits on a range in the tree.
183  */
184 static int clear_state_bit(struct extent_io_tree *tree,
185                             struct extent_state *state, int bits)
186 {
187         int ret = state->state & bits;
188
189         state->state &= ~bits;
190         if (state->state == 0) {
191                 remove_cache_extent(&tree->state, &state->cache_node);
192                 btrfs_free_extent_state(state);
193         } else {
194                 merge_state(tree, state);
195         }
196         return ret;
197 }
198
199 /*
200  * clear some bits on a range in the tree.
201  */
202 int clear_extent_bits(struct extent_io_tree *tree, u64 start,
203                       u64 end, int bits, gfp_t mask)
204 {
205         struct extent_state *state;
206         struct extent_state *prealloc = NULL;
207         struct cache_extent *node;
208         u64 last_end;
209         int err;
210         int set = 0;
211
212 again:
213         if (!prealloc) {
214                 prealloc = alloc_extent_state();
215                 if (!prealloc)
216                         return -ENOMEM;
217         }
218
219         /*
220          * this search will find the extents that end after
221          * our range starts
222          */
223         node = search_cache_extent(&tree->state, start);
224         if (!node)
225                 goto out;
226         state = container_of(node, struct extent_state, cache_node);
227         if (state->start > end)
228                 goto out;
229         last_end = state->end;
230
231         /*
232          *     | ---- desired range ---- |
233          *  | state | or
234          *  | ------------- state -------------- |
235          *
236          * We need to split the extent we found, and may flip
237          * bits on second half.
238          *
239          * If the extent we found extends past our range, we
240          * just split and search again.  It'll get split again
241          * the next time though.
242          *
243          * If the extent we found is inside our range, we clear
244          * the desired bit on it.
245          */
246         if (state->start < start) {
247                 err = split_state(tree, state, prealloc, start);
248                 BUG_ON(err == -EEXIST);
249                 prealloc = NULL;
250                 if (err)
251                         goto out;
252                 if (state->end <= end) {
253                         set |= clear_state_bit(tree, state, bits);
254                         if (last_end == (u64)-1)
255                                 goto out;
256                         start = last_end + 1;
257                 } else {
258                         start = state->start;
259                 }
260                 goto search_again;
261         }
262         /*
263          * | ---- desired range ---- |
264          *                        | state |
265          * We need to split the extent, and clear the bit
266          * on the first half
267          */
268         if (state->start <= end && state->end > end) {
269                 err = split_state(tree, state, prealloc, end + 1);
270                 BUG_ON(err == -EEXIST);
271
272                 set |= clear_state_bit(tree, prealloc, bits);
273                 prealloc = NULL;
274                 goto out;
275         }
276
277         start = state->end + 1;
278         set |= clear_state_bit(tree, state, bits);
279         if (last_end == (u64)-1)
280                 goto out;
281         start = last_end + 1;
282         goto search_again;
283 out:
284         if (prealloc)
285                 btrfs_free_extent_state(prealloc);
286         return set;
287
288 search_again:
289         if (start > end)
290                 goto out;
291         goto again;
292 }
293
294 /*
295  * set some bits on a range in the tree.
296  */
297 int set_extent_bits(struct extent_io_tree *tree, u64 start,
298                     u64 end, int bits, gfp_t mask)
299 {
300         struct extent_state *state;
301         struct extent_state *prealloc = NULL;
302         struct cache_extent *node;
303         int err = 0;
304         u64 last_start;
305         u64 last_end;
306 again:
307         if (!prealloc) {
308                 prealloc = alloc_extent_state();
309                 if (!prealloc)
310                         return -ENOMEM;
311         }
312
313         /*
314          * this search will find the extents that end after
315          * our range starts
316          */
317         node = search_cache_extent(&tree->state, start);
318         if (!node) {
319                 err = insert_state(tree, prealloc, start, end, bits);
320                 BUG_ON(err == -EEXIST);
321                 prealloc = NULL;
322                 goto out;
323         }
324
325         state = container_of(node, struct extent_state, cache_node);
326         last_start = state->start;
327         last_end = state->end;
328
329         /*
330          * | ---- desired range ---- |
331          * | state |
332          *
333          * Just lock what we found and keep going
334          */
335         if (state->start == start && state->end <= end) {
336                 state->state |= bits;
337                 merge_state(tree, state);
338                 if (last_end == (u64)-1)
339                         goto out;
340                 start = last_end + 1;
341                 goto search_again;
342         }
343         /*
344          *     | ---- desired range ---- |
345          * | state |
346          *   or
347          * | ------------- state -------------- |
348          *
349          * We need to split the extent we found, and may flip bits on
350          * second half.
351          *
352          * If the extent we found extends past our
353          * range, we just split and search again.  It'll get split
354          * again the next time though.
355          *
356          * If the extent we found is inside our range, we set the
357          * desired bit on it.
358          */
359         if (state->start < start) {
360                 err = split_state(tree, state, prealloc, start);
361                 BUG_ON(err == -EEXIST);
362                 prealloc = NULL;
363                 if (err)
364                         goto out;
365                 if (state->end <= end) {
366                         state->state |= bits;
367                         start = state->end + 1;
368                         merge_state(tree, state);
369                         if (last_end == (u64)-1)
370                                 goto out;
371                         start = last_end + 1;
372                 } else {
373                         start = state->start;
374                 }
375                 goto search_again;
376         }
377         /*
378          * | ---- desired range ---- |
379          *     | state | or               | state |
380          *
381          * There's a hole, we need to insert something in it and
382          * ignore the extent we found.
383          */
384         if (state->start > start) {
385                 u64 this_end;
386                 if (end < last_start)
387                         this_end = end;
388                 else
389                         this_end = last_start -1;
390                 err = insert_state(tree, prealloc, start, this_end,
391                                 bits);
392                 BUG_ON(err == -EEXIST);
393                 prealloc = NULL;
394                 if (err)
395                         goto out;
396                 start = this_end + 1;
397                 goto search_again;
398         }
399         /*
400          * | ---- desired range ---- |
401          * | ---------- state ---------- |
402          * We need to split the extent, and set the bit
403          * on the first half
404          */
405         err = split_state(tree, state, prealloc, end + 1);
406         BUG_ON(err == -EEXIST);
407
408         state->state |= bits;
409         merge_state(tree, prealloc);
410         prealloc = NULL;
411 out:
412         if (prealloc)
413                 btrfs_free_extent_state(prealloc);
414         return err;
415 search_again:
416         if (start > end)
417                 goto out;
418         goto again;
419 }
420
421 int set_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
422                      gfp_t mask)
423 {
424         return set_extent_bits(tree, start, end, EXTENT_DIRTY, mask);
425 }
426
427 int clear_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
428                        gfp_t mask)
429 {
430         return clear_extent_bits(tree, start, end, EXTENT_DIRTY, mask);
431 }
432
433 int find_first_extent_bit(struct extent_io_tree *tree, u64 start,
434                           u64 *start_ret, u64 *end_ret, int bits)
435 {
436         struct cache_extent *node;
437         struct extent_state *state;
438         int ret = 1;
439
440         /*
441          * this search will find all the extents that end after
442          * our range starts.
443          */
444         node = search_cache_extent(&tree->state, start);
445         if (!node)
446                 goto out;
447
448         while(1) {
449                 state = container_of(node, struct extent_state, cache_node);
450                 if (state->end >= start && (state->state & bits)) {
451                         *start_ret = state->start;
452                         *end_ret = state->end;
453                         ret = 0;
454                         break;
455                 }
456                 node = next_cache_extent(node);
457                 if (!node)
458                         break;
459         }
460 out:
461         return ret;
462 }
463
464 int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end,
465                    int bits, int filled)
466 {
467         struct extent_state *state = NULL;
468         struct cache_extent *node;
469         int bitset = 0;
470
471         node = search_cache_extent(&tree->state, start);
472         while (node && start <= end) {
473                 state = container_of(node, struct extent_state, cache_node);
474
475                 if (filled && state->start > start) {
476                         bitset = 0;
477                         break;
478                 }
479                 if (state->start > end)
480                         break;
481                 if (state->state & bits) {
482                         bitset = 1;
483                         if (!filled)
484                                 break;
485                 } else if (filled) {
486                         bitset = 0;
487                         break;
488                 }
489                 start = state->end + 1;
490                 if (start > end)
491                         break;
492                 node = next_cache_extent(node);
493                 if (!node) {
494                         if (filled)
495                                 bitset = 0;
496                         break;
497                 }
498         }
499         return bitset;
500 }
501
502 int set_state_private(struct extent_io_tree *tree, u64 start, u64 private)
503 {
504         struct cache_extent *node;
505         struct extent_state *state;
506         int ret = 0;
507
508         node = search_cache_extent(&tree->state, start);
509         if (!node) {
510                 ret = -ENOENT;
511                 goto out;
512         }
513         state = container_of(node, struct extent_state, cache_node);
514         if (state->start != start) {
515                 ret = -ENOENT;
516                 goto out;
517         }
518         state->xprivate = private;
519 out:
520         return ret;
521 }
522
523 int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private)
524 {
525         struct cache_extent *node;
526         struct extent_state *state;
527         int ret = 0;
528
529         node = search_cache_extent(&tree->state, start);
530         if (!node) {
531                 ret = -ENOENT;
532                 goto out;
533         }
534         state = container_of(node, struct extent_state, cache_node);
535         if (state->start != start) {
536                 ret = -ENOENT;
537                 goto out;
538         }
539         *private = state->xprivate;
540 out:
541         return ret;
542 }
543
544 static int free_some_buffers(struct extent_io_tree *tree)
545 {
546         u32 nrscan = 0;
547         struct extent_buffer *eb;
548         struct list_head *node, *next;
549
550         if (tree->cache_size < cache_soft_max)
551                 return 0;
552
553         list_for_each_safe(node, next, &tree->lru) {
554                 eb = list_entry(node, struct extent_buffer, lru);
555                 if (eb->refs == 1) {
556                         free_extent_buffer(eb);
557                         if (tree->cache_size < cache_hard_max)
558                                 break;
559                 } else {
560                         list_move_tail(&eb->lru, &tree->lru);
561                 }
562                 if (nrscan++ > 64 && tree->cache_size < cache_hard_max)
563                         break;
564         }
565         return 0;
566 }
567
568 static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
569                                                    u64 bytenr, u32 blocksize)
570 {
571         struct extent_buffer *eb;
572         int ret;
573
574         eb = malloc(sizeof(struct extent_buffer) + blocksize);
575         if (!eb) {
576                 BUG();
577                 return NULL;
578         }
579         memset(eb, 0, sizeof(struct extent_buffer) + blocksize);
580
581         eb->start = bytenr;
582         eb->len = blocksize;
583         eb->refs = 2;
584         eb->flags = 0;
585         eb->tree = tree;
586         eb->fd = -1;
587         eb->dev_bytenr = (u64)-1;
588         eb->cache_node.start = bytenr;
589         eb->cache_node.size = blocksize;
590
591         free_some_buffers(tree);
592         ret = insert_cache_extent(&tree->cache, &eb->cache_node);
593         if (ret) {
594                 free(eb);
595                 return NULL;
596         }
597         list_add_tail(&eb->lru, &tree->lru);
598         tree->cache_size += blocksize;
599         return eb;
600 }
601
602 void free_extent_buffer(struct extent_buffer *eb)
603 {
604         if (!eb)
605                 return;
606
607         eb->refs--;
608         BUG_ON(eb->refs < 0);
609         if (eb->refs == 0) {
610                 struct extent_io_tree *tree = eb->tree;
611                 BUG_ON(eb->flags & EXTENT_DIRTY);
612                 list_del_init(&eb->lru);
613                 remove_cache_extent(&tree->cache, &eb->cache_node);
614                 BUG_ON(tree->cache_size < eb->len);
615                 tree->cache_size -= eb->len;
616                 free(eb);
617         }
618 }
619
620 struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree,
621                                          u64 bytenr, u32 blocksize)
622 {
623         struct extent_buffer *eb = NULL;
624         struct cache_extent *cache;
625
626         cache = lookup_cache_extent(&tree->cache, bytenr, blocksize);
627         if (cache && cache->start == bytenr &&
628             cache->size == blocksize) {
629                 eb = container_of(cache, struct extent_buffer, cache_node);
630                 list_move_tail(&eb->lru, &tree->lru);
631                 eb->refs++;
632         }
633         return eb;
634 }
635
636 struct extent_buffer *find_first_extent_buffer(struct extent_io_tree *tree,
637                                                u64 start)
638 {
639         struct extent_buffer *eb = NULL;
640         struct cache_extent *cache;
641
642         cache = search_cache_extent(&tree->cache, start);
643         if (cache) {
644                 eb = container_of(cache, struct extent_buffer, cache_node);
645                 list_move_tail(&eb->lru, &tree->lru);
646                 eb->refs++;
647         }
648         return eb;
649 }
650
651 struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree,
652                                           u64 bytenr, u32 blocksize)
653 {
654         struct extent_buffer *eb;
655         struct cache_extent *cache;
656
657         cache = lookup_cache_extent(&tree->cache, bytenr, blocksize);
658         if (cache && cache->start == bytenr &&
659             cache->size == blocksize) {
660                 eb = container_of(cache, struct extent_buffer, cache_node);
661                 list_move_tail(&eb->lru, &tree->lru);
662                 eb->refs++;
663         } else {
664                 if (cache) {
665                         eb = container_of(cache, struct extent_buffer,
666                                           cache_node);
667                         free_extent_buffer(eb);
668                 }
669                 eb = __alloc_extent_buffer(tree, bytenr, blocksize);
670         }
671         return eb;
672 }
673
674 int read_extent_from_disk(struct extent_buffer *eb,
675                           unsigned long offset, unsigned long len)
676 {
677         int ret;
678         ret = pread(eb->fd, eb->data + offset, len, eb->dev_bytenr);
679         if (ret < 0)
680                 goto out;
681         if (ret != len) {
682                 ret = -EIO;
683                 goto out;
684         }
685         ret = 0;
686 out:
687         return ret;
688 }
689
690 int write_extent_to_disk(struct extent_buffer *eb)
691 {
692         int ret;
693         ret = pwrite(eb->fd, eb->data, eb->len, eb->dev_bytenr);
694         if (ret < 0)
695                 goto out;
696         if (ret != eb->len) {
697                 ret = -EIO;
698                 goto out;
699         }
700         ret = 0;
701 out:
702         return ret;
703 }
704
705 int read_data_from_disk(struct btrfs_fs_info *info, void *buf, u64 offset,
706                         u64 bytes, int mirror)
707 {
708         struct btrfs_multi_bio *multi = NULL;
709         struct btrfs_device *device;
710         u64 bytes_left = bytes;
711         u64 read_len;
712         u64 total_read = 0;
713         int ret;
714
715         while (bytes_left) {
716                 read_len = bytes_left;
717                 ret = btrfs_map_block(&info->mapping_tree, READ, offset,
718                                       &read_len, &multi, mirror, NULL);
719                 if (ret) {
720                         fprintf(stderr, "Couldn't map the block %Lu\n",
721                                 offset);
722                         return -EIO;
723                 }
724                 device = multi->stripes[0].dev;
725
726                 read_len = min(bytes_left, read_len);
727                 if (device->fd == 0) {
728                         kfree(multi);
729                         return -EIO;
730                 }
731
732                 ret = pread(device->fd, buf + total_read, read_len,
733                             multi->stripes[0].physical);
734                 kfree(multi);
735                 if (ret < 0) {
736                         fprintf(stderr, "Error reading %Lu, %d\n", offset,
737                                 ret);
738                         return ret;
739                 }
740                 if (ret != read_len) {
741                         fprintf(stderr, "Short read for %Lu, read %d, "
742                                 "read_len %Lu\n", offset, ret, read_len);
743                         return -EIO;
744                 }
745
746                 bytes_left -= read_len;
747                 offset += read_len;
748                 total_read += read_len;
749         }
750
751         return 0;
752 }
753
754 int write_data_to_disk(struct btrfs_fs_info *info, void *buf, u64 offset,
755                       u64 bytes, int mirror)
756 {
757         struct btrfs_multi_bio *multi = NULL;
758         struct btrfs_device *device;
759         u64 bytes_left = bytes;
760         u64 this_len;
761         u64 total_write = 0;
762         u64 *raid_map = NULL;
763         u64 dev_bytenr;
764         int dev_nr;
765         int ret = 0;
766
767         while (bytes_left > 0) {
768                 this_len = bytes_left;
769                 dev_nr = 0;
770
771                 ret = btrfs_map_block(&info->mapping_tree, WRITE, offset,
772                                       &this_len, &multi, mirror, &raid_map);
773                 if (ret) {
774                         fprintf(stderr, "Couldn't map the block %Lu\n",
775                                 offset);
776                         return -EIO;
777                 }
778
779                 if (raid_map) {
780                         struct extent_buffer *eb;
781                         u64 stripe_len = this_len;
782
783                         this_len = min(this_len, bytes_left);
784                         this_len = min(this_len, (u64)info->tree_root->leafsize);
785
786                         eb = malloc(sizeof(struct extent_buffer) + this_len);
787                         BUG_ON(!eb);
788
789                         memset(eb, 0, sizeof(struct extent_buffer) + this_len);
790                         eb->start = offset;
791                         eb->len = this_len;
792
793                         memcpy(eb->data, buf + total_write, this_len);
794                         ret = write_raid56_with_parity(info, eb, multi,
795                                                        stripe_len, raid_map);
796                         BUG_ON(ret);
797
798                         free(eb);
799                         kfree(raid_map);
800                         raid_map = NULL;
801                 } else while (dev_nr < multi->num_stripes) {
802                         device = multi->stripes[dev_nr].dev;
803                         if (device->fd == 0) {
804                                 kfree(multi);
805                                 return -EIO;
806                         }
807
808                         dev_bytenr = multi->stripes[dev_nr].physical;
809                         this_len = min(this_len, bytes_left);
810                         dev_nr++;
811
812                         ret = pwrite(device->fd, buf + total_write, this_len, dev_bytenr);
813                         if (ret != this_len) {
814                                 if (ret < 0) {
815                                         fprintf(stderr, "Error writing to "
816                                                 "device %d\n", errno);
817                                         ret = errno;
818                                         kfree(multi);
819                                         return ret;
820                                 } else {
821                                         fprintf(stderr, "Short write\n");
822                                         kfree(multi);
823                                         return -EIO;
824                                 }
825                         }
826                 }
827
828                 BUG_ON(bytes_left < this_len);
829
830                 bytes_left -= this_len;
831                 offset += this_len;
832                 total_write += this_len;
833
834                 kfree(multi);
835                 multi = NULL;
836         }
837         return 0;
838 }
839
840
841 int set_extent_buffer_uptodate(struct extent_buffer *eb)
842 {
843         eb->flags |= EXTENT_UPTODATE;
844         return 0;
845 }
846
847 int clear_extent_buffer_uptodate(struct extent_io_tree *tree,
848                                 struct extent_buffer *eb)
849 {
850         eb->flags &= ~EXTENT_UPTODATE;
851         return 0;
852 }
853
854 int extent_buffer_uptodate(struct extent_buffer *eb)
855 {
856         if (!eb)
857                 return 0;
858
859         if (eb->flags & EXTENT_UPTODATE)
860                 return 1;
861         return 0;
862 }
863
864 int set_extent_buffer_dirty(struct extent_buffer *eb)
865 {
866         struct extent_io_tree *tree = eb->tree;
867         if (!(eb->flags & EXTENT_DIRTY)) {
868                 eb->flags |= EXTENT_DIRTY;
869                 set_extent_dirty(tree, eb->start, eb->start + eb->len - 1, 0);
870                 extent_buffer_get(eb);
871         }
872         return 0;
873 }
874
875 int clear_extent_buffer_dirty(struct extent_buffer *eb)
876 {
877         struct extent_io_tree *tree = eb->tree;
878         if (eb->flags & EXTENT_DIRTY) {
879                 eb->flags &= ~EXTENT_DIRTY;
880                 clear_extent_dirty(tree, eb->start, eb->start + eb->len - 1, 0);
881                 free_extent_buffer(eb);
882         }
883         return 0;
884 }
885
886 int memcmp_extent_buffer(struct extent_buffer *eb, const void *ptrv,
887                          unsigned long start, unsigned long len)
888 {
889         return memcmp(eb->data + start, ptrv, len);
890 }
891
892 void read_extent_buffer(struct extent_buffer *eb, void *dst,
893                         unsigned long start, unsigned long len)
894 {
895         memcpy(dst, eb->data + start, len);
896 }
897
898 void write_extent_buffer(struct extent_buffer *eb, const void *src,
899                          unsigned long start, unsigned long len)
900 {
901         memcpy(eb->data + start, src, len);
902 }
903
904 void copy_extent_buffer(struct extent_buffer *dst, struct extent_buffer *src,
905                         unsigned long dst_offset, unsigned long src_offset,
906                         unsigned long len)
907 {
908         memcpy(dst->data + dst_offset, src->data + src_offset, len);
909 }
910
911 void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
912                            unsigned long src_offset, unsigned long len)
913 {
914         memmove(dst->data + dst_offset, dst->data + src_offset, len);
915 }
916
917 void memset_extent_buffer(struct extent_buffer *eb, char c,
918                           unsigned long start, unsigned long len)
919 {
920         memset(eb->data + start, c, len);
921 }