377dec09038aed018fc13d72fb0d559a67fc0bb3
[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 u64 cache_soft_max = 1024 * 1024 * 256;
34 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  * set 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         prealloc = alloc_extent_state();
214         if (!prealloc)
215                 return -ENOMEM;
216
217         /*
218          * this search will find the extents that end after
219          * our range starts
220          */
221         node = search_cache_extent(&tree->state, start);
222         if (!node)
223                 goto out;
224         state = container_of(node, struct extent_state, cache_node);
225         if (state->start > end)
226                 goto out;
227         last_end = state->end;
228
229         /*
230          *     | ---- desired range ---- |
231          *  | state | or
232          *  | ------------- state -------------- |
233          *
234          * We need to split the extent we found, and may flip
235          * bits on second half.
236          *
237          * If the extent we found extends past our range, we
238          * just split and search again.  It'll get split again
239          * the next time though.
240          *
241          * If the extent we found is inside our range, we clear
242          * the desired bit on it.
243          */
244         if (state->start < start) {
245                 err = split_state(tree, state, prealloc, start);
246                 BUG_ON(err == -EEXIST);
247                 prealloc = NULL;
248                 if (err)
249                         goto out;
250                 if (state->end <= end) {
251                         set |= clear_state_bit(tree, state, bits);
252                         if (last_end == (u64)-1)
253                                 goto out;
254                         start = last_end + 1;
255                 } else {
256                         start = state->start;
257                 }
258                 goto search_again;
259         }
260         /*
261          * | ---- desired range ---- |
262          *                        | state |
263          * We need to split the extent, and clear the bit
264          * on the first half
265          */
266         if (state->start <= end && state->end > end) {
267                 err = split_state(tree, state, prealloc, end + 1);
268                 BUG_ON(err == -EEXIST);
269
270                 set |= clear_state_bit(tree, prealloc, bits);
271                 prealloc = NULL;
272                 goto out;
273         }
274
275         start = state->end + 1;
276         set |= clear_state_bit(tree, state, bits);
277         if (last_end == (u64)-1)
278                 goto out;
279         start = last_end + 1;
280         goto search_again;
281 out:
282         if (prealloc)
283                 btrfs_free_extent_state(prealloc);
284         return set;
285
286 search_again:
287         if (start > end)
288                 goto out;
289         goto again;
290 }
291
292 /*
293  * set some bits on a range in the tree.
294  */
295 int set_extent_bits(struct extent_io_tree *tree, u64 start,
296                     u64 end, int bits, gfp_t mask)
297 {
298         struct extent_state *state;
299         struct extent_state *prealloc = NULL;
300         struct cache_extent *node;
301         int err = 0;
302         u64 last_start;
303         u64 last_end;
304 again:
305         if (!prealloc) {
306                 prealloc = alloc_extent_state();
307                 if (!prealloc)
308                         return -ENOMEM;
309         }
310
311         /*
312          * this search will find the extents that end after
313          * our range starts
314          */
315         node = search_cache_extent(&tree->state, start);
316         if (!node) {
317                 err = insert_state(tree, prealloc, start, end, bits);
318                 BUG_ON(err == -EEXIST);
319                 prealloc = NULL;
320                 goto out;
321         }
322
323         state = container_of(node, struct extent_state, cache_node);
324         last_start = state->start;
325         last_end = state->end;
326
327         /*
328          * | ---- desired range ---- |
329          * | state |
330          *
331          * Just lock what we found and keep going
332          */
333         if (state->start == start && state->end <= end) {
334                 state->state |= bits;
335                 merge_state(tree, state);
336                 if (last_end == (u64)-1)
337                         goto out;
338                 start = last_end + 1;
339                 goto search_again;
340         }
341         /*
342          *     | ---- desired range ---- |
343          * | state |
344          *   or
345          * | ------------- state -------------- |
346          *
347          * We need to split the extent we found, and may flip bits on
348          * second half.
349          *
350          * If the extent we found extends past our
351          * range, we just split and search again.  It'll get split
352          * again the next time though.
353          *
354          * If the extent we found is inside our range, we set the
355          * desired bit on it.
356          */
357         if (state->start < start) {
358                 err = split_state(tree, state, prealloc, start);
359                 BUG_ON(err == -EEXIST);
360                 prealloc = NULL;
361                 if (err)
362                         goto out;
363                 if (state->end <= end) {
364                         state->state |= bits;
365                         start = state->end + 1;
366                         merge_state(tree, state);
367                         if (last_end == (u64)-1)
368                                 goto out;
369                         start = last_end + 1;
370                 } else {
371                         start = state->start;
372                 }
373                 goto search_again;
374         }
375         /*
376          * | ---- desired range ---- |
377          *     | state | or               | state |
378          *
379          * There's a hole, we need to insert something in it and
380          * ignore the extent we found.
381          */
382         if (state->start > start) {
383                 u64 this_end;
384                 if (end < last_start)
385                         this_end = end;
386                 else
387                         this_end = last_start -1;
388                 err = insert_state(tree, prealloc, start, this_end,
389                                 bits);
390                 BUG_ON(err == -EEXIST);
391                 prealloc = NULL;
392                 if (err)
393                         goto out;
394                 start = this_end + 1;
395                 goto search_again;
396         }
397         /*
398          * | ---- desired range ---- |
399          * | ---------- state ---------- |
400          * We need to split the extent, and set the bit
401          * on the first half
402          */
403         err = split_state(tree, state, prealloc, end + 1);
404         BUG_ON(err == -EEXIST);
405
406         state->state |= bits;
407         merge_state(tree, prealloc);
408         prealloc = NULL;
409 out:
410         if (prealloc)
411                 btrfs_free_extent_state(prealloc);
412         return err;
413 search_again:
414         if (start > end)
415                 goto out;
416         goto again;
417 }
418
419 int set_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
420                      gfp_t mask)
421 {
422         return set_extent_bits(tree, start, end, EXTENT_DIRTY, mask);
423 }
424
425 int clear_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
426                        gfp_t mask)
427 {
428         return clear_extent_bits(tree, start, end, EXTENT_DIRTY, mask);
429 }
430
431 int find_first_extent_bit(struct extent_io_tree *tree, u64 start,
432                           u64 *start_ret, u64 *end_ret, int bits)
433 {
434         struct cache_extent *node;
435         struct extent_state *state;
436         int ret = 1;
437
438         /*
439          * this search will find all the extents that end after
440          * our range starts.
441          */
442         node = search_cache_extent(&tree->state, start);
443         if (!node)
444                 goto out;
445
446         while(1) {
447                 state = container_of(node, struct extent_state, cache_node);
448                 if (state->end >= start && (state->state & bits)) {
449                         *start_ret = state->start;
450                         *end_ret = state->end;
451                         ret = 0;
452                         break;
453                 }
454                 node = next_cache_extent(node);
455                 if (!node)
456                         break;
457         }
458 out:
459         return ret;
460 }
461
462 int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end,
463                    int bits, int filled)
464 {
465         struct extent_state *state = NULL;
466         struct cache_extent *node;
467         int bitset = 0;
468
469         node = search_cache_extent(&tree->state, start);
470         while (node && start <= end) {
471                 state = container_of(node, struct extent_state, cache_node);
472
473                 if (filled && state->start > start) {
474                         bitset = 0;
475                         break;
476                 }
477                 if (state->start > end)
478                         break;
479                 if (state->state & bits) {
480                         bitset = 1;
481                         if (!filled)
482                                 break;
483                 } else if (filled) {
484                         bitset = 0;
485                         break;
486                 }
487                 start = state->end + 1;
488                 if (start > end)
489                         break;
490                 node = next_cache_extent(node);
491                 if (!node) {
492                         if (filled)
493                                 bitset = 0;
494                         break;
495                 }
496         }
497         return bitset;
498 }
499
500 int set_state_private(struct extent_io_tree *tree, u64 start, u64 private)
501 {
502         struct cache_extent *node;
503         struct extent_state *state;
504         int ret = 0;
505
506         node = search_cache_extent(&tree->state, start);
507         if (!node) {
508                 ret = -ENOENT;
509                 goto out;
510         }
511         state = container_of(node, struct extent_state, cache_node);
512         if (state->start != start) {
513                 ret = -ENOENT;
514                 goto out;
515         }
516         state->xprivate = private;
517 out:
518         return ret;
519 }
520
521 int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private)
522 {
523         struct cache_extent *node;
524         struct extent_state *state;
525         int ret = 0;
526
527         node = search_cache_extent(&tree->state, start);
528         if (!node) {
529                 ret = -ENOENT;
530                 goto out;
531         }
532         state = container_of(node, struct extent_state, cache_node);
533         if (state->start != start) {
534                 ret = -ENOENT;
535                 goto out;
536         }
537         *private = state->xprivate;
538 out:
539         return ret;
540 }
541
542 static int free_some_buffers(struct extent_io_tree *tree)
543 {
544         u32 nrscan = 0;
545         struct extent_buffer *eb;
546         struct list_head *node, *next;
547
548         if (tree->cache_size < cache_soft_max)
549                 return 0;
550
551         list_for_each_safe(node, next, &tree->lru) {
552                 eb = list_entry(node, struct extent_buffer, lru);
553                 if (eb->refs == 1) {
554                         free_extent_buffer(eb);
555                         if (tree->cache_size < cache_hard_max)
556                                 break;
557                 } else {
558                         list_move_tail(&eb->lru, &tree->lru);
559                 }
560                 if (nrscan++ > 64 && tree->cache_size < cache_hard_max)
561                         break;
562         }
563         return 0;
564 }
565
566 static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
567                                                    u64 bytenr, u32 blocksize)
568 {
569         struct extent_buffer *eb;
570         int ret;
571
572         eb = malloc(sizeof(struct extent_buffer) + blocksize);
573         if (!eb) {
574                 BUG();
575                 return NULL;
576         }
577         memset(eb, 0, sizeof(struct extent_buffer) + blocksize);
578
579         eb->start = bytenr;
580         eb->len = blocksize;
581         eb->refs = 2;
582         eb->flags = 0;
583         eb->tree = tree;
584         eb->fd = -1;
585         eb->dev_bytenr = (u64)-1;
586         eb->cache_node.start = bytenr;
587         eb->cache_node.size = blocksize;
588
589         free_some_buffers(tree);
590         ret = insert_cache_extent(&tree->cache, &eb->cache_node);
591         if (ret) {
592                 free(eb);
593                 return NULL;
594         }
595         list_add_tail(&eb->lru, &tree->lru);
596         tree->cache_size += blocksize;
597         return eb;
598 }
599
600 void free_extent_buffer(struct extent_buffer *eb)
601 {
602         if (!eb)
603                 return;
604
605         eb->refs--;
606         BUG_ON(eb->refs < 0);
607         if (eb->refs == 0) {
608                 struct extent_io_tree *tree = eb->tree;
609                 BUG_ON(eb->flags & EXTENT_DIRTY);
610                 list_del_init(&eb->lru);
611                 remove_cache_extent(&tree->cache, &eb->cache_node);
612                 BUG_ON(tree->cache_size < eb->len);
613                 tree->cache_size -= eb->len;
614                 free(eb);
615         }
616 }
617
618 struct extent_buffer *find_extent_buffer(struct extent_io_tree *tree,
619                                          u64 bytenr, u32 blocksize)
620 {
621         struct extent_buffer *eb = NULL;
622         struct cache_extent *cache;
623
624         cache = lookup_cache_extent(&tree->cache, bytenr, blocksize);
625         if (cache && cache->start == bytenr &&
626             cache->size == blocksize) {
627                 eb = container_of(cache, struct extent_buffer, cache_node);
628                 list_move_tail(&eb->lru, &tree->lru);
629                 eb->refs++;
630         }
631         return eb;
632 }
633
634 struct extent_buffer *find_first_extent_buffer(struct extent_io_tree *tree,
635                                                u64 start)
636 {
637         struct extent_buffer *eb = NULL;
638         struct cache_extent *cache;
639
640         cache = search_cache_extent(&tree->cache, start);
641         if (cache) {
642                 eb = container_of(cache, struct extent_buffer, cache_node);
643                 list_move_tail(&eb->lru, &tree->lru);
644                 eb->refs++;
645         }
646         return eb;
647 }
648
649 struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree,
650                                           u64 bytenr, u32 blocksize)
651 {
652         struct extent_buffer *eb;
653         struct cache_extent *cache;
654
655         cache = lookup_cache_extent(&tree->cache, bytenr, blocksize);
656         if (cache && cache->start == bytenr &&
657             cache->size == blocksize) {
658                 eb = container_of(cache, struct extent_buffer, cache_node);
659                 list_move_tail(&eb->lru, &tree->lru);
660                 eb->refs++;
661         } else {
662                 if (cache) {
663                         eb = container_of(cache, struct extent_buffer,
664                                           cache_node);
665                         free_extent_buffer(eb);
666                 }
667                 eb = __alloc_extent_buffer(tree, bytenr, blocksize);
668         }
669         return eb;
670 }
671
672 int read_extent_from_disk(struct extent_buffer *eb,
673                           unsigned long offset, unsigned long len)
674 {
675         int ret;
676         ret = pread(eb->fd, eb->data + offset, len, eb->dev_bytenr);
677         if (ret < 0)
678                 goto out;
679         if (ret != len) {
680                 ret = -EIO;
681                 goto out;
682         }
683         ret = 0;
684 out:
685         return ret;
686 }
687
688 int write_extent_to_disk(struct extent_buffer *eb)
689 {
690         int ret;
691         ret = pwrite(eb->fd, eb->data, eb->len, eb->dev_bytenr);
692         if (ret < 0)
693                 goto out;
694         if (ret != eb->len) {
695                 ret = -EIO;
696                 goto out;
697         }
698         ret = 0;
699 out:
700         return ret;
701 }
702
703 int read_data_from_disk(struct btrfs_fs_info *info, void *buf, u64 offset,
704                         u64 bytes, int mirror)
705 {
706         struct btrfs_multi_bio *multi = NULL;
707         struct btrfs_device *device;
708         u64 bytes_left = bytes;
709         u64 read_len;
710         u64 total_read = 0;
711         int ret;
712
713         while (bytes_left) {
714                 read_len = bytes_left;
715                 ret = btrfs_map_block(&info->mapping_tree, READ, offset,
716                                       &read_len, &multi, mirror, NULL);
717                 if (ret) {
718                         fprintf(stderr, "Couldn't map the block %Lu\n",
719                                 offset);
720                         return -EIO;
721                 }
722                 device = multi->stripes[0].dev;
723
724                 read_len = min(bytes_left, read_len);
725                 if (device->fd == 0) {
726                         kfree(multi);
727                         return -EIO;
728                 }
729
730                 ret = pread(device->fd, buf + total_read, read_len,
731                             multi->stripes[0].physical);
732                 kfree(multi);
733                 if (ret < 0) {
734                         fprintf(stderr, "Error reading %Lu, %d\n", offset,
735                                 ret);
736                         return ret;
737                 }
738                 if (ret != read_len) {
739                         fprintf(stderr, "Short read for %Lu, read %d, "
740                                 "read_len %Lu\n", offset, ret, read_len);
741                         return -EIO;
742                 }
743
744                 bytes_left -= read_len;
745                 offset += read_len;
746                 total_read += read_len;
747         }
748
749         return 0;
750 }
751
752 int set_extent_buffer_uptodate(struct extent_buffer *eb)
753 {
754         eb->flags |= EXTENT_UPTODATE;
755         return 0;
756 }
757
758 int clear_extent_buffer_uptodate(struct extent_io_tree *tree,
759                                 struct extent_buffer *eb)
760 {
761         eb->flags &= ~EXTENT_UPTODATE;
762         return 0;
763 }
764
765 int extent_buffer_uptodate(struct extent_buffer *eb)
766 {
767         if (!eb)
768                 return 0;
769
770         if (eb->flags & EXTENT_UPTODATE)
771                 return 1;
772         return 0;
773 }
774
775 int set_extent_buffer_dirty(struct extent_buffer *eb)
776 {
777         struct extent_io_tree *tree = eb->tree;
778         if (!(eb->flags & EXTENT_DIRTY)) {
779                 eb->flags |= EXTENT_DIRTY;
780                 set_extent_dirty(tree, eb->start, eb->start + eb->len - 1, 0);
781                 extent_buffer_get(eb);
782         }
783         return 0;
784 }
785
786 int clear_extent_buffer_dirty(struct extent_buffer *eb)
787 {
788         struct extent_io_tree *tree = eb->tree;
789         if (eb->flags & EXTENT_DIRTY) {
790                 eb->flags &= ~EXTENT_DIRTY;
791                 clear_extent_dirty(tree, eb->start, eb->start + eb->len - 1, 0);
792                 free_extent_buffer(eb);
793         }
794         return 0;
795 }
796
797 int memcmp_extent_buffer(struct extent_buffer *eb, const void *ptrv,
798                          unsigned long start, unsigned long len)
799 {
800         return memcmp(eb->data + start, ptrv, len);
801 }
802
803 void read_extent_buffer(struct extent_buffer *eb, void *dst,
804                         unsigned long start, unsigned long len)
805 {
806         memcpy(dst, eb->data + start, len);
807 }
808
809 void write_extent_buffer(struct extent_buffer *eb, const void *src,
810                          unsigned long start, unsigned long len)
811 {
812         memcpy(eb->data + start, src, len);
813 }
814
815 void copy_extent_buffer(struct extent_buffer *dst, struct extent_buffer *src,
816                         unsigned long dst_offset, unsigned long src_offset,
817                         unsigned long len)
818 {
819         memcpy(dst->data + dst_offset, src->data + src_offset, len);
820 }
821
822 void memcpy_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
823                           unsigned long src_offset, unsigned long len)
824 {
825         memcpy(dst->data + dst_offset, dst->data + src_offset, len);
826 }
827
828 void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
829                            unsigned long src_offset, unsigned long len)
830 {
831         memmove(dst->data + dst_offset, dst->data + src_offset, len);
832 }
833
834 void memset_extent_buffer(struct extent_buffer *eb, char c,
835                           unsigned long start, unsigned long len)
836 {
837         memset(eb->data + start, c, len);
838 }