diff options
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r-- | fs/btrfs/extent_io.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index c09a40db53db..51731b76900d 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
@@ -145,8 +145,16 @@ int __init extent_io_init(void) | |||
145 | offsetof(struct btrfs_io_bio, bio)); | 145 | offsetof(struct btrfs_io_bio, bio)); |
146 | if (!btrfs_bioset) | 146 | if (!btrfs_bioset) |
147 | goto free_buffer_cache; | 147 | goto free_buffer_cache; |
148 | |||
149 | if (bioset_integrity_create(btrfs_bioset, BIO_POOL_SIZE)) | ||
150 | goto free_bioset; | ||
151 | |||
148 | return 0; | 152 | return 0; |
149 | 153 | ||
154 | free_bioset: | ||
155 | bioset_free(btrfs_bioset); | ||
156 | btrfs_bioset = NULL; | ||
157 | |||
150 | free_buffer_cache: | 158 | free_buffer_cache: |
151 | kmem_cache_destroy(extent_buffer_cache); | 159 | kmem_cache_destroy(extent_buffer_cache); |
152 | extent_buffer_cache = NULL; | 160 | extent_buffer_cache = NULL; |
@@ -1482,10 +1490,8 @@ static noinline u64 find_delalloc_range(struct extent_io_tree *tree, | |||
1482 | cur_start = state->end + 1; | 1490 | cur_start = state->end + 1; |
1483 | node = rb_next(node); | 1491 | node = rb_next(node); |
1484 | total_bytes += state->end - state->start + 1; | 1492 | total_bytes += state->end - state->start + 1; |
1485 | if (total_bytes >= max_bytes) { | 1493 | if (total_bytes >= max_bytes) |
1486 | *end = *start + max_bytes - 1; | ||
1487 | break; | 1494 | break; |
1488 | } | ||
1489 | if (!node) | 1495 | if (!node) |
1490 | break; | 1496 | break; |
1491 | } | 1497 | } |
@@ -1614,7 +1620,7 @@ again: | |||
1614 | *start = delalloc_start; | 1620 | *start = delalloc_start; |
1615 | *end = delalloc_end; | 1621 | *end = delalloc_end; |
1616 | free_extent_state(cached_state); | 1622 | free_extent_state(cached_state); |
1617 | return found; | 1623 | return 0; |
1618 | } | 1624 | } |
1619 | 1625 | ||
1620 | /* | 1626 | /* |
@@ -1627,10 +1633,9 @@ again: | |||
1627 | 1633 | ||
1628 | /* | 1634 | /* |
1629 | * make sure to limit the number of pages we try to lock down | 1635 | * make sure to limit the number of pages we try to lock down |
1630 | * if we're looping. | ||
1631 | */ | 1636 | */ |
1632 | if (delalloc_end + 1 - delalloc_start > max_bytes && loops) | 1637 | if (delalloc_end + 1 - delalloc_start > max_bytes) |
1633 | delalloc_end = delalloc_start + PAGE_CACHE_SIZE - 1; | 1638 | delalloc_end = delalloc_start + max_bytes - 1; |
1634 | 1639 | ||
1635 | /* step two, lock all the pages after the page that has start */ | 1640 | /* step two, lock all the pages after the page that has start */ |
1636 | ret = lock_delalloc_pages(inode, locked_page, | 1641 | ret = lock_delalloc_pages(inode, locked_page, |
@@ -1641,8 +1646,7 @@ again: | |||
1641 | */ | 1646 | */ |
1642 | free_extent_state(cached_state); | 1647 | free_extent_state(cached_state); |
1643 | if (!loops) { | 1648 | if (!loops) { |
1644 | unsigned long offset = (*start) & (PAGE_CACHE_SIZE - 1); | 1649 | max_bytes = PAGE_CACHE_SIZE; |
1645 | max_bytes = PAGE_CACHE_SIZE - offset; | ||
1646 | loops = 1; | 1650 | loops = 1; |
1647 | goto again; | 1651 | goto again; |
1648 | } else { | 1652 | } else { |