inode.c (5f56406aabdf5444d040c5955effc665b1d0dbaf) inode.c (d1310b2e0cd98eb1348553e69b73827b436dca7b)
1/*
2 * Copyright (C) 2007 Oracle. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,

--- 39 unchanged lines hidden (view full) ---

48static struct inode_operations btrfs_dir_inode_operations;
49static struct inode_operations btrfs_symlink_inode_operations;
50static struct inode_operations btrfs_dir_ro_inode_operations;
51static struct inode_operations btrfs_special_inode_operations;
52static struct inode_operations btrfs_file_inode_operations;
53static struct address_space_operations btrfs_aops;
54static struct address_space_operations btrfs_symlink_aops;
55static struct file_operations btrfs_dir_file_operations;
1/*
2 * Copyright (C) 2007 Oracle. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,

--- 39 unchanged lines hidden (view full) ---

48static struct inode_operations btrfs_dir_inode_operations;
49static struct inode_operations btrfs_symlink_inode_operations;
50static struct inode_operations btrfs_dir_ro_inode_operations;
51static struct inode_operations btrfs_special_inode_operations;
52static struct inode_operations btrfs_file_inode_operations;
53static struct address_space_operations btrfs_aops;
54static struct address_space_operations btrfs_symlink_aops;
55static struct file_operations btrfs_dir_file_operations;
56static struct extent_map_ops btrfs_extent_map_ops;
56static struct extent_io_ops btrfs_extent_io_ops;
57
58static struct kmem_cache *btrfs_inode_cachep;
59struct kmem_cache *btrfs_trans_handle_cachep;
60struct kmem_cache *btrfs_transaction_cachep;
61struct kmem_cache *btrfs_bit_radix_cachep;
62struct kmem_cache *btrfs_path_cachep;
63
64#define S_SHIFT 12

--- 34 unchanged lines hidden (view full) ---

99static int cow_file_range(struct inode *inode, u64 start, u64 end)
100{
101 struct btrfs_root *root = BTRFS_I(inode)->root;
102 struct btrfs_trans_handle *trans;
103 u64 alloc_hint = 0;
104 u64 num_bytes;
105 u64 cur_alloc_size;
106 u64 blocksize = root->sectorsize;
57
58static struct kmem_cache *btrfs_inode_cachep;
59struct kmem_cache *btrfs_trans_handle_cachep;
60struct kmem_cache *btrfs_transaction_cachep;
61struct kmem_cache *btrfs_bit_radix_cachep;
62struct kmem_cache *btrfs_path_cachep;
63
64#define S_SHIFT 12

--- 34 unchanged lines hidden (view full) ---

99static int cow_file_range(struct inode *inode, u64 start, u64 end)
100{
101 struct btrfs_root *root = BTRFS_I(inode)->root;
102 struct btrfs_trans_handle *trans;
103 u64 alloc_hint = 0;
104 u64 num_bytes;
105 u64 cur_alloc_size;
106 u64 blocksize = root->sectorsize;
107 u64 orig_start = start;
108 u64 orig_num_bytes;
107 struct btrfs_key ins;
108 int ret;
109
110 trans = btrfs_start_transaction(root, 1);
111 BUG_ON(!trans);
112 btrfs_set_trans_block_group(trans, inode);
113
114 num_bytes = (end - start + blocksize) & ~(blocksize - 1);
115 num_bytes = max(blocksize, num_bytes);
116 ret = btrfs_drop_extents(trans, root, inode,
117 start, start + num_bytes, start, &alloc_hint);
109 struct btrfs_key ins;
110 int ret;
111
112 trans = btrfs_start_transaction(root, 1);
113 BUG_ON(!trans);
114 btrfs_set_trans_block_group(trans, inode);
115
116 num_bytes = (end - start + blocksize) & ~(blocksize - 1);
117 num_bytes = max(blocksize, num_bytes);
118 ret = btrfs_drop_extents(trans, root, inode,
119 start, start + num_bytes, start, &alloc_hint);
120 orig_num_bytes = num_bytes;
118
119 if (alloc_hint == EXTENT_MAP_INLINE)
120 goto out;
121
122 while(num_bytes > 0) {
123 cur_alloc_size = min(num_bytes, root->fs_info->max_extent);
124 ret = btrfs_alloc_extent(trans, root, cur_alloc_size,
125 root->root_key.objectid,

--- 7 unchanged lines hidden (view full) ---

133 ret = btrfs_insert_file_extent(trans, root, inode->i_ino,
134 start, ins.objectid, ins.offset,
135 ins.offset);
136 btrfs_check_file(root, inode);
137 num_bytes -= cur_alloc_size;
138 alloc_hint = ins.objectid + ins.offset;
139 start += cur_alloc_size;
140 }
121
122 if (alloc_hint == EXTENT_MAP_INLINE)
123 goto out;
124
125 while(num_bytes > 0) {
126 cur_alloc_size = min(num_bytes, root->fs_info->max_extent);
127 ret = btrfs_alloc_extent(trans, root, cur_alloc_size,
128 root->root_key.objectid,

--- 7 unchanged lines hidden (view full) ---

136 ret = btrfs_insert_file_extent(trans, root, inode->i_ino,
137 start, ins.objectid, ins.offset,
138 ins.offset);
139 btrfs_check_file(root, inode);
140 num_bytes -= cur_alloc_size;
141 alloc_hint = ins.objectid + ins.offset;
142 start += cur_alloc_size;
143 }
144 btrfs_drop_extent_cache(inode, orig_start,
145 orig_start + orig_num_bytes - 1);
141 btrfs_add_ordered_inode(inode);
142out:
143 btrfs_end_transaction(trans, root);
144 return ret;
145}
146
147static int run_delalloc_nocow(struct inode *inode, u64 start, u64 end)
148{

--- 143 unchanged lines hidden (view full) ---

292 return ret;
293}
294
295int btrfs_readpage_io_hook(struct page *page, u64 start, u64 end)
296{
297 int ret = 0;
298 struct inode *inode = page->mapping->host;
299 struct btrfs_root *root = BTRFS_I(inode)->root;
146 btrfs_add_ordered_inode(inode);
147out:
148 btrfs_end_transaction(trans, root);
149 return ret;
150}
151
152static int run_delalloc_nocow(struct inode *inode, u64 start, u64 end)
153{

--- 143 unchanged lines hidden (view full) ---

297 return ret;
298}
299
300int btrfs_readpage_io_hook(struct page *page, u64 start, u64 end)
301{
302 int ret = 0;
303 struct inode *inode = page->mapping->host;
304 struct btrfs_root *root = BTRFS_I(inode)->root;
300 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
305 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
301 struct btrfs_csum_item *item;
302 struct btrfs_path *path = NULL;
303 u32 csum;
304 if (btrfs_test_opt(root, NODATASUM) ||
305 btrfs_test_flag(inode, NODATASUM))
306 return 0;
307 mutex_lock(&root->fs_info->fs_mutex);
308 path = btrfs_alloc_path();
309 item = btrfs_lookup_csum(NULL, root, path, inode->i_ino, start, 0);
310 if (IS_ERR(item)) {
311 ret = PTR_ERR(item);
312 /* a csum that isn't present is a preallocated region. */
313 if (ret == -ENOENT || ret == -EFBIG)
314 ret = 0;
315 csum = 0;
316 goto out;
317 }
318 read_extent_buffer(path->nodes[0], &csum, (unsigned long)item,
319 BTRFS_CRC32_SIZE);
306 struct btrfs_csum_item *item;
307 struct btrfs_path *path = NULL;
308 u32 csum;
309 if (btrfs_test_opt(root, NODATASUM) ||
310 btrfs_test_flag(inode, NODATASUM))
311 return 0;
312 mutex_lock(&root->fs_info->fs_mutex);
313 path = btrfs_alloc_path();
314 item = btrfs_lookup_csum(NULL, root, path, inode->i_ino, start, 0);
315 if (IS_ERR(item)) {
316 ret = PTR_ERR(item);
317 /* a csum that isn't present is a preallocated region. */
318 if (ret == -ENOENT || ret == -EFBIG)
319 ret = 0;
320 csum = 0;
321 goto out;
322 }
323 read_extent_buffer(path->nodes[0], &csum, (unsigned long)item,
324 BTRFS_CRC32_SIZE);
320 set_state_private(em_tree, start, csum);
325 set_state_private(io_tree, start, csum);
321out:
322 if (path)
323 btrfs_free_path(path);
324 mutex_unlock(&root->fs_info->fs_mutex);
325 return ret;
326}
327
328int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end)
329{
330 size_t offset = start - ((u64)page->index << PAGE_CACHE_SHIFT);
331 struct inode *inode = page->mapping->host;
326out:
327 if (path)
328 btrfs_free_path(path);
329 mutex_unlock(&root->fs_info->fs_mutex);
330 return ret;
331}
332
333int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end)
334{
335 size_t offset = start - ((u64)page->index << PAGE_CACHE_SHIFT);
336 struct inode *inode = page->mapping->host;
332 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
337 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
333 char *kaddr;
334 u64 private;
335 int ret;
336 struct btrfs_root *root = BTRFS_I(inode)->root;
337 u32 csum = ~(u32)0;
338 unsigned long flags;
338 char *kaddr;
339 u64 private;
340 int ret;
341 struct btrfs_root *root = BTRFS_I(inode)->root;
342 u32 csum = ~(u32)0;
343 unsigned long flags;
344
339 if (btrfs_test_opt(root, NODATASUM) ||
340 btrfs_test_flag(inode, NODATASUM))
341 return 0;
345 if (btrfs_test_opt(root, NODATASUM) ||
346 btrfs_test_flag(inode, NODATASUM))
347 return 0;
342 ret = get_state_private(em_tree, start, &private);
348
349 ret = get_state_private(io_tree, start, &private);
343 local_irq_save(flags);
344 kaddr = kmap_atomic(page, KM_IRQ0);
345 if (ret) {
346 goto zeroit;
347 }
348 csum = btrfs_csum_data(root, kaddr + offset, csum, end - start + 1);
349 btrfs_csum_final(csum, (char *)&csum);
350 if (csum != private) {

--- 72 unchanged lines hidden (view full) ---

423 btrfs_free_path(path);
424 inode_item = NULL;
425
426 mutex_unlock(&root->fs_info->fs_mutex);
427
428 switch (inode->i_mode & S_IFMT) {
429 case S_IFREG:
430 inode->i_mapping->a_ops = &btrfs_aops;
350 local_irq_save(flags);
351 kaddr = kmap_atomic(page, KM_IRQ0);
352 if (ret) {
353 goto zeroit;
354 }
355 csum = btrfs_csum_data(root, kaddr + offset, csum, end - start + 1);
356 btrfs_csum_final(csum, (char *)&csum);
357 if (csum != private) {

--- 72 unchanged lines hidden (view full) ---

430 btrfs_free_path(path);
431 inode_item = NULL;
432
433 mutex_unlock(&root->fs_info->fs_mutex);
434
435 switch (inode->i_mode & S_IFMT) {
436 case S_IFREG:
437 inode->i_mapping->a_ops = &btrfs_aops;
431 BTRFS_I(inode)->extent_tree.ops = &btrfs_extent_map_ops;
438 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
432 inode->i_fop = &btrfs_file_operations;
433 inode->i_op = &btrfs_file_inode_operations;
434 break;
435 case S_IFDIR:
436 inode->i_fop = &btrfs_dir_file_operations;
437 if (root == root->fs_info->tree_root)
438 inode->i_op = &btrfs_dir_ro_inode_operations;
439 else

--- 428 unchanged lines hidden (view full) ---

868 inode->i_sb->s_dirt = 1;
869 return ret;
870}
871
872static int btrfs_cow_one_page(struct inode *inode, struct page *page,
873 size_t zero_start)
874{
875 char *kaddr;
439 inode->i_fop = &btrfs_file_operations;
440 inode->i_op = &btrfs_file_inode_operations;
441 break;
442 case S_IFDIR:
443 inode->i_fop = &btrfs_dir_file_operations;
444 if (root == root->fs_info->tree_root)
445 inode->i_op = &btrfs_dir_ro_inode_operations;
446 else

--- 428 unchanged lines hidden (view full) ---

875 inode->i_sb->s_dirt = 1;
876 return ret;
877}
878
879static int btrfs_cow_one_page(struct inode *inode, struct page *page,
880 size_t zero_start)
881{
882 char *kaddr;
876 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
883 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
877 struct btrfs_root *root = BTRFS_I(inode)->root;
878 u64 page_start = (u64)page->index << PAGE_CACHE_SHIFT;
879 u64 page_end = page_start + PAGE_CACHE_SIZE - 1;
880 u64 existing_delalloc;
881 u64 delalloc_start;
882 int ret = 0;
883
884 WARN_ON(!PageLocked(page));
885 set_page_extent_mapped(page);
886
884 struct btrfs_root *root = BTRFS_I(inode)->root;
885 u64 page_start = (u64)page->index << PAGE_CACHE_SHIFT;
886 u64 page_end = page_start + PAGE_CACHE_SIZE - 1;
887 u64 existing_delalloc;
888 u64 delalloc_start;
889 int ret = 0;
890
891 WARN_ON(!PageLocked(page));
892 set_page_extent_mapped(page);
893
887 lock_extent(em_tree, page_start, page_end, GFP_NOFS);
894 lock_extent(io_tree, page_start, page_end, GFP_NOFS);
888 delalloc_start = page_start;
895 delalloc_start = page_start;
889 existing_delalloc = count_range_bits(&BTRFS_I(inode)->extent_tree,
896 existing_delalloc = count_range_bits(&BTRFS_I(inode)->io_tree,
890 &delalloc_start, page_end,
891 PAGE_CACHE_SIZE, EXTENT_DELALLOC);
897 &delalloc_start, page_end,
898 PAGE_CACHE_SIZE, EXTENT_DELALLOC);
892 set_extent_delalloc(&BTRFS_I(inode)->extent_tree, page_start,
899 set_extent_delalloc(&BTRFS_I(inode)->io_tree, page_start,
893 page_end, GFP_NOFS);
894
895 spin_lock(&root->fs_info->delalloc_lock);
896 root->fs_info->delalloc_bytes += PAGE_CACHE_SIZE - existing_delalloc;
897 spin_unlock(&root->fs_info->delalloc_lock);
898
899 if (zero_start != PAGE_CACHE_SIZE) {
900 kaddr = kmap(page);
901 memset(kaddr + zero_start, 0, PAGE_CACHE_SIZE - zero_start);
902 flush_dcache_page(page);
903 kunmap(page);
904 }
905 set_page_dirty(page);
900 page_end, GFP_NOFS);
901
902 spin_lock(&root->fs_info->delalloc_lock);
903 root->fs_info->delalloc_bytes += PAGE_CACHE_SIZE - existing_delalloc;
904 spin_unlock(&root->fs_info->delalloc_lock);
905
906 if (zero_start != PAGE_CACHE_SIZE) {
907 kaddr = kmap(page);
908 memset(kaddr + zero_start, 0, PAGE_CACHE_SIZE - zero_start);
909 flush_dcache_page(page);
910 kunmap(page);
911 }
912 set_page_dirty(page);
906 unlock_extent(em_tree, page_start, page_end, GFP_NOFS);
913 unlock_extent(io_tree, page_start, page_end, GFP_NOFS);
907
908 return ret;
909}
910
911/*
912 * taken from block_truncate_page, but does cow as it zeros out
913 * any bytes left in the last page in the file.
914 */

--- 41 unchanged lines hidden (view full) ---

956 err = inode_change_ok(inode, attr);
957 if (err)
958 return err;
959
960 if (S_ISREG(inode->i_mode) &&
961 attr->ia_valid & ATTR_SIZE && attr->ia_size > inode->i_size) {
962 struct btrfs_trans_handle *trans;
963 struct btrfs_root *root = BTRFS_I(inode)->root;
914
915 return ret;
916}
917
918/*
919 * taken from block_truncate_page, but does cow as it zeros out
920 * any bytes left in the last page in the file.
921 */

--- 41 unchanged lines hidden (view full) ---

963 err = inode_change_ok(inode, attr);
964 if (err)
965 return err;
966
967 if (S_ISREG(inode->i_mode) &&
968 attr->ia_valid & ATTR_SIZE && attr->ia_size > inode->i_size) {
969 struct btrfs_trans_handle *trans;
970 struct btrfs_root *root = BTRFS_I(inode)->root;
964 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
971 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
965
966 u64 mask = root->sectorsize - 1;
967 u64 pos = (inode->i_size + mask) & ~mask;
968 u64 block_end = attr->ia_size | mask;
969 u64 hole_start;
970 u64 hole_size;
971 u64 alloc_hint = 0;
972

--- 8 unchanged lines hidden (view full) ---

981 mutex_lock(&root->fs_info->fs_mutex);
982 err = btrfs_check_free_space(root, 1, 0);
983 mutex_unlock(&root->fs_info->fs_mutex);
984 if (err)
985 goto fail;
986
987 btrfs_truncate_page(inode->i_mapping, inode->i_size);
988
972
973 u64 mask = root->sectorsize - 1;
974 u64 pos = (inode->i_size + mask) & ~mask;
975 u64 block_end = attr->ia_size | mask;
976 u64 hole_start;
977 u64 hole_size;
978 u64 alloc_hint = 0;
979

--- 8 unchanged lines hidden (view full) ---

988 mutex_lock(&root->fs_info->fs_mutex);
989 err = btrfs_check_free_space(root, 1, 0);
990 mutex_unlock(&root->fs_info->fs_mutex);
991 if (err)
992 goto fail;
993
994 btrfs_truncate_page(inode->i_mapping, inode->i_size);
995
989 lock_extent(em_tree, pos, block_end, GFP_NOFS);
996 lock_extent(io_tree, pos, block_end, GFP_NOFS);
990 hole_size = block_end - hole_start;
991
992 mutex_lock(&root->fs_info->fs_mutex);
993 trans = btrfs_start_transaction(root, 1);
994 btrfs_set_trans_block_group(trans, inode);
995 err = btrfs_drop_extents(trans, root, inode,
996 pos, block_end, pos,
997 &alloc_hint);
998
999 if (alloc_hint != EXTENT_MAP_INLINE) {
1000 err = btrfs_insert_file_extent(trans, root,
1001 inode->i_ino,
1002 hole_start, 0, 0,
1003 hole_size);
997 hole_size = block_end - hole_start;
998
999 mutex_lock(&root->fs_info->fs_mutex);
1000 trans = btrfs_start_transaction(root, 1);
1001 btrfs_set_trans_block_group(trans, inode);
1002 err = btrfs_drop_extents(trans, root, inode,
1003 pos, block_end, pos,
1004 &alloc_hint);
1005
1006 if (alloc_hint != EXTENT_MAP_INLINE) {
1007 err = btrfs_insert_file_extent(trans, root,
1008 inode->i_ino,
1009 hole_start, 0, 0,
1010 hole_size);
1011 btrfs_drop_extent_cache(inode, hole_start,
1012 hole_size - 1);
1004 btrfs_check_file(root, inode);
1005 }
1006 btrfs_end_transaction(trans, root);
1007 mutex_unlock(&root->fs_info->fs_mutex);
1013 btrfs_check_file(root, inode);
1014 }
1015 btrfs_end_transaction(trans, root);
1016 mutex_unlock(&root->fs_info->fs_mutex);
1008 unlock_extent(em_tree, pos, block_end, GFP_NOFS);
1017 unlock_extent(io_tree, pos, block_end, GFP_NOFS);
1009 if (err)
1010 return err;
1011 }
1012out:
1013 err = inode_setattr(inode, attr);
1014fail:
1015 return err;
1016}

--- 167 unchanged lines hidden (view full) ---

1184 return 0;
1185}
1186
1187static int btrfs_init_locked_inode(struct inode *inode, void *p)
1188{
1189 struct btrfs_iget_args *args = p;
1190 inode->i_ino = args->ino;
1191 BTRFS_I(inode)->root = args->root;
1018 if (err)
1019 return err;
1020 }
1021out:
1022 err = inode_setattr(inode, attr);
1023fail:
1024 return err;
1025}

--- 167 unchanged lines hidden (view full) ---

1193 return 0;
1194}
1195
1196static int btrfs_init_locked_inode(struct inode *inode, void *p)
1197{
1198 struct btrfs_iget_args *args = p;
1199 inode->i_ino = args->ino;
1200 BTRFS_I(inode)->root = args->root;
1192 extent_map_tree_init(&BTRFS_I(inode)->extent_tree,
1201 extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS);
1202 extent_io_tree_init(&BTRFS_I(inode)->io_tree,
1193 inode->i_mapping, GFP_NOFS);
1194 return 0;
1195}
1196
1197static int btrfs_find_actor(struct inode *inode, void *opaque)
1198{
1199 struct btrfs_iget_args *args = opaque;
1200 return (args->ino == inode->i_ino &&

--- 279 unchanged lines hidden (view full) ---

1480
1481 path = btrfs_alloc_path();
1482 BUG_ON(!path);
1483
1484 inode = new_inode(root->fs_info->sb);
1485 if (!inode)
1486 return ERR_PTR(-ENOMEM);
1487
1203 inode->i_mapping, GFP_NOFS);
1204 return 0;
1205}
1206
1207static int btrfs_find_actor(struct inode *inode, void *opaque)
1208{
1209 struct btrfs_iget_args *args = opaque;
1210 return (args->ino == inode->i_ino &&

--- 279 unchanged lines hidden (view full) ---

1490
1491 path = btrfs_alloc_path();
1492 BUG_ON(!path);
1493
1494 inode = new_inode(root->fs_info->sb);
1495 if (!inode)
1496 return ERR_PTR(-ENOMEM);
1497
1488 extent_map_tree_init(&BTRFS_I(inode)->extent_tree,
1498 extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS);
1499 extent_io_tree_init(&BTRFS_I(inode)->io_tree,
1489 inode->i_mapping, GFP_NOFS);
1490 BTRFS_I(inode)->root = root;
1491
1492 if (mode & S_IFDIR)
1493 owner = 0;
1494 else
1495 owner = 1;
1496 group = btrfs_find_block_group(root, group, 0, 0, owner);

--- 170 unchanged lines hidden (view full) ---

1667 btrfs_set_trans_block_group(trans, inode);
1668 err = btrfs_add_nondir(trans, dentry, inode);
1669 if (err)
1670 drop_inode = 1;
1671 else {
1672 inode->i_mapping->a_ops = &btrfs_aops;
1673 inode->i_fop = &btrfs_file_operations;
1674 inode->i_op = &btrfs_file_inode_operations;
1500 inode->i_mapping, GFP_NOFS);
1501 BTRFS_I(inode)->root = root;
1502
1503 if (mode & S_IFDIR)
1504 owner = 0;
1505 else
1506 owner = 1;
1507 group = btrfs_find_block_group(root, group, 0, 0, owner);

--- 170 unchanged lines hidden (view full) ---

1678 btrfs_set_trans_block_group(trans, inode);
1679 err = btrfs_add_nondir(trans, dentry, inode);
1680 if (err)
1681 drop_inode = 1;
1682 else {
1683 inode->i_mapping->a_ops = &btrfs_aops;
1684 inode->i_fop = &btrfs_file_operations;
1685 inode->i_op = &btrfs_file_inode_operations;
1675 extent_map_tree_init(&BTRFS_I(inode)->extent_tree,
1686 extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS);
1687 extent_io_tree_init(&BTRFS_I(inode)->io_tree,
1676 inode->i_mapping, GFP_NOFS);
1688 inode->i_mapping, GFP_NOFS);
1677 BTRFS_I(inode)->extent_tree.ops = &btrfs_extent_map_ops;
1689 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
1678 }
1679 dir->i_sb->s_dirt = 1;
1680 btrfs_update_inode_block_group(trans, inode);
1681 btrfs_update_inode_block_group(trans, dir);
1682out_unlock:
1683 nr = trans->blocks_used;
1684 btrfs_end_transaction(trans, root);
1685fail:

--- 125 unchanged lines hidden (view full) ---

1811 if (drop_on_err)
1812 iput(inode);
1813 btrfs_btree_balance_dirty(root, nr);
1814 btrfs_throttle(root);
1815 return err;
1816}
1817
1818struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
1690 }
1691 dir->i_sb->s_dirt = 1;
1692 btrfs_update_inode_block_group(trans, inode);
1693 btrfs_update_inode_block_group(trans, dir);
1694out_unlock:
1695 nr = trans->blocks_used;
1696 btrfs_end_transaction(trans, root);
1697fail:

--- 125 unchanged lines hidden (view full) ---

1823 if (drop_on_err)
1824 iput(inode);
1825 btrfs_btree_balance_dirty(root, nr);
1826 btrfs_throttle(root);
1827 return err;
1828}
1829
1830struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
1819 size_t page_offset, u64 start, u64 end,
1831 size_t page_offset, u64 start, u64 len,
1820 int create)
1821{
1822 int ret;
1823 int err = 0;
1824 u64 bytenr;
1825 u64 extent_start = 0;
1826 u64 extent_end = 0;
1827 u64 objectid = inode->i_ino;
1828 u32 found_type;
1832 int create)
1833{
1834 int ret;
1835 int err = 0;
1836 u64 bytenr;
1837 u64 extent_start = 0;
1838 u64 extent_end = 0;
1839 u64 objectid = inode->i_ino;
1840 u32 found_type;
1829 int failed_insert = 0;
1830 struct btrfs_path *path;
1831 struct btrfs_root *root = BTRFS_I(inode)->root;
1832 struct btrfs_file_extent_item *item;
1833 struct extent_buffer *leaf;
1834 struct btrfs_key found_key;
1835 struct extent_map *em = NULL;
1836 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
1841 struct btrfs_path *path;
1842 struct btrfs_root *root = BTRFS_I(inode)->root;
1843 struct btrfs_file_extent_item *item;
1844 struct extent_buffer *leaf;
1845 struct btrfs_key found_key;
1846 struct extent_map *em = NULL;
1847 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
1848 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
1837 struct btrfs_trans_handle *trans = NULL;
1838
1839 path = btrfs_alloc_path();
1840 BUG_ON(!path);
1841 mutex_lock(&root->fs_info->fs_mutex);
1842
1843again:
1849 struct btrfs_trans_handle *trans = NULL;
1850
1851 path = btrfs_alloc_path();
1852 BUG_ON(!path);
1853 mutex_lock(&root->fs_info->fs_mutex);
1854
1855again:
1844 em = lookup_extent_mapping(em_tree, start, end);
1856 spin_lock(&em_tree->lock);
1857 em = lookup_extent_mapping(em_tree, start, len);
1858 spin_unlock(&em_tree->lock);
1859
1845 if (em) {
1846 if (em->start > start) {
1860 if (em) {
1861 if (em->start > start) {
1847 printk("get_extent start %Lu em start %Lu\n",
1848 start, em->start);
1862 printk("get_extent lookup [%Lu %Lu] em [%Lu %Lu]\n",
1863 start, len, em->start, em->len);
1849 WARN_ON(1);
1850 }
1851 goto out;
1852 }
1864 WARN_ON(1);
1865 }
1866 goto out;
1867 }
1868 em = alloc_extent_map(GFP_NOFS);
1853 if (!em) {
1869 if (!em) {
1854 em = alloc_extent_map(GFP_NOFS);
1855 if (!em) {
1856 err = -ENOMEM;
1857 goto out;
1858 }
1859 em->start = EXTENT_MAP_HOLE;
1860 em->end = EXTENT_MAP_HOLE;
1870 err = -ENOMEM;
1871 goto out;
1861 }
1872 }
1873
1874 em->start = EXTENT_MAP_HOLE;
1875 em->len = (u64)-1;
1862 em->bdev = inode->i_sb->s_bdev;
1863 ret = btrfs_lookup_file_extent(trans, root, path,
1864 objectid, start, trans != NULL);
1865 if (ret < 0) {
1866 err = ret;
1867 goto out;
1868 }
1869

--- 18 unchanged lines hidden (view full) ---

1888 extent_start = found_key.offset;
1889 if (found_type == BTRFS_FILE_EXTENT_REG) {
1890 extent_end = extent_start +
1891 btrfs_file_extent_num_bytes(leaf, item);
1892 err = 0;
1893 if (start < extent_start || start >= extent_end) {
1894 em->start = start;
1895 if (start < extent_start) {
1876 em->bdev = inode->i_sb->s_bdev;
1877 ret = btrfs_lookup_file_extent(trans, root, path,
1878 objectid, start, trans != NULL);
1879 if (ret < 0) {
1880 err = ret;
1881 goto out;
1882 }
1883

--- 18 unchanged lines hidden (view full) ---

1902 extent_start = found_key.offset;
1903 if (found_type == BTRFS_FILE_EXTENT_REG) {
1904 extent_end = extent_start +
1905 btrfs_file_extent_num_bytes(leaf, item);
1906 err = 0;
1907 if (start < extent_start || start >= extent_end) {
1908 em->start = start;
1909 if (start < extent_start) {
1896 if (end < extent_start)
1910 if (start + len <= extent_start)
1897 goto not_found;
1911 goto not_found;
1898 em->end = extent_end - 1;
1912 em->len = extent_end - extent_start;
1899 } else {
1913 } else {
1900 em->end = end;
1914 em->len = len;
1901 }
1902 goto not_found_em;
1903 }
1904 bytenr = btrfs_file_extent_disk_bytenr(leaf, item);
1905 if (bytenr == 0) {
1906 em->start = extent_start;
1915 }
1916 goto not_found_em;
1917 }
1918 bytenr = btrfs_file_extent_disk_bytenr(leaf, item);
1919 if (bytenr == 0) {
1920 em->start = extent_start;
1907 em->end = extent_end - 1;
1921 em->len = extent_end - extent_start;
1908 em->block_start = EXTENT_MAP_HOLE;
1922 em->block_start = EXTENT_MAP_HOLE;
1909 em->block_end = EXTENT_MAP_HOLE;
1910 goto insert;
1911 }
1912 bytenr += btrfs_file_extent_offset(leaf, item);
1913 em->block_start = bytenr;
1923 goto insert;
1924 }
1925 bytenr += btrfs_file_extent_offset(leaf, item);
1926 em->block_start = bytenr;
1914 em->block_end = em->block_start +
1915 btrfs_file_extent_num_bytes(leaf, item) - 1;
1916 em->start = extent_start;
1927 em->start = extent_start;
1917 em->end = extent_end - 1;
1928 em->len = extent_end - extent_start;
1918 goto insert;
1919 } else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
1920 unsigned long ptr;
1921 char *map;
1922 size_t size;
1923 size_t extent_offset;
1924 size_t copy_size;
1925
1926 size = btrfs_file_extent_inline_len(leaf, btrfs_item_nr(leaf,
1927 path->slots[0]));
1929 goto insert;
1930 } else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
1931 unsigned long ptr;
1932 char *map;
1933 size_t size;
1934 size_t extent_offset;
1935 size_t copy_size;
1936
1937 size = btrfs_file_extent_inline_len(leaf, btrfs_item_nr(leaf,
1938 path->slots[0]));
1928 extent_end = (extent_start + size - 1) |
1929 ((u64)root->sectorsize - 1);
1939 extent_end = (extent_start + size + root->sectorsize - 1) &
1940 ~((u64)root->sectorsize - 1);
1930 if (start < extent_start || start >= extent_end) {
1931 em->start = start;
1932 if (start < extent_start) {
1941 if (start < extent_start || start >= extent_end) {
1942 em->start = start;
1943 if (start < extent_start) {
1933 if (end < extent_start)
1944 if (start + len <= extent_start)
1934 goto not_found;
1945 goto not_found;
1935 em->end = extent_end;
1946 em->len = extent_end - extent_start;
1936 } else {
1947 } else {
1937 em->end = end;
1948 em->len = len;
1938 }
1939 goto not_found_em;
1940 }
1941 em->block_start = EXTENT_MAP_INLINE;
1949 }
1950 goto not_found_em;
1951 }
1952 em->block_start = EXTENT_MAP_INLINE;
1942 em->block_end = EXTENT_MAP_INLINE;
1943
1944 if (!page) {
1945 em->start = extent_start;
1953
1954 if (!page) {
1955 em->start = extent_start;
1946 em->end = extent_start + size - 1;
1956 em->len = size;
1947 goto out;
1948 }
1949
1950 extent_offset = ((u64)page->index << PAGE_CACHE_SHIFT) -
1951 extent_start + page_offset;
1952 copy_size = min_t(u64, PAGE_CACHE_SIZE - page_offset,
1953 size - extent_offset);
1954 em->start = extent_start + extent_offset;
1957 goto out;
1958 }
1959
1960 extent_offset = ((u64)page->index << PAGE_CACHE_SHIFT) -
1961 extent_start + page_offset;
1962 copy_size = min_t(u64, PAGE_CACHE_SIZE - page_offset,
1963 size - extent_offset);
1964 em->start = extent_start + extent_offset;
1955 em->end = (em->start + copy_size -1) |
1956 ((u64)root->sectorsize -1);
1965 em->len = copy_size;
1957 map = kmap(page);
1958 ptr = btrfs_file_extent_inline_start(item) + extent_offset;
1959 if (create == 0 && !PageUptodate(page)) {
1960 read_extent_buffer(leaf, map + page_offset, ptr,
1961 copy_size);
1962 flush_dcache_page(page);
1963 } else if (create && PageUptodate(page)) {
1964 if (!trans) {

--- 4 unchanged lines hidden (view full) ---

1969 trans = btrfs_start_transaction(root, 1);
1970 goto again;
1971 }
1972 write_extent_buffer(leaf, map + page_offset, ptr,
1973 copy_size);
1974 btrfs_mark_buffer_dirty(leaf);
1975 }
1976 kunmap(page);
1966 map = kmap(page);
1967 ptr = btrfs_file_extent_inline_start(item) + extent_offset;
1968 if (create == 0 && !PageUptodate(page)) {
1969 read_extent_buffer(leaf, map + page_offset, ptr,
1970 copy_size);
1971 flush_dcache_page(page);
1972 } else if (create && PageUptodate(page)) {
1973 if (!trans) {

--- 4 unchanged lines hidden (view full) ---

1978 trans = btrfs_start_transaction(root, 1);
1979 goto again;
1980 }
1981 write_extent_buffer(leaf, map + page_offset, ptr,
1982 copy_size);
1983 btrfs_mark_buffer_dirty(leaf);
1984 }
1985 kunmap(page);
1977 set_extent_uptodate(em_tree, em->start, em->end, GFP_NOFS);
1986 set_extent_uptodate(io_tree, em->start,
1987 extent_map_end(em) - 1, GFP_NOFS);
1978 goto insert;
1979 } else {
1980 printk("unkknown found_type %d\n", found_type);
1981 WARN_ON(1);
1982 }
1983not_found:
1984 em->start = start;
1988 goto insert;
1989 } else {
1990 printk("unkknown found_type %d\n", found_type);
1991 WARN_ON(1);
1992 }
1993not_found:
1994 em->start = start;
1985 em->end = end;
1995 em->len = len;
1986not_found_em:
1987 em->block_start = EXTENT_MAP_HOLE;
1996not_found_em:
1997 em->block_start = EXTENT_MAP_HOLE;
1988 em->block_end = EXTENT_MAP_HOLE;
1989insert:
1990 btrfs_release_path(root, path);
1998insert:
1999 btrfs_release_path(root, path);
1991 if (em->start > start || em->end < start) {
1992 printk("bad extent! em: [%Lu %Lu] passed [%Lu %Lu]\n", em->start, em->end, start, end);
2000 if (em->start > start || extent_map_end(em) <= start) {
2001 printk("bad extent! em: [%Lu %Lu] passed [%Lu %Lu]\n", em->start, em->len, start, len);
1993 err = -EIO;
1994 goto out;
1995 }
2002 err = -EIO;
2003 goto out;
2004 }
2005
2006 err = 0;
2007 spin_lock(&em_tree->lock);
1996 ret = add_extent_mapping(em_tree, em);
1997 if (ret == -EEXIST) {
1998 free_extent_map(em);
2008 ret = add_extent_mapping(em_tree, em);
2009 if (ret == -EEXIST) {
2010 free_extent_map(em);
1999 em = NULL;
2000 if (0 && failed_insert == 1) {
2001 btrfs_drop_extent_cache(inode, start, end);
2002 }
2003 failed_insert++;
2004 if (failed_insert > 5) {
2005 printk("failing to insert %Lu %Lu\n", start, end);
2011 em = lookup_extent_mapping(em_tree, start, len);
2012 if (!em) {
2006 err = -EIO;
2013 err = -EIO;
2007 goto out;
2014 printk("failing to insert %Lu %Lu\n", start, len);
2008 }
2015 }
2009 goto again;
2010 }
2016 }
2011 err = 0;
2017 spin_unlock(&em_tree->lock);
2012out:
2013 btrfs_free_path(path);
2014 if (trans) {
2015 ret = btrfs_end_transaction(trans, root);
2016 if (!err)
2017 err = ret;
2018 }
2019 mutex_unlock(&root->fs_info->fs_mutex);

--- 7 unchanged lines hidden (view full) ---

2027
2028static sector_t btrfs_bmap(struct address_space *mapping, sector_t iblock)
2029{
2030 return extent_bmap(mapping, iblock, btrfs_get_extent);
2031}
2032
2033int btrfs_readpage(struct file *file, struct page *page)
2034{
2018out:
2019 btrfs_free_path(path);
2020 if (trans) {
2021 ret = btrfs_end_transaction(trans, root);
2022 if (!err)
2023 err = ret;
2024 }
2025 mutex_unlock(&root->fs_info->fs_mutex);

--- 7 unchanged lines hidden (view full) ---

2033
2034static sector_t btrfs_bmap(struct address_space *mapping, sector_t iblock)
2035{
2036 return extent_bmap(mapping, iblock, btrfs_get_extent);
2037}
2038
2039int btrfs_readpage(struct file *file, struct page *page)
2040{
2035 struct extent_map_tree *tree;
2036 tree = &BTRFS_I(page->mapping->host)->extent_tree;
2041 struct extent_io_tree *tree;
2042 tree = &BTRFS_I(page->mapping->host)->io_tree;
2037 return extent_read_full_page(tree, page, btrfs_get_extent);
2038}
2039
2040static int btrfs_writepage(struct page *page, struct writeback_control *wbc)
2041{
2043 return extent_read_full_page(tree, page, btrfs_get_extent);
2044}
2045
2046static int btrfs_writepage(struct page *page, struct writeback_control *wbc)
2047{
2042 struct extent_map_tree *tree;
2048 struct extent_io_tree *tree;
2043
2044
2045 if (current->flags & PF_MEMALLOC) {
2046 redirty_page_for_writepage(wbc, page);
2047 unlock_page(page);
2048 return 0;
2049 }
2049
2050
2051 if (current->flags & PF_MEMALLOC) {
2052 redirty_page_for_writepage(wbc, page);
2053 unlock_page(page);
2054 return 0;
2055 }
2050 tree = &BTRFS_I(page->mapping->host)->extent_tree;
2056 tree = &BTRFS_I(page->mapping->host)->io_tree;
2051 return extent_write_full_page(tree, page, btrfs_get_extent, wbc);
2052}
2053
2054static int btrfs_writepages(struct address_space *mapping,
2055 struct writeback_control *wbc)
2056{
2057 return extent_write_full_page(tree, page, btrfs_get_extent, wbc);
2058}
2059
2060static int btrfs_writepages(struct address_space *mapping,
2061 struct writeback_control *wbc)
2062{
2057 struct extent_map_tree *tree;
2058 tree = &BTRFS_I(mapping->host)->extent_tree;
2063 struct extent_io_tree *tree;
2064 tree = &BTRFS_I(mapping->host)->io_tree;
2059 return extent_writepages(tree, mapping, btrfs_get_extent, wbc);
2060}
2061
2062static int
2063btrfs_readpages(struct file *file, struct address_space *mapping,
2064 struct list_head *pages, unsigned nr_pages)
2065{
2065 return extent_writepages(tree, mapping, btrfs_get_extent, wbc);
2066}
2067
2068static int
2069btrfs_readpages(struct file *file, struct address_space *mapping,
2070 struct list_head *pages, unsigned nr_pages)
2071{
2066 struct extent_map_tree *tree;
2067 tree = &BTRFS_I(mapping->host)->extent_tree;
2072 struct extent_io_tree *tree;
2073 tree = &BTRFS_I(mapping->host)->io_tree;
2068 return extent_readpages(tree, mapping, pages, nr_pages,
2069 btrfs_get_extent);
2070}
2071
2072static int btrfs_releasepage(struct page *page, gfp_t unused_gfp_flags)
2073{
2074 return extent_readpages(tree, mapping, pages, nr_pages,
2075 btrfs_get_extent);
2076}
2077
2078static int btrfs_releasepage(struct page *page, gfp_t unused_gfp_flags)
2079{
2074 struct extent_map_tree *tree;
2080 struct extent_io_tree *tree;
2081 struct extent_map_tree *map;
2075 int ret;
2076
2082 int ret;
2083
2077 tree = &BTRFS_I(page->mapping->host)->extent_tree;
2078 ret = try_release_extent_mapping(tree, page);
2084 tree = &BTRFS_I(page->mapping->host)->io_tree;
2085 map = &BTRFS_I(page->mapping->host)->extent_tree;
2086 ret = try_release_extent_mapping(map, tree, page);
2079 if (ret == 1) {
2080 ClearPagePrivate(page);
2081 set_page_private(page, 0);
2082 page_cache_release(page);
2083 }
2084 return ret;
2085}
2086
2087static void btrfs_invalidatepage(struct page *page, unsigned long offset)
2088{
2087 if (ret == 1) {
2088 ClearPagePrivate(page);
2089 set_page_private(page, 0);
2090 page_cache_release(page);
2091 }
2092 return ret;
2093}
2094
2095static void btrfs_invalidatepage(struct page *page, unsigned long offset)
2096{
2089 struct extent_map_tree *tree;
2097 struct extent_io_tree *tree;
2090
2098
2091 tree = &BTRFS_I(page->mapping->host)->extent_tree;
2099 tree = &BTRFS_I(page->mapping->host)->io_tree;
2092 extent_invalidatepage(tree, page, offset);
2093 btrfs_releasepage(page, GFP_NOFS);
2094}
2095
2096/*
2097 * btrfs_page_mkwrite() is not allowed to change the file size as it gets
2098 * called from a page fault handler when a page is first dirtied. Hence we must
2099 * be careful to check for EOF conditions here. We set the page up correctly

--- 269 unchanged lines hidden (view full) ---

2369 page_cache_sync_readahead(mapping, ra, file, offset, req_size);
2370 return offset + req_size;
2371#endif
2372}
2373
2374int btrfs_defrag_file(struct file *file) {
2375 struct inode *inode = fdentry(file)->d_inode;
2376 struct btrfs_root *root = BTRFS_I(inode)->root;
2100 extent_invalidatepage(tree, page, offset);
2101 btrfs_releasepage(page, GFP_NOFS);
2102}
2103
2104/*
2105 * btrfs_page_mkwrite() is not allowed to change the file size as it gets
2106 * called from a page fault handler when a page is first dirtied. Hence we must
2107 * be careful to check for EOF conditions here. We set the page up correctly

--- 269 unchanged lines hidden (view full) ---

2377 page_cache_sync_readahead(mapping, ra, file, offset, req_size);
2378 return offset + req_size;
2379#endif
2380}
2381
2382int btrfs_defrag_file(struct file *file) {
2383 struct inode *inode = fdentry(file)->d_inode;
2384 struct btrfs_root *root = BTRFS_I(inode)->root;
2377 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree;
2385 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
2378 struct page *page;
2379 unsigned long last_index;
2380 unsigned long ra_index = 0;
2381 u64 page_start;
2382 u64 page_end;
2383 u64 delalloc_start;
2384 u64 existing_delalloc;
2385 unsigned long i;

--- 23 unchanged lines hidden (view full) ---

2409 unlock_page(page);
2410 page_cache_release(page);
2411 goto out_unlock;
2412 }
2413 }
2414 page_start = (u64)page->index << PAGE_CACHE_SHIFT;
2415 page_end = page_start + PAGE_CACHE_SIZE - 1;
2416
2386 struct page *page;
2387 unsigned long last_index;
2388 unsigned long ra_index = 0;
2389 u64 page_start;
2390 u64 page_end;
2391 u64 delalloc_start;
2392 u64 existing_delalloc;
2393 unsigned long i;

--- 23 unchanged lines hidden (view full) ---

2417 unlock_page(page);
2418 page_cache_release(page);
2419 goto out_unlock;
2420 }
2421 }
2422 page_start = (u64)page->index << PAGE_CACHE_SHIFT;
2423 page_end = page_start + PAGE_CACHE_SIZE - 1;
2424
2417 lock_extent(em_tree, page_start, page_end, GFP_NOFS);
2425 lock_extent(io_tree, page_start, page_end, GFP_NOFS);
2418 delalloc_start = page_start;
2419 existing_delalloc =
2426 delalloc_start = page_start;
2427 existing_delalloc =
2420 count_range_bits(&BTRFS_I(inode)->extent_tree,
2428 count_range_bits(&BTRFS_I(inode)->io_tree,
2421 &delalloc_start, page_end,
2422 PAGE_CACHE_SIZE, EXTENT_DELALLOC);
2429 &delalloc_start, page_end,
2430 PAGE_CACHE_SIZE, EXTENT_DELALLOC);
2423 set_extent_delalloc(em_tree, page_start,
2431 set_extent_delalloc(io_tree, page_start,
2424 page_end, GFP_NOFS);
2425
2426 spin_lock(&root->fs_info->delalloc_lock);
2427 root->fs_info->delalloc_bytes += PAGE_CACHE_SIZE -
2428 existing_delalloc;
2429 spin_unlock(&root->fs_info->delalloc_lock);
2430
2432 page_end, GFP_NOFS);
2433
2434 spin_lock(&root->fs_info->delalloc_lock);
2435 root->fs_info->delalloc_bytes += PAGE_CACHE_SIZE -
2436 existing_delalloc;
2437 spin_unlock(&root->fs_info->delalloc_lock);
2438
2431 unlock_extent(em_tree, page_start, page_end, GFP_NOFS);
2439 unlock_extent(io_tree, page_start, page_end, GFP_NOFS);
2432 set_page_dirty(page);
2433 unlock_page(page);
2434 page_cache_release(page);
2435 balance_dirty_pages_ratelimited_nr(inode->i_mapping, 1);
2436 }
2437
2438out_unlock:
2439 mutex_unlock(&inode->i_mutex);

--- 397 unchanged lines hidden (view full) ---

2837 btrfs_set_trans_block_group(trans, inode);
2838 err = btrfs_add_nondir(trans, dentry, inode);
2839 if (err)
2840 drop_inode = 1;
2841 else {
2842 inode->i_mapping->a_ops = &btrfs_aops;
2843 inode->i_fop = &btrfs_file_operations;
2844 inode->i_op = &btrfs_file_inode_operations;
2440 set_page_dirty(page);
2441 unlock_page(page);
2442 page_cache_release(page);
2443 balance_dirty_pages_ratelimited_nr(inode->i_mapping, 1);
2444 }
2445
2446out_unlock:
2447 mutex_unlock(&inode->i_mutex);

--- 397 unchanged lines hidden (view full) ---

2845 btrfs_set_trans_block_group(trans, inode);
2846 err = btrfs_add_nondir(trans, dentry, inode);
2847 if (err)
2848 drop_inode = 1;
2849 else {
2850 inode->i_mapping->a_ops = &btrfs_aops;
2851 inode->i_fop = &btrfs_file_operations;
2852 inode->i_op = &btrfs_file_inode_operations;
2845 extent_map_tree_init(&BTRFS_I(inode)->extent_tree,
2853 extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS);
2854 extent_io_tree_init(&BTRFS_I(inode)->io_tree,
2846 inode->i_mapping, GFP_NOFS);
2855 inode->i_mapping, GFP_NOFS);
2847 BTRFS_I(inode)->extent_tree.ops = &btrfs_extent_map_ops;
2856 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
2848 }
2849 dir->i_sb->s_dirt = 1;
2850 btrfs_update_inode_block_group(trans, inode);
2851 btrfs_update_inode_block_group(trans, dir);
2852 if (drop_inode)
2853 goto out_unlock;
2854
2855 path = btrfs_alloc_path();

--- 73 unchanged lines hidden (view full) ---

2929 .read = generic_read_dir,
2930 .readdir = btrfs_readdir,
2931 .unlocked_ioctl = btrfs_ioctl,
2932#ifdef CONFIG_COMPAT
2933 .compat_ioctl = btrfs_ioctl,
2934#endif
2935};
2936
2857 }
2858 dir->i_sb->s_dirt = 1;
2859 btrfs_update_inode_block_group(trans, inode);
2860 btrfs_update_inode_block_group(trans, dir);
2861 if (drop_inode)
2862 goto out_unlock;
2863
2864 path = btrfs_alloc_path();

--- 73 unchanged lines hidden (view full) ---

2938 .read = generic_read_dir,
2939 .readdir = btrfs_readdir,
2940 .unlocked_ioctl = btrfs_ioctl,
2941#ifdef CONFIG_COMPAT
2942 .compat_ioctl = btrfs_ioctl,
2943#endif
2944};
2945
2937static struct extent_map_ops btrfs_extent_map_ops = {
2946static struct extent_io_ops btrfs_extent_io_ops = {
2938 .fill_delalloc = run_delalloc_range,
2939 .writepage_io_hook = btrfs_writepage_io_hook,
2940 .readpage_io_hook = btrfs_readpage_io_hook,
2941 .readpage_end_io_hook = btrfs_readpage_end_io_hook,
2942};
2943
2944static struct address_space_operations btrfs_aops = {
2945 .readpage = btrfs_readpage,

--- 38 unchanged lines hidden ---
2947 .fill_delalloc = run_delalloc_range,
2948 .writepage_io_hook = btrfs_writepage_io_hook,
2949 .readpage_io_hook = btrfs_readpage_io_hook,
2950 .readpage_end_io_hook = btrfs_readpage_end_io_hook,
2951};
2952
2953static struct address_space_operations btrfs_aops = {
2954 .readpage = btrfs_readpage,

--- 38 unchanged lines hidden ---