aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent_io.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-05-09 16:07:40 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-05-09 16:07:40 -0400
commit983a5f84a4a11c8706ca70615125db711336b684 (patch)
treebbf16b836903aaf523e7c637a0d7191ba8fa172d /fs/btrfs/extent_io.c
parent8769e078a9a2bce13d39c08e0e5a513f5320e1de (diff)
parent667e7d94a1683661cff5fe9a0fa0d7f8fdd2c007 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
Pull btrfs update from Chris Mason: "These are mostly fixes. The biggest exceptions are Josef's skinny extents and Jan Schmidt's code to rebuild our quota indexes if they get out of sync (or you enable quotas on an existing filesystem). The skinny extents are off by default because they are a new variation on the extent allocation tree format. btrfstune -x enables them, and the new format makes the extent allocation tree about 30% smaller. I rebased this a few days ago to rework Dave Sterba's crc checks on the super block, but almost all of these go back to rc6, since I though 3.9 was due any minute. The biggest missing fix is the tracepoint bug that was hit late in 3.9. I ran into problems with that in overnight testing and I'm still tracking it down. I'll definitely have that fixed for rc2." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: (101 commits) Btrfs: allow superblock mismatch from older mkfs btrfs: enhance superblock checks btrfs: fix misleading variable name for flags btrfs: use unsigned long type for extent state bits Btrfs: improve the loop of scrub_stripe btrfs: read entire device info under lock btrfs: remove unused gfp mask parameter from release_extent_buffer callchain btrfs: handle errors returned from get_tree_block_key btrfs: make static code static & remove dead code Btrfs: deal with errors in write_dev_supers Btrfs: remove almost all of the BUG()'s from tree-log.c Btrfs: deal with free space cache errors while replaying log Btrfs: automatic rescan after "quota enable" command Btrfs: rescan for qgroups Btrfs: split btrfs_qgroup_account_ref into four functions Btrfs: allocate new chunks if the space is not enough for global rsv Btrfs: separate sequence numbers for delayed ref tracking and tree mod log btrfs: move leak debug code to functions Btrfs: return free space in cow error path Btrfs: set UUID in root_item for created trees ...
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r--fs/btrfs/extent_io.c310
1 files changed, 166 insertions, 144 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 73f2bfe3ac93..32d67a822e93 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -24,12 +24,62 @@
24static struct kmem_cache *extent_state_cache; 24static struct kmem_cache *extent_state_cache;
25static struct kmem_cache *extent_buffer_cache; 25static struct kmem_cache *extent_buffer_cache;
26 26
27#ifdef CONFIG_BTRFS_DEBUG
27static LIST_HEAD(buffers); 28static LIST_HEAD(buffers);
28static LIST_HEAD(states); 29static LIST_HEAD(states);
29 30
30#define LEAK_DEBUG 0
31#if LEAK_DEBUG
32static DEFINE_SPINLOCK(leak_lock); 31static DEFINE_SPINLOCK(leak_lock);
32
33static inline
34void btrfs_leak_debug_add(struct list_head *new, struct list_head *head)
35{
36 unsigned long flags;
37
38 spin_lock_irqsave(&leak_lock, flags);
39 list_add(new, head);
40 spin_unlock_irqrestore(&leak_lock, flags);
41}
42
43static inline
44void btrfs_leak_debug_del(struct list_head *entry)
45{
46 unsigned long flags;
47
48 spin_lock_irqsave(&leak_lock, flags);
49 list_del(entry);
50 spin_unlock_irqrestore(&leak_lock, flags);
51}
52
53static inline
54void btrfs_leak_debug_check(void)
55{
56 struct extent_state *state;
57 struct extent_buffer *eb;
58
59 while (!list_empty(&states)) {
60 state = list_entry(states.next, struct extent_state, leak_list);
61 printk(KERN_ERR "btrfs state leak: start %llu end %llu "
62 "state %lu in tree %p refs %d\n",
63 (unsigned long long)state->start,
64 (unsigned long long)state->end,
65 state->state, state->tree, atomic_read(&state->refs));
66 list_del(&state->leak_list);
67 kmem_cache_free(extent_state_cache, state);
68 }
69
70 while (!list_empty(&buffers)) {
71 eb = list_entry(buffers.next, struct extent_buffer, leak_list);
72 printk(KERN_ERR "btrfs buffer leak start %llu len %lu "
73 "refs %d\n", (unsigned long long)eb->start,
74 eb->len, atomic_read(&eb->refs));
75 list_del(&eb->leak_list);
76 kmem_cache_free(extent_buffer_cache, eb);
77 }
78}
79#else
80#define btrfs_leak_debug_add(new, head) do {} while (0)
81#define btrfs_leak_debug_del(entry) do {} while (0)
82#define btrfs_leak_debug_check() do {} while (0)
33#endif 83#endif
34 84
35#define BUFFER_LRU_MAX 64 85#define BUFFER_LRU_MAX 64
@@ -84,29 +134,7 @@ free_state_cache:
84 134
85void extent_io_exit(void) 135void extent_io_exit(void)
86{ 136{
87 struct extent_state *state; 137 btrfs_leak_debug_check();
88 struct extent_buffer *eb;
89
90 while (!list_empty(&states)) {
91 state = list_entry(states.next, struct extent_state, leak_list);
92 printk(KERN_ERR "btrfs state leak: start %llu end %llu "
93 "state %lu in tree %p refs %d\n",
94 (unsigned long long)state->start,
95 (unsigned long long)state->end,
96 state->state, state->tree, atomic_read(&state->refs));
97 list_del(&state->leak_list);
98 kmem_cache_free(extent_state_cache, state);
99
100 }
101
102 while (!list_empty(&buffers)) {
103 eb = list_entry(buffers.next, struct extent_buffer, leak_list);
104 printk(KERN_ERR "btrfs buffer leak start %llu len %lu "
105 "refs %d\n", (unsigned long long)eb->start,
106 eb->len, atomic_read(&eb->refs));
107 list_del(&eb->leak_list);
108 kmem_cache_free(extent_buffer_cache, eb);
109 }
110 138
111 /* 139 /*
112 * Make sure all delayed rcu free are flushed before we 140 * Make sure all delayed rcu free are flushed before we
@@ -134,9 +162,6 @@ void extent_io_tree_init(struct extent_io_tree *tree,
134static struct extent_state *alloc_extent_state(gfp_t mask) 162static struct extent_state *alloc_extent_state(gfp_t mask)
135{ 163{
136 struct extent_state *state; 164 struct extent_state *state;
137#if LEAK_DEBUG
138 unsigned long flags;
139#endif
140 165
141 state = kmem_cache_alloc(extent_state_cache, mask); 166 state = kmem_cache_alloc(extent_state_cache, mask);
142 if (!state) 167 if (!state)
@@ -144,11 +169,7 @@ static struct extent_state *alloc_extent_state(gfp_t mask)
144 state->state = 0; 169 state->state = 0;
145 state->private = 0; 170 state->private = 0;
146 state->tree = NULL; 171 state->tree = NULL;
147#if LEAK_DEBUG 172 btrfs_leak_debug_add(&state->leak_list, &states);
148 spin_lock_irqsave(&leak_lock, flags);
149 list_add(&state->leak_list, &states);
150 spin_unlock_irqrestore(&leak_lock, flags);
151#endif
152 atomic_set(&state->refs, 1); 173 atomic_set(&state->refs, 1);
153 init_waitqueue_head(&state->wq); 174 init_waitqueue_head(&state->wq);
154 trace_alloc_extent_state(state, mask, _RET_IP_); 175 trace_alloc_extent_state(state, mask, _RET_IP_);
@@ -160,15 +181,8 @@ void free_extent_state(struct extent_state *state)
160 if (!state) 181 if (!state)
161 return; 182 return;
162 if (atomic_dec_and_test(&state->refs)) { 183 if (atomic_dec_and_test(&state->refs)) {
163#if LEAK_DEBUG
164 unsigned long flags;
165#endif
166 WARN_ON(state->tree); 184 WARN_ON(state->tree);
167#if LEAK_DEBUG 185 btrfs_leak_debug_del(&state->leak_list);
168 spin_lock_irqsave(&leak_lock, flags);
169 list_del(&state->leak_list);
170 spin_unlock_irqrestore(&leak_lock, flags);
171#endif
172 trace_free_extent_state(state, _RET_IP_); 186 trace_free_extent_state(state, _RET_IP_);
173 kmem_cache_free(extent_state_cache, state); 187 kmem_cache_free(extent_state_cache, state);
174 } 188 }
@@ -308,21 +322,21 @@ static void merge_state(struct extent_io_tree *tree,
308} 322}
309 323
310static void set_state_cb(struct extent_io_tree *tree, 324static void set_state_cb(struct extent_io_tree *tree,
311 struct extent_state *state, int *bits) 325 struct extent_state *state, unsigned long *bits)
312{ 326{
313 if (tree->ops && tree->ops->set_bit_hook) 327 if (tree->ops && tree->ops->set_bit_hook)
314 tree->ops->set_bit_hook(tree->mapping->host, state, bits); 328 tree->ops->set_bit_hook(tree->mapping->host, state, bits);
315} 329}
316 330
317static void clear_state_cb(struct extent_io_tree *tree, 331static void clear_state_cb(struct extent_io_tree *tree,
318 struct extent_state *state, int *bits) 332 struct extent_state *state, unsigned long *bits)
319{ 333{
320 if (tree->ops && tree->ops->clear_bit_hook) 334 if (tree->ops && tree->ops->clear_bit_hook)
321 tree->ops->clear_bit_hook(tree->mapping->host, state, bits); 335 tree->ops->clear_bit_hook(tree->mapping->host, state, bits);
322} 336}
323 337
324static void set_state_bits(struct extent_io_tree *tree, 338static void set_state_bits(struct extent_io_tree *tree,
325 struct extent_state *state, int *bits); 339 struct extent_state *state, unsigned long *bits);
326 340
327/* 341/*
328 * insert an extent_state struct into the tree. 'bits' are set on the 342 * insert an extent_state struct into the tree. 'bits' are set on the
@@ -336,7 +350,7 @@ static void set_state_bits(struct extent_io_tree *tree,
336 */ 350 */
337static int insert_state(struct extent_io_tree *tree, 351static int insert_state(struct extent_io_tree *tree,
338 struct extent_state *state, u64 start, u64 end, 352 struct extent_state *state, u64 start, u64 end,
339 int *bits) 353 unsigned long *bits)
340{ 354{
341 struct rb_node *node; 355 struct rb_node *node;
342 356
@@ -424,10 +438,10 @@ static struct extent_state *next_state(struct extent_state *state)
424 */ 438 */
425static struct extent_state *clear_state_bit(struct extent_io_tree *tree, 439static struct extent_state *clear_state_bit(struct extent_io_tree *tree,
426 struct extent_state *state, 440 struct extent_state *state,
427 int *bits, int wake) 441 unsigned long *bits, int wake)
428{ 442{
429 struct extent_state *next; 443 struct extent_state *next;
430 int bits_to_clear = *bits & ~EXTENT_CTLBITS; 444 unsigned long bits_to_clear = *bits & ~EXTENT_CTLBITS;
431 445
432 if ((bits_to_clear & EXTENT_DIRTY) && (state->state & EXTENT_DIRTY)) { 446 if ((bits_to_clear & EXTENT_DIRTY) && (state->state & EXTENT_DIRTY)) {
433 u64 range = state->end - state->start + 1; 447 u64 range = state->end - state->start + 1;
@@ -463,7 +477,7 @@ alloc_extent_state_atomic(struct extent_state *prealloc)
463 return prealloc; 477 return prealloc;
464} 478}
465 479
466void extent_io_tree_panic(struct extent_io_tree *tree, int err) 480static void extent_io_tree_panic(struct extent_io_tree *tree, int err)
467{ 481{
468 btrfs_panic(tree_fs_info(tree), err, "Locking error: " 482 btrfs_panic(tree_fs_info(tree), err, "Locking error: "
469 "Extent tree was modified by another " 483 "Extent tree was modified by another "
@@ -483,7 +497,7 @@ void extent_io_tree_panic(struct extent_io_tree *tree, int err)
483 * This takes the tree lock, and returns 0 on success and < 0 on error. 497 * This takes the tree lock, and returns 0 on success and < 0 on error.
484 */ 498 */
485int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, 499int clear_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
486 int bits, int wake, int delete, 500 unsigned long bits, int wake, int delete,
487 struct extent_state **cached_state, 501 struct extent_state **cached_state,
488 gfp_t mask) 502 gfp_t mask)
489{ 503{
@@ -644,7 +658,8 @@ static void wait_on_state(struct extent_io_tree *tree,
644 * The range [start, end] is inclusive. 658 * The range [start, end] is inclusive.
645 * The tree lock is taken by this function 659 * The tree lock is taken by this function
646 */ 660 */
647void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, int bits) 661static void wait_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
662 unsigned long bits)
648{ 663{
649 struct extent_state *state; 664 struct extent_state *state;
650 struct rb_node *node; 665 struct rb_node *node;
@@ -685,9 +700,9 @@ out:
685 700
686static void set_state_bits(struct extent_io_tree *tree, 701static void set_state_bits(struct extent_io_tree *tree,
687 struct extent_state *state, 702 struct extent_state *state,
688 int *bits) 703 unsigned long *bits)
689{ 704{
690 int bits_to_set = *bits & ~EXTENT_CTLBITS; 705 unsigned long bits_to_set = *bits & ~EXTENT_CTLBITS;
691 706
692 set_state_cb(tree, state, bits); 707 set_state_cb(tree, state, bits);
693 if ((bits_to_set & EXTENT_DIRTY) && !(state->state & EXTENT_DIRTY)) { 708 if ((bits_to_set & EXTENT_DIRTY) && !(state->state & EXTENT_DIRTY)) {
@@ -730,8 +745,9 @@ static void uncache_state(struct extent_state **cached_ptr)
730 745
731static int __must_check 746static int __must_check
732__set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, 747__set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
733 int bits, int exclusive_bits, u64 *failed_start, 748 unsigned long bits, unsigned long exclusive_bits,
734 struct extent_state **cached_state, gfp_t mask) 749 u64 *failed_start, struct extent_state **cached_state,
750 gfp_t mask)
735{ 751{
736 struct extent_state *state; 752 struct extent_state *state;
737 struct extent_state *prealloc = NULL; 753 struct extent_state *prealloc = NULL;
@@ -923,9 +939,9 @@ search_again:
923 goto again; 939 goto again;
924} 940}
925 941
926int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, int bits, 942int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
927 u64 *failed_start, struct extent_state **cached_state, 943 unsigned long bits, u64 * failed_start,
928 gfp_t mask) 944 struct extent_state **cached_state, gfp_t mask)
929{ 945{
930 return __set_extent_bit(tree, start, end, bits, 0, failed_start, 946 return __set_extent_bit(tree, start, end, bits, 0, failed_start,
931 cached_state, mask); 947 cached_state, mask);
@@ -950,7 +966,7 @@ int set_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, int bits,
950 * boundary bits like LOCK. 966 * boundary bits like LOCK.
951 */ 967 */
952int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end, 968int convert_extent_bit(struct extent_io_tree *tree, u64 start, u64 end,
953 int bits, int clear_bits, 969 unsigned long bits, unsigned long clear_bits,
954 struct extent_state **cached_state, gfp_t mask) 970 struct extent_state **cached_state, gfp_t mask)
955{ 971{
956 struct extent_state *state; 972 struct extent_state *state;
@@ -1143,14 +1159,14 @@ int set_extent_dirty(struct extent_io_tree *tree, u64 start, u64 end,
1143} 1159}
1144 1160
1145int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 1161int set_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
1146 int bits, gfp_t mask) 1162 unsigned long bits, gfp_t mask)
1147{ 1163{
1148 return set_extent_bit(tree, start, end, bits, NULL, 1164 return set_extent_bit(tree, start, end, bits, NULL,
1149 NULL, mask); 1165 NULL, mask);
1150} 1166}
1151 1167
1152int clear_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 1168int clear_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
1153 int bits, gfp_t mask) 1169 unsigned long bits, gfp_t mask)
1154{ 1170{
1155 return clear_extent_bit(tree, start, end, bits, 0, 0, NULL, mask); 1171 return clear_extent_bit(tree, start, end, bits, 0, 0, NULL, mask);
1156} 1172}
@@ -1189,7 +1205,7 @@ int set_extent_new(struct extent_io_tree *tree, u64 start, u64 end,
1189int set_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end, 1205int set_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end,
1190 struct extent_state **cached_state, gfp_t mask) 1206 struct extent_state **cached_state, gfp_t mask)
1191{ 1207{
1192 return set_extent_bit(tree, start, end, EXTENT_UPTODATE, 0, 1208 return set_extent_bit(tree, start, end, EXTENT_UPTODATE, NULL,
1193 cached_state, mask); 1209 cached_state, mask);
1194} 1210}
1195 1211
@@ -1205,7 +1221,7 @@ int clear_extent_uptodate(struct extent_io_tree *tree, u64 start, u64 end,
1205 * us if waiting is desired. 1221 * us if waiting is desired.
1206 */ 1222 */
1207int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end, 1223int lock_extent_bits(struct extent_io_tree *tree, u64 start, u64 end,
1208 int bits, struct extent_state **cached_state) 1224 unsigned long bits, struct extent_state **cached_state)
1209{ 1225{
1210 int err; 1226 int err;
1211 u64 failed_start; 1227 u64 failed_start;
@@ -1313,8 +1329,9 @@ static int set_range_writeback(struct extent_io_tree *tree, u64 start, u64 end)
1313 * return it. tree->lock must be held. NULL will returned if 1329 * return it. tree->lock must be held. NULL will returned if
1314 * nothing was found after 'start' 1330 * nothing was found after 'start'
1315 */ 1331 */
1316struct extent_state *find_first_extent_bit_state(struct extent_io_tree *tree, 1332static struct extent_state *
1317 u64 start, int bits) 1333find_first_extent_bit_state(struct extent_io_tree *tree,
1334 u64 start, unsigned long bits)
1318{ 1335{
1319 struct rb_node *node; 1336 struct rb_node *node;
1320 struct extent_state *state; 1337 struct extent_state *state;
@@ -1348,7 +1365,7 @@ out:
1348 * If nothing was found, 1 is returned. If found something, return 0. 1365 * If nothing was found, 1 is returned. If found something, return 0.
1349 */ 1366 */
1350int find_first_extent_bit(struct extent_io_tree *tree, u64 start, 1367int find_first_extent_bit(struct extent_io_tree *tree, u64 start,
1351 u64 *start_ret, u64 *end_ret, int bits, 1368 u64 *start_ret, u64 *end_ret, unsigned long bits,
1352 struct extent_state **cached_state) 1369 struct extent_state **cached_state)
1353{ 1370{
1354 struct extent_state *state; 1371 struct extent_state *state;
@@ -1638,7 +1655,7 @@ int extent_clear_unlock_delalloc(struct inode *inode,
1638 unsigned long end_index = end >> PAGE_CACHE_SHIFT; 1655 unsigned long end_index = end >> PAGE_CACHE_SHIFT;
1639 unsigned long nr_pages = end_index - index + 1; 1656 unsigned long nr_pages = end_index - index + 1;
1640 int i; 1657 int i;
1641 int clear_bits = 0; 1658 unsigned long clear_bits = 0;
1642 1659
1643 if (op & EXTENT_CLEAR_UNLOCK) 1660 if (op & EXTENT_CLEAR_UNLOCK)
1644 clear_bits |= EXTENT_LOCKED; 1661 clear_bits |= EXTENT_LOCKED;
@@ -1777,6 +1794,64 @@ out:
1777 return ret; 1794 return ret;
1778} 1795}
1779 1796
1797void extent_cache_csums_dio(struct extent_io_tree *tree, u64 start, u32 csums[],
1798 int count)
1799{
1800 struct rb_node *node;
1801 struct extent_state *state;
1802
1803 spin_lock(&tree->lock);
1804 /*
1805 * this search will find all the extents that end after
1806 * our range starts.
1807 */
1808 node = tree_search(tree, start);
1809 BUG_ON(!node);
1810
1811 state = rb_entry(node, struct extent_state, rb_node);
1812 BUG_ON(state->start != start);
1813
1814 while (count) {
1815 state->private = *csums++;
1816 count--;
1817 state = next_state(state);
1818 }
1819 spin_unlock(&tree->lock);
1820}
1821
1822static inline u64 __btrfs_get_bio_offset(struct bio *bio, int bio_index)
1823{
1824 struct bio_vec *bvec = bio->bi_io_vec + bio_index;
1825
1826 return page_offset(bvec->bv_page) + bvec->bv_offset;
1827}
1828
1829void extent_cache_csums(struct extent_io_tree *tree, struct bio *bio, int bio_index,
1830 u32 csums[], int count)
1831{
1832 struct rb_node *node;
1833 struct extent_state *state = NULL;
1834 u64 start;
1835
1836 spin_lock(&tree->lock);
1837 do {
1838 start = __btrfs_get_bio_offset(bio, bio_index);
1839 if (state == NULL || state->start != start) {
1840 node = tree_search(tree, start);
1841 BUG_ON(!node);
1842
1843 state = rb_entry(node, struct extent_state, rb_node);
1844 BUG_ON(state->start != start);
1845 }
1846 state->private = *csums++;
1847 count--;
1848 bio_index++;
1849
1850 state = next_state(state);
1851 } while (count);
1852 spin_unlock(&tree->lock);
1853}
1854
1780int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private) 1855int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private)
1781{ 1856{
1782 struct rb_node *node; 1857 struct rb_node *node;
@@ -1811,7 +1886,7 @@ out:
1811 * range is found set. 1886 * range is found set.
1812 */ 1887 */
1813int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end, 1888int test_range_bit(struct extent_io_tree *tree, u64 start, u64 end,
1814 int bits, int filled, struct extent_state *cached) 1889 unsigned long bits, int filled, struct extent_state *cached)
1815{ 1890{
1816 struct extent_state *state = NULL; 1891 struct extent_state *state = NULL;
1817 struct rb_node *node; 1892 struct rb_node *node;
@@ -2595,7 +2670,8 @@ static int submit_extent_page(int rw, struct extent_io_tree *tree,
2595 return ret; 2670 return ret;
2596} 2671}
2597 2672
2598void attach_extent_buffer_page(struct extent_buffer *eb, struct page *page) 2673static void attach_extent_buffer_page(struct extent_buffer *eb,
2674 struct page *page)
2599{ 2675{
2600 if (!PagePrivate(page)) { 2676 if (!PagePrivate(page)) {
2601 SetPagePrivate(page); 2677 SetPagePrivate(page);
@@ -2625,7 +2701,7 @@ static int __extent_read_full_page(struct extent_io_tree *tree,
2625 struct page *page, 2701 struct page *page,
2626 get_extent_t *get_extent, 2702 get_extent_t *get_extent,
2627 struct bio **bio, int mirror_num, 2703 struct bio **bio, int mirror_num,
2628 unsigned long *bio_flags) 2704 unsigned long *bio_flags, int rw)
2629{ 2705{
2630 struct inode *inode = page->mapping->host; 2706 struct inode *inode = page->mapping->host;
2631 u64 start = page_offset(page); 2707 u64 start = page_offset(page);
@@ -2771,7 +2847,7 @@ static int __extent_read_full_page(struct extent_io_tree *tree,
2771 } 2847 }
2772 2848
2773 pnr -= page->index; 2849 pnr -= page->index;
2774 ret = submit_extent_page(READ, tree, page, 2850 ret = submit_extent_page(rw, tree, page,
2775 sector, disk_io_size, pg_offset, 2851 sector, disk_io_size, pg_offset,
2776 bdev, bio, pnr, 2852 bdev, bio, pnr,
2777 end_bio_extent_readpage, mirror_num, 2853 end_bio_extent_readpage, mirror_num,
@@ -2804,7 +2880,7 @@ int extent_read_full_page(struct extent_io_tree *tree, struct page *page,
2804 int ret; 2880 int ret;
2805 2881
2806 ret = __extent_read_full_page(tree, page, get_extent, &bio, mirror_num, 2882 ret = __extent_read_full_page(tree, page, get_extent, &bio, mirror_num,
2807 &bio_flags); 2883 &bio_flags, READ);
2808 if (bio) 2884 if (bio)
2809 ret = submit_one_bio(READ, bio, mirror_num, bio_flags); 2885 ret = submit_one_bio(READ, bio, mirror_num, bio_flags);
2810 return ret; 2886 return ret;
@@ -3103,7 +3179,7 @@ static int eb_wait(void *word)
3103 return 0; 3179 return 0;
3104} 3180}
3105 3181
3106static void wait_on_extent_buffer_writeback(struct extent_buffer *eb) 3182void wait_on_extent_buffer_writeback(struct extent_buffer *eb)
3107{ 3183{
3108 wait_on_bit(&eb->bflags, EXTENT_BUFFER_WRITEBACK, eb_wait, 3184 wait_on_bit(&eb->bflags, EXTENT_BUFFER_WRITEBACK, eb_wait,
3109 TASK_UNINTERRUPTIBLE); 3185 TASK_UNINTERRUPTIBLE);
@@ -3228,7 +3304,7 @@ static int write_one_eb(struct extent_buffer *eb,
3228 u64 offset = eb->start; 3304 u64 offset = eb->start;
3229 unsigned long i, num_pages; 3305 unsigned long i, num_pages;
3230 unsigned long bio_flags = 0; 3306 unsigned long bio_flags = 0;
3231 int rw = (epd->sync_io ? WRITE_SYNC : WRITE); 3307 int rw = (epd->sync_io ? WRITE_SYNC : WRITE) | REQ_META;
3232 int ret = 0; 3308 int ret = 0;
3233 3309
3234 clear_bit(EXTENT_BUFFER_IOERR, &eb->bflags); 3310 clear_bit(EXTENT_BUFFER_IOERR, &eb->bflags);
@@ -3665,14 +3741,14 @@ int extent_readpages(struct extent_io_tree *tree,
3665 continue; 3741 continue;
3666 for (i = 0; i < nr; i++) { 3742 for (i = 0; i < nr; i++) {
3667 __extent_read_full_page(tree, pagepool[i], get_extent, 3743 __extent_read_full_page(tree, pagepool[i], get_extent,
3668 &bio, 0, &bio_flags); 3744 &bio, 0, &bio_flags, READ);
3669 page_cache_release(pagepool[i]); 3745 page_cache_release(pagepool[i]);
3670 } 3746 }
3671 nr = 0; 3747 nr = 0;
3672 } 3748 }
3673 for (i = 0; i < nr; i++) { 3749 for (i = 0; i < nr; i++) {
3674 __extent_read_full_page(tree, pagepool[i], get_extent, 3750 __extent_read_full_page(tree, pagepool[i], get_extent,
3675 &bio, 0, &bio_flags); 3751 &bio, 0, &bio_flags, READ);
3676 page_cache_release(pagepool[i]); 3752 page_cache_release(pagepool[i]);
3677 } 3753 }
3678 3754
@@ -3713,9 +3789,9 @@ int extent_invalidatepage(struct extent_io_tree *tree,
3713 * are locked or under IO and drops the related state bits if it is safe 3789 * are locked or under IO and drops the related state bits if it is safe
3714 * to drop the page. 3790 * to drop the page.
3715 */ 3791 */
3716int try_release_extent_state(struct extent_map_tree *map, 3792static int try_release_extent_state(struct extent_map_tree *map,
3717 struct extent_io_tree *tree, struct page *page, 3793 struct extent_io_tree *tree,
3718 gfp_t mask) 3794 struct page *page, gfp_t mask)
3719{ 3795{
3720 u64 start = page_offset(page); 3796 u64 start = page_offset(page);
3721 u64 end = start + PAGE_CACHE_SIZE - 1; 3797 u64 end = start + PAGE_CACHE_SIZE - 1;
@@ -4006,12 +4082,7 @@ out:
4006 4082
4007static void __free_extent_buffer(struct extent_buffer *eb) 4083static void __free_extent_buffer(struct extent_buffer *eb)
4008{ 4084{
4009#if LEAK_DEBUG 4085 btrfs_leak_debug_del(&eb->leak_list);
4010 unsigned long flags;
4011 spin_lock_irqsave(&leak_lock, flags);
4012 list_del(&eb->leak_list);
4013 spin_unlock_irqrestore(&leak_lock, flags);
4014#endif
4015 kmem_cache_free(extent_buffer_cache, eb); 4086 kmem_cache_free(extent_buffer_cache, eb);
4016} 4087}
4017 4088
@@ -4021,9 +4092,6 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
4021 gfp_t mask) 4092 gfp_t mask)
4022{ 4093{
4023 struct extent_buffer *eb = NULL; 4094 struct extent_buffer *eb = NULL;
4024#if LEAK_DEBUG
4025 unsigned long flags;
4026#endif
4027 4095
4028 eb = kmem_cache_zalloc(extent_buffer_cache, mask); 4096 eb = kmem_cache_zalloc(extent_buffer_cache, mask);
4029 if (eb == NULL) 4097 if (eb == NULL)
@@ -4043,11 +4111,8 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
4043 init_waitqueue_head(&eb->write_lock_wq); 4111 init_waitqueue_head(&eb->write_lock_wq);
4044 init_waitqueue_head(&eb->read_lock_wq); 4112 init_waitqueue_head(&eb->read_lock_wq);
4045 4113
4046#if LEAK_DEBUG 4114 btrfs_leak_debug_add(&eb->leak_list, &buffers);
4047 spin_lock_irqsave(&leak_lock, flags); 4115
4048 list_add(&eb->leak_list, &buffers);
4049 spin_unlock_irqrestore(&leak_lock, flags);
4050#endif
4051 spin_lock_init(&eb->refs_lock); 4116 spin_lock_init(&eb->refs_lock);
4052 atomic_set(&eb->refs, 1); 4117 atomic_set(&eb->refs, 1);
4053 atomic_set(&eb->io_pages, 0); 4118 atomic_set(&eb->io_pages, 0);
@@ -4385,7 +4450,7 @@ static inline void btrfs_release_extent_buffer_rcu(struct rcu_head *head)
4385} 4450}
4386 4451
4387/* Expects to have eb->eb_lock already held */ 4452/* Expects to have eb->eb_lock already held */
4388static int release_extent_buffer(struct extent_buffer *eb, gfp_t mask) 4453static int release_extent_buffer(struct extent_buffer *eb)
4389{ 4454{
4390 WARN_ON(atomic_read(&eb->refs) == 0); 4455 WARN_ON(atomic_read(&eb->refs) == 0);
4391 if (atomic_dec_and_test(&eb->refs)) { 4456 if (atomic_dec_and_test(&eb->refs)) {
@@ -4443,7 +4508,7 @@ void free_extent_buffer(struct extent_buffer *eb)
4443 * I know this is terrible, but it's temporary until we stop tracking 4508 * I know this is terrible, but it's temporary until we stop tracking
4444 * the uptodate bits and such for the extent buffers. 4509 * the uptodate bits and such for the extent buffers.
4445 */ 4510 */
4446 release_extent_buffer(eb, GFP_ATOMIC); 4511 release_extent_buffer(eb);
4447} 4512}
4448 4513
4449void free_extent_buffer_stale(struct extent_buffer *eb) 4514void free_extent_buffer_stale(struct extent_buffer *eb)
@@ -4457,7 +4522,7 @@ void free_extent_buffer_stale(struct extent_buffer *eb)
4457 if (atomic_read(&eb->refs) == 2 && !extent_buffer_under_io(eb) && 4522 if (atomic_read(&eb->refs) == 2 && !extent_buffer_under_io(eb) &&
4458 test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) 4523 test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags))
4459 atomic_dec(&eb->refs); 4524 atomic_dec(&eb->refs);
4460 release_extent_buffer(eb, GFP_NOFS); 4525 release_extent_buffer(eb);
4461} 4526}
4462 4527
4463void clear_extent_buffer_dirty(struct extent_buffer *eb) 4528void clear_extent_buffer_dirty(struct extent_buffer *eb)
@@ -4509,17 +4574,6 @@ int set_extent_buffer_dirty(struct extent_buffer *eb)
4509 return was_dirty; 4574 return was_dirty;
4510} 4575}
4511 4576
4512static int range_straddles_pages(u64 start, u64 len)
4513{
4514 if (len < PAGE_CACHE_SIZE)
4515 return 1;
4516 if (start & (PAGE_CACHE_SIZE - 1))
4517 return 1;
4518 if ((start + len) & (PAGE_CACHE_SIZE - 1))
4519 return 1;
4520 return 0;
4521}
4522
4523int clear_extent_buffer_uptodate(struct extent_buffer *eb) 4577int clear_extent_buffer_uptodate(struct extent_buffer *eb)
4524{ 4578{
4525 unsigned long i; 4579 unsigned long i;
@@ -4551,37 +4605,6 @@ int set_extent_buffer_uptodate(struct extent_buffer *eb)
4551 return 0; 4605 return 0;
4552} 4606}
4553 4607
4554int extent_range_uptodate(struct extent_io_tree *tree,
4555 u64 start, u64 end)
4556{
4557 struct page *page;
4558 int ret;
4559 int pg_uptodate = 1;
4560 int uptodate;
4561 unsigned long index;
4562
4563 if (range_straddles_pages(start, end - start + 1)) {
4564 ret = test_range_bit(tree, start, end,
4565 EXTENT_UPTODATE, 1, NULL);
4566 if (ret)
4567 return 1;
4568 }
4569 while (start <= end) {
4570 index = start >> PAGE_CACHE_SHIFT;
4571 page = find_get_page(tree->mapping, index);
4572 if (!page)
4573 return 1;
4574 uptodate = PageUptodate(page);
4575 page_cache_release(page);
4576 if (!uptodate) {
4577 pg_uptodate = 0;
4578 break;
4579 }
4580 start += PAGE_CACHE_SIZE;
4581 }
4582 return pg_uptodate;
4583}
4584
4585int extent_buffer_uptodate(struct extent_buffer *eb) 4608int extent_buffer_uptodate(struct extent_buffer *eb)
4586{ 4609{
4587 return test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); 4610 return test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags);
@@ -4644,7 +4667,8 @@ int read_extent_buffer_pages(struct extent_io_tree *tree,
4644 ClearPageError(page); 4667 ClearPageError(page);
4645 err = __extent_read_full_page(tree, page, 4668 err = __extent_read_full_page(tree, page,
4646 get_extent, &bio, 4669 get_extent, &bio,
4647 mirror_num, &bio_flags); 4670 mirror_num, &bio_flags,
4671 READ | REQ_META);
4648 if (err) 4672 if (err)
4649 ret = err; 4673 ret = err;
4650 } else { 4674 } else {
@@ -4653,7 +4677,8 @@ int read_extent_buffer_pages(struct extent_io_tree *tree,
4653 } 4677 }
4654 4678
4655 if (bio) { 4679 if (bio) {
4656 err = submit_one_bio(READ, bio, mirror_num, bio_flags); 4680 err = submit_one_bio(READ | REQ_META, bio, mirror_num,
4681 bio_flags);
4657 if (err) 4682 if (err)
4658 return err; 4683 return err;
4659 } 4684 }
@@ -5017,7 +5042,7 @@ void memmove_extent_buffer(struct extent_buffer *dst, unsigned long dst_offset,
5017 } 5042 }
5018} 5043}
5019 5044
5020int try_release_extent_buffer(struct page *page, gfp_t mask) 5045int try_release_extent_buffer(struct page *page)
5021{ 5046{
5022 struct extent_buffer *eb; 5047 struct extent_buffer *eb;
5023 5048
@@ -5047,9 +5072,6 @@ int try_release_extent_buffer(struct page *page, gfp_t mask)
5047 } 5072 }
5048 spin_unlock(&page->mapping->private_lock); 5073 spin_unlock(&page->mapping->private_lock);
5049 5074
5050 if ((mask & GFP_NOFS) == GFP_NOFS)
5051 mask = GFP_NOFS;
5052
5053 /* 5075 /*
5054 * If tree ref isn't set then we know the ref on this eb is a real ref, 5076 * If tree ref isn't set then we know the ref on this eb is a real ref,
5055 * so just return, this page will likely be freed soon anyway. 5077 * so just return, this page will likely be freed soon anyway.
@@ -5059,5 +5081,5 @@ int try_release_extent_buffer(struct page *page, gfp_t mask)
5059 return 0; 5081 return 0;
5060 } 5082 }
5061 5083
5062 return release_extent_buffer(eb, mask); 5084 return release_extent_buffer(eb);
5063} 5085}