aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/free-space-cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/free-space-cache.c')
-rw-r--r--fs/btrfs/free-space-cache.c193
1 files changed, 76 insertions, 117 deletions
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
index bf0d61567f3..41ac927401d 100644
--- a/fs/btrfs/free-space-cache.c
+++ b/fs/btrfs/free-space-cache.c
@@ -98,6 +98,12 @@ struct inode *lookup_free_space_inode(struct btrfs_root *root,
98 return inode; 98 return inode;
99 99
100 spin_lock(&block_group->lock); 100 spin_lock(&block_group->lock);
101 if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM) {
102 printk(KERN_INFO "Old style space inode found, converting.\n");
103 BTRFS_I(inode)->flags &= ~BTRFS_INODE_NODATASUM;
104 block_group->disk_cache_state = BTRFS_DC_CLEAR;
105 }
106
101 if (!btrfs_fs_closing(root->fs_info)) { 107 if (!btrfs_fs_closing(root->fs_info)) {
102 block_group->inode = igrab(inode); 108 block_group->inode = igrab(inode);
103 block_group->iref = 1; 109 block_group->iref = 1;
@@ -135,7 +141,7 @@ int __create_free_space_inode(struct btrfs_root *root,
135 btrfs_set_inode_gid(leaf, inode_item, 0); 141 btrfs_set_inode_gid(leaf, inode_item, 0);
136 btrfs_set_inode_mode(leaf, inode_item, S_IFREG | 0600); 142 btrfs_set_inode_mode(leaf, inode_item, S_IFREG | 0600);
137 btrfs_set_inode_flags(leaf, inode_item, BTRFS_INODE_NOCOMPRESS | 143 btrfs_set_inode_flags(leaf, inode_item, BTRFS_INODE_NOCOMPRESS |
138 BTRFS_INODE_PREALLOC | BTRFS_INODE_NODATASUM); 144 BTRFS_INODE_PREALLOC);
139 btrfs_set_inode_nlink(leaf, inode_item, 1); 145 btrfs_set_inode_nlink(leaf, inode_item, 1);
140 btrfs_set_inode_transid(leaf, inode_item, trans->transid); 146 btrfs_set_inode_transid(leaf, inode_item, trans->transid);
141 btrfs_set_inode_block_group(leaf, inode_item, offset); 147 btrfs_set_inode_block_group(leaf, inode_item, offset);
@@ -184,9 +190,11 @@ int btrfs_truncate_free_space_cache(struct btrfs_root *root,
184 struct btrfs_path *path, 190 struct btrfs_path *path,
185 struct inode *inode) 191 struct inode *inode)
186{ 192{
193 struct btrfs_block_rsv *rsv;
187 loff_t oldsize; 194 loff_t oldsize;
188 int ret = 0; 195 int ret = 0;
189 196
197 rsv = trans->block_rsv;
190 trans->block_rsv = root->orphan_block_rsv; 198 trans->block_rsv = root->orphan_block_rsv;
191 ret = btrfs_block_rsv_check(trans, root, 199 ret = btrfs_block_rsv_check(trans, root,
192 root->orphan_block_rsv, 200 root->orphan_block_rsv,
@@ -204,6 +212,8 @@ int btrfs_truncate_free_space_cache(struct btrfs_root *root,
204 */ 212 */
205 ret = btrfs_truncate_inode_items(trans, root, inode, 213 ret = btrfs_truncate_inode_items(trans, root, inode,
206 0, BTRFS_EXTENT_DATA_KEY); 214 0, BTRFS_EXTENT_DATA_KEY);
215
216 trans->block_rsv = rsv;
207 if (ret) { 217 if (ret) {
208 WARN_ON(1); 218 WARN_ON(1);
209 return ret; 219 return ret;
@@ -239,17 +249,12 @@ int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
239 struct btrfs_free_space_header *header; 249 struct btrfs_free_space_header *header;
240 struct extent_buffer *leaf; 250 struct extent_buffer *leaf;
241 struct page *page; 251 struct page *page;
242 u32 *checksums = NULL, *crc;
243 char *disk_crcs = NULL;
244 struct btrfs_key key; 252 struct btrfs_key key;
245 struct list_head bitmaps; 253 struct list_head bitmaps;
246 u64 num_entries; 254 u64 num_entries;
247 u64 num_bitmaps; 255 u64 num_bitmaps;
248 u64 generation; 256 u64 generation;
249 u32 cur_crc = ~(u32)0;
250 pgoff_t index = 0; 257 pgoff_t index = 0;
251 unsigned long first_page_offset;
252 int num_checksums;
253 int ret = 0; 258 int ret = 0;
254 259
255 INIT_LIST_HEAD(&bitmaps); 260 INIT_LIST_HEAD(&bitmaps);
@@ -292,16 +297,6 @@ int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
292 if (!num_entries) 297 if (!num_entries)
293 goto out; 298 goto out;
294 299
295 /* Setup everything for doing checksumming */
296 num_checksums = i_size_read(inode) / PAGE_CACHE_SIZE;
297 checksums = crc = kzalloc(sizeof(u32) * num_checksums, GFP_NOFS);
298 if (!checksums)
299 goto out;
300 first_page_offset = (sizeof(u32) * num_checksums) + sizeof(u64);
301 disk_crcs = kzalloc(first_page_offset, GFP_NOFS);
302 if (!disk_crcs)
303 goto out;
304
305 ret = readahead_cache(inode); 300 ret = readahead_cache(inode);
306 if (ret) 301 if (ret)
307 goto out; 302 goto out;
@@ -311,18 +306,12 @@ int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
311 struct btrfs_free_space *e; 306 struct btrfs_free_space *e;
312 void *addr; 307 void *addr;
313 unsigned long offset = 0; 308 unsigned long offset = 0;
314 unsigned long start_offset = 0;
315 int need_loop = 0; 309 int need_loop = 0;
316 310
317 if (!num_entries && !num_bitmaps) 311 if (!num_entries && !num_bitmaps)
318 break; 312 break;
319 313
320 if (index == 0) { 314 page = find_or_create_page(inode->i_mapping, index, GFP_NOFS);
321 start_offset = first_page_offset;
322 offset = start_offset;
323 }
324
325 page = grab_cache_page(inode->i_mapping, index);
326 if (!page) 315 if (!page)
327 goto free_cache; 316 goto free_cache;
328 317
@@ -342,8 +331,15 @@ int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
342 if (index == 0) { 331 if (index == 0) {
343 u64 *gen; 332 u64 *gen;
344 333
345 memcpy(disk_crcs, addr, first_page_offset); 334 /*
346 gen = addr + (sizeof(u32) * num_checksums); 335 * We put a bogus crc in the front of the first page in
336 * case old kernels try to mount a fs with the new
337 * format to make sure they discard the cache.
338 */
339 addr += sizeof(u64);
340 offset += sizeof(u64);
341
342 gen = addr;
347 if (*gen != BTRFS_I(inode)->generation) { 343 if (*gen != BTRFS_I(inode)->generation) {
348 printk(KERN_ERR "btrfs: space cache generation" 344 printk(KERN_ERR "btrfs: space cache generation"
349 " (%llu) does not match inode (%llu)\n", 345 " (%llu) does not match inode (%llu)\n",
@@ -355,24 +351,10 @@ int __load_free_space_cache(struct btrfs_root *root, struct inode *inode,
355 page_cache_release(page); 351 page_cache_release(page);
356 goto free_cache; 352 goto free_cache;
357 } 353 }
358 crc = (u32 *)disk_crcs; 354 addr += sizeof(u64);
355 offset += sizeof(u64);
359 } 356 }
360 entry = addr + start_offset; 357 entry = addr;
361
362 /* First lets check our crc before we do anything fun */
363 cur_crc = ~(u32)0;
364 cur_crc = btrfs_csum_data(root, addr + start_offset, cur_crc,
365 PAGE_CACHE_SIZE - start_offset);
366 btrfs_csum_final(cur_crc, (char *)&cur_crc);
367 if (cur_crc != *crc) {
368 printk(KERN_ERR "btrfs: crc mismatch for page %lu\n",
369 index);
370 kunmap(page);
371 unlock_page(page);
372 page_cache_release(page);
373 goto free_cache;
374 }
375 crc++;
376 358
377 while (1) { 359 while (1) {
378 if (!num_entries) 360 if (!num_entries)
@@ -470,8 +452,6 @@ next:
470 452
471 ret = 1; 453 ret = 1;
472out: 454out:
473 kfree(checksums);
474 kfree(disk_crcs);
475 return ret; 455 return ret;
476free_cache: 456free_cache:
477 __btrfs_remove_free_space_cache(ctl); 457 __btrfs_remove_free_space_cache(ctl);
@@ -569,8 +549,7 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
569 struct btrfs_key key; 549 struct btrfs_key key;
570 u64 start, end, len; 550 u64 start, end, len;
571 u64 bytes = 0; 551 u64 bytes = 0;
572 u32 *crc, *checksums; 552 u32 crc = ~(u32)0;
573 unsigned long first_page_offset;
574 int index = 0, num_pages = 0; 553 int index = 0, num_pages = 0;
575 int entries = 0; 554 int entries = 0;
576 int bitmaps = 0; 555 int bitmaps = 0;
@@ -590,34 +569,13 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
590 num_pages = (i_size_read(inode) + PAGE_CACHE_SIZE - 1) >> 569 num_pages = (i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
591 PAGE_CACHE_SHIFT; 570 PAGE_CACHE_SHIFT;
592 571
593 /* Since the first page has all of our checksums and our generation we
594 * need to calculate the offset into the page that we can start writing
595 * our entries.
596 */
597 first_page_offset = (sizeof(u32) * num_pages) + sizeof(u64);
598
599 filemap_write_and_wait(inode->i_mapping); 572 filemap_write_and_wait(inode->i_mapping);
600 btrfs_wait_ordered_range(inode, inode->i_size & 573 btrfs_wait_ordered_range(inode, inode->i_size &
601 ~(root->sectorsize - 1), (u64)-1); 574 ~(root->sectorsize - 1), (u64)-1);
602 575
603 /* make sure we don't overflow that first page */
604 if (first_page_offset + sizeof(struct btrfs_free_space_entry) >= PAGE_CACHE_SIZE) {
605 /* this is really the same as running out of space, where we also return 0 */
606 printk(KERN_CRIT "Btrfs: free space cache was too big for the crc page\n");
607 ret = 0;
608 goto out_update;
609 }
610
611 /* We need a checksum per page. */
612 crc = checksums = kzalloc(sizeof(u32) * num_pages, GFP_NOFS);
613 if (!crc)
614 return -1;
615
616 pages = kzalloc(sizeof(struct page *) * num_pages, GFP_NOFS); 576 pages = kzalloc(sizeof(struct page *) * num_pages, GFP_NOFS);
617 if (!pages) { 577 if (!pages)
618 kfree(crc);
619 return -1; 578 return -1;
620 }
621 579
622 /* Get the cluster for this block_group if it exists */ 580 /* Get the cluster for this block_group if it exists */
623 if (block_group && !list_empty(&block_group->cluster_list)) 581 if (block_group && !list_empty(&block_group->cluster_list))
@@ -640,7 +598,7 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
640 * know and don't freak out. 598 * know and don't freak out.
641 */ 599 */
642 while (index < num_pages) { 600 while (index < num_pages) {
643 page = grab_cache_page(inode->i_mapping, index); 601 page = find_or_create_page(inode->i_mapping, index, GFP_NOFS);
644 if (!page) { 602 if (!page) {
645 int i; 603 int i;
646 604
@@ -648,7 +606,7 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
648 unlock_page(pages[i]); 606 unlock_page(pages[i]);
649 page_cache_release(pages[i]); 607 page_cache_release(pages[i]);
650 } 608 }
651 goto out_free; 609 goto out;
652 } 610 }
653 pages[index] = page; 611 pages[index] = page;
654 index++; 612 index++;
@@ -668,17 +626,11 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
668 /* Write out the extent entries */ 626 /* Write out the extent entries */
669 do { 627 do {
670 struct btrfs_free_space_entry *entry; 628 struct btrfs_free_space_entry *entry;
671 void *addr; 629 void *addr, *orig;
672 unsigned long offset = 0; 630 unsigned long offset = 0;
673 unsigned long start_offset = 0;
674 631
675 next_page = false; 632 next_page = false;
676 633
677 if (index == 0) {
678 start_offset = first_page_offset;
679 offset = start_offset;
680 }
681
682 if (index >= num_pages) { 634 if (index >= num_pages) {
683 out_of_space = true; 635 out_of_space = true;
684 break; 636 break;
@@ -686,10 +638,26 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
686 638
687 page = pages[index]; 639 page = pages[index];
688 640
689 addr = kmap(page); 641 orig = addr = kmap(page);
690 entry = addr + start_offset; 642 if (index == 0) {
643 u64 *gen;
691 644
692 memset(addr, 0, PAGE_CACHE_SIZE); 645 /*
646 * We're going to put in a bogus crc for this page to
647 * make sure that old kernels who aren't aware of this
648 * format will be sure to discard the cache.
649 */
650 addr += sizeof(u64);
651 offset += sizeof(u64);
652
653 gen = addr;
654 *gen = trans->transid;
655 addr += sizeof(u64);
656 offset += sizeof(u64);
657 }
658 entry = addr;
659
660 memset(addr, 0, PAGE_CACHE_SIZE - offset);
693 while (node && !next_page) { 661 while (node && !next_page) {
694 struct btrfs_free_space *e; 662 struct btrfs_free_space *e;
695 663
@@ -752,13 +720,19 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
752 next_page = true; 720 next_page = true;
753 entry++; 721 entry++;
754 } 722 }
755 *crc = ~(u32)0;
756 *crc = btrfs_csum_data(root, addr + start_offset, *crc,
757 PAGE_CACHE_SIZE - start_offset);
758 kunmap(page);
759 723
760 btrfs_csum_final(*crc, (char *)crc); 724 /* Generate bogus crc value */
761 crc++; 725 if (index == 0) {
726 u32 *tmp;
727 crc = btrfs_csum_data(root, orig + sizeof(u64), crc,
728 PAGE_CACHE_SIZE - sizeof(u64));
729 btrfs_csum_final(crc, (char *)&crc);
730 crc++;
731 tmp = orig;
732 *tmp = crc;
733 }
734
735 kunmap(page);
762 736
763 bytes += PAGE_CACHE_SIZE; 737 bytes += PAGE_CACHE_SIZE;
764 738
@@ -779,11 +753,7 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
779 753
780 addr = kmap(page); 754 addr = kmap(page);
781 memcpy(addr, entry->bitmap, PAGE_CACHE_SIZE); 755 memcpy(addr, entry->bitmap, PAGE_CACHE_SIZE);
782 *crc = ~(u32)0;
783 *crc = btrfs_csum_data(root, addr, *crc, PAGE_CACHE_SIZE);
784 kunmap(page); 756 kunmap(page);
785 btrfs_csum_final(*crc, (char *)crc);
786 crc++;
787 bytes += PAGE_CACHE_SIZE; 757 bytes += PAGE_CACHE_SIZE;
788 758
789 list_del_init(&entry->list); 759 list_del_init(&entry->list);
@@ -796,7 +766,7 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
796 i_size_read(inode) - 1, &cached_state, 766 i_size_read(inode) - 1, &cached_state,
797 GFP_NOFS); 767 GFP_NOFS);
798 ret = 0; 768 ret = 0;
799 goto out_free; 769 goto out;
800 } 770 }
801 771
802 /* Zero out the rest of the pages just to make sure */ 772 /* Zero out the rest of the pages just to make sure */
@@ -811,20 +781,6 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
811 index++; 781 index++;
812 } 782 }
813 783
814 /* Write the checksums and trans id to the first page */
815 {
816 void *addr;
817 u64 *gen;
818
819 page = pages[0];
820
821 addr = kmap(page);
822 memcpy(addr, checksums, sizeof(u32) * num_pages);
823 gen = addr + (sizeof(u32) * num_pages);
824 *gen = trans->transid;
825 kunmap(page);
826 }
827
828 ret = btrfs_dirty_pages(root, inode, pages, num_pages, 0, 784 ret = btrfs_dirty_pages(root, inode, pages, num_pages, 0,
829 bytes, &cached_state); 785 bytes, &cached_state);
830 btrfs_drop_pages(pages, num_pages); 786 btrfs_drop_pages(pages, num_pages);
@@ -833,7 +789,7 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
833 789
834 if (ret) { 790 if (ret) {
835 ret = 0; 791 ret = 0;
836 goto out_free; 792 goto out;
837 } 793 }
838 794
839 BTRFS_I(inode)->generation = trans->transid; 795 BTRFS_I(inode)->generation = trans->transid;
@@ -850,7 +806,7 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
850 clear_extent_bit(&BTRFS_I(inode)->io_tree, 0, bytes - 1, 806 clear_extent_bit(&BTRFS_I(inode)->io_tree, 0, bytes - 1,
851 EXTENT_DIRTY | EXTENT_DELALLOC | 807 EXTENT_DIRTY | EXTENT_DELALLOC |
852 EXTENT_DO_ACCOUNTING, 0, 0, NULL, GFP_NOFS); 808 EXTENT_DO_ACCOUNTING, 0, 0, NULL, GFP_NOFS);
853 goto out_free; 809 goto out;
854 } 810 }
855 leaf = path->nodes[0]; 811 leaf = path->nodes[0];
856 if (ret > 0) { 812 if (ret > 0) {
@@ -866,7 +822,7 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
866 EXTENT_DO_ACCOUNTING, 0, 0, NULL, 822 EXTENT_DO_ACCOUNTING, 0, 0, NULL,
867 GFP_NOFS); 823 GFP_NOFS);
868 btrfs_release_path(path); 824 btrfs_release_path(path);
869 goto out_free; 825 goto out;
870 } 826 }
871 } 827 }
872 header = btrfs_item_ptr(leaf, path->slots[0], 828 header = btrfs_item_ptr(leaf, path->slots[0],
@@ -879,11 +835,8 @@ int __btrfs_write_out_cache(struct btrfs_root *root, struct inode *inode,
879 835
880 ret = 1; 836 ret = 1;
881 837
882out_free: 838out:
883 kfree(checksums);
884 kfree(pages); 839 kfree(pages);
885
886out_update:
887 if (ret != 1) { 840 if (ret != 1) {
888 invalidate_inode_pages2_range(inode->i_mapping, 0, index); 841 invalidate_inode_pages2_range(inode->i_mapping, 0, index);
889 BTRFS_I(inode)->generation = 0; 842 BTRFS_I(inode)->generation = 0;
@@ -1219,9 +1172,9 @@ static void recalculate_thresholds(struct btrfs_free_space_ctl *ctl)
1219 div64_u64(extent_bytes, (sizeof(struct btrfs_free_space))); 1172 div64_u64(extent_bytes, (sizeof(struct btrfs_free_space)));
1220} 1173}
1221 1174
1222static void bitmap_clear_bits(struct btrfs_free_space_ctl *ctl, 1175static inline void __bitmap_clear_bits(struct btrfs_free_space_ctl *ctl,
1223 struct btrfs_free_space *info, u64 offset, 1176 struct btrfs_free_space *info,
1224 u64 bytes) 1177 u64 offset, u64 bytes)
1225{ 1178{
1226 unsigned long start, count; 1179 unsigned long start, count;
1227 1180
@@ -1232,6 +1185,13 @@ static void bitmap_clear_bits(struct btrfs_free_space_ctl *ctl,
1232 bitmap_clear(info->bitmap, start, count); 1185 bitmap_clear(info->bitmap, start, count);
1233 1186
1234 info->bytes -= bytes; 1187 info->bytes -= bytes;
1188}
1189
1190static void bitmap_clear_bits(struct btrfs_free_space_ctl *ctl,
1191 struct btrfs_free_space *info, u64 offset,
1192 u64 bytes)
1193{
1194 __bitmap_clear_bits(ctl, info, offset, bytes);
1235 ctl->free_space -= bytes; 1195 ctl->free_space -= bytes;
1236} 1196}
1237 1197
@@ -2035,7 +1995,7 @@ static u64 btrfs_alloc_from_bitmap(struct btrfs_block_group_cache *block_group,
2035 return 0; 1995 return 0;
2036 1996
2037 ret = search_start; 1997 ret = search_start;
2038 bitmap_clear_bits(ctl, entry, ret, bytes); 1998 __bitmap_clear_bits(ctl, entry, ret, bytes);
2039 1999
2040 return ret; 2000 return ret;
2041} 2001}
@@ -2090,7 +2050,6 @@ u64 btrfs_alloc_from_cluster(struct btrfs_block_group_cache *block_group,
2090 continue; 2050 continue;
2091 } 2051 }
2092 } else { 2052 } else {
2093
2094 ret = entry->offset; 2053 ret = entry->offset;
2095 2054
2096 entry->offset += bytes; 2055 entry->offset += bytes;