aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c357
1 files changed, 296 insertions, 61 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index e9b76bcd1c12..dae12dc7e159 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -62,7 +62,7 @@ static const struct inode_operations btrfs_special_inode_operations;
62static const struct inode_operations btrfs_file_inode_operations; 62static const struct inode_operations btrfs_file_inode_operations;
63static const struct address_space_operations btrfs_aops; 63static const struct address_space_operations btrfs_aops;
64static const struct address_space_operations btrfs_symlink_aops; 64static const struct address_space_operations btrfs_symlink_aops;
65static struct file_operations btrfs_dir_file_operations; 65static const struct file_operations btrfs_dir_file_operations;
66static struct extent_io_ops btrfs_extent_io_ops; 66static struct extent_io_ops btrfs_extent_io_ops;
67 67
68static struct kmem_cache *btrfs_inode_cachep; 68static struct kmem_cache *btrfs_inode_cachep;
@@ -424,9 +424,12 @@ again:
424 * and free up our temp pages. 424 * and free up our temp pages.
425 */ 425 */
426 extent_clear_unlock_delalloc(inode, 426 extent_clear_unlock_delalloc(inode,
427 &BTRFS_I(inode)->io_tree, 427 &BTRFS_I(inode)->io_tree,
428 start, end, NULL, 1, 0, 428 start, end, NULL,
429 0, 1, 1, 1, 0); 429 EXTENT_CLEAR_UNLOCK_PAGE | EXTENT_CLEAR_DIRTY |
430 EXTENT_CLEAR_DELALLOC |
431 EXTENT_CLEAR_ACCOUNTING |
432 EXTENT_SET_WRITEBACK | EXTENT_END_WRITEBACK);
430 ret = 0; 433 ret = 0;
431 goto free_pages_out; 434 goto free_pages_out;
432 } 435 }
@@ -637,11 +640,14 @@ static noinline int submit_compressed_extents(struct inode *inode,
637 * clear dirty, set writeback and unlock the pages. 640 * clear dirty, set writeback and unlock the pages.
638 */ 641 */
639 extent_clear_unlock_delalloc(inode, 642 extent_clear_unlock_delalloc(inode,
640 &BTRFS_I(inode)->io_tree, 643 &BTRFS_I(inode)->io_tree,
641 async_extent->start, 644 async_extent->start,
642 async_extent->start + 645 async_extent->start +
643 async_extent->ram_size - 1, 646 async_extent->ram_size - 1,
644 NULL, 1, 1, 0, 1, 1, 0, 0); 647 NULL, EXTENT_CLEAR_UNLOCK_PAGE |
648 EXTENT_CLEAR_UNLOCK |
649 EXTENT_CLEAR_DELALLOC |
650 EXTENT_CLEAR_DIRTY | EXTENT_SET_WRITEBACK);
645 651
646 ret = btrfs_submit_compressed_write(inode, 652 ret = btrfs_submit_compressed_write(inode,
647 async_extent->start, 653 async_extent->start,
@@ -712,9 +718,15 @@ static noinline int cow_file_range(struct inode *inode,
712 start, end, 0, NULL); 718 start, end, 0, NULL);
713 if (ret == 0) { 719 if (ret == 0) {
714 extent_clear_unlock_delalloc(inode, 720 extent_clear_unlock_delalloc(inode,
715 &BTRFS_I(inode)->io_tree, 721 &BTRFS_I(inode)->io_tree,
716 start, end, NULL, 1, 1, 722 start, end, NULL,
717 1, 1, 1, 1, 0); 723 EXTENT_CLEAR_UNLOCK_PAGE |
724 EXTENT_CLEAR_UNLOCK |
725 EXTENT_CLEAR_DELALLOC |
726 EXTENT_CLEAR_ACCOUNTING |
727 EXTENT_CLEAR_DIRTY |
728 EXTENT_SET_WRITEBACK |
729 EXTENT_END_WRITEBACK);
718 *nr_written = *nr_written + 730 *nr_written = *nr_written +
719 (end - start + PAGE_CACHE_SIZE) / PAGE_CACHE_SIZE; 731 (end - start + PAGE_CACHE_SIZE) / PAGE_CACHE_SIZE;
720 *page_started = 1; 732 *page_started = 1;
@@ -738,6 +750,8 @@ static noinline int cow_file_range(struct inode *inode,
738 btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); 750 btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0);
739 751
740 while (disk_num_bytes > 0) { 752 while (disk_num_bytes > 0) {
753 unsigned long op;
754
741 cur_alloc_size = min(disk_num_bytes, root->fs_info->max_extent); 755 cur_alloc_size = min(disk_num_bytes, root->fs_info->max_extent);
742 ret = btrfs_reserve_extent(trans, root, cur_alloc_size, 756 ret = btrfs_reserve_extent(trans, root, cur_alloc_size,
743 root->sectorsize, 0, alloc_hint, 757 root->sectorsize, 0, alloc_hint,
@@ -789,10 +803,13 @@ static noinline int cow_file_range(struct inode *inode,
789 * Do set the Private2 bit so we know this page was properly 803 * Do set the Private2 bit so we know this page was properly
790 * setup for writepage 804 * setup for writepage
791 */ 805 */
806 op = unlock ? EXTENT_CLEAR_UNLOCK_PAGE : 0;
807 op |= EXTENT_CLEAR_UNLOCK | EXTENT_CLEAR_DELALLOC |
808 EXTENT_SET_PRIVATE2;
809
792 extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree, 810 extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree,
793 start, start + ram_size - 1, 811 start, start + ram_size - 1,
794 locked_page, unlock, 1, 812 locked_page, op);
795 1, 0, 0, 0, 1);
796 disk_num_bytes -= cur_alloc_size; 813 disk_num_bytes -= cur_alloc_size;
797 num_bytes -= cur_alloc_size; 814 num_bytes -= cur_alloc_size;
798 alloc_hint = ins.objectid + ins.offset; 815 alloc_hint = ins.objectid + ins.offset;
@@ -864,8 +881,8 @@ static int cow_file_range_async(struct inode *inode, struct page *locked_page,
864 u64 cur_end; 881 u64 cur_end;
865 int limit = 10 * 1024 * 1042; 882 int limit = 10 * 1024 * 1042;
866 883
867 clear_extent_bit(&BTRFS_I(inode)->io_tree, start, end, EXTENT_LOCKED | 884 clear_extent_bit(&BTRFS_I(inode)->io_tree, start, end, EXTENT_LOCKED,
868 EXTENT_DELALLOC, 1, 0, NULL, GFP_NOFS); 885 1, 0, NULL, GFP_NOFS);
869 while (start < end) { 886 while (start < end) {
870 async_cow = kmalloc(sizeof(*async_cow), GFP_NOFS); 887 async_cow = kmalloc(sizeof(*async_cow), GFP_NOFS);
871 async_cow->inode = inode; 888 async_cow->inode = inode;
@@ -1006,6 +1023,7 @@ next_slot:
1006 1023
1007 if (found_key.offset > cur_offset) { 1024 if (found_key.offset > cur_offset) {
1008 extent_end = found_key.offset; 1025 extent_end = found_key.offset;
1026 extent_type = 0;
1009 goto out_check; 1027 goto out_check;
1010 } 1028 }
1011 1029
@@ -1112,8 +1130,10 @@ out_check:
1112 BUG_ON(ret); 1130 BUG_ON(ret);
1113 1131
1114 extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree, 1132 extent_clear_unlock_delalloc(inode, &BTRFS_I(inode)->io_tree,
1115 cur_offset, cur_offset + num_bytes - 1, 1133 cur_offset, cur_offset + num_bytes - 1,
1116 locked_page, 1, 1, 1, 0, 0, 0, 1); 1134 locked_page, EXTENT_CLEAR_UNLOCK_PAGE |
1135 EXTENT_CLEAR_UNLOCK | EXTENT_CLEAR_DELALLOC |
1136 EXTENT_SET_PRIVATE2);
1117 cur_offset = extent_end; 1137 cur_offset = extent_end;
1118 if (cur_offset > end) 1138 if (cur_offset > end)
1119 break; 1139 break;
@@ -1159,6 +1179,89 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page,
1159 return ret; 1179 return ret;
1160} 1180}
1161 1181
1182static int btrfs_split_extent_hook(struct inode *inode,
1183 struct extent_state *orig, u64 split)
1184{
1185 struct btrfs_root *root = BTRFS_I(inode)->root;
1186 u64 size;
1187
1188 if (!(orig->state & EXTENT_DELALLOC))
1189 return 0;
1190
1191 size = orig->end - orig->start + 1;
1192 if (size > root->fs_info->max_extent) {
1193 u64 num_extents;
1194 u64 new_size;
1195
1196 new_size = orig->end - split + 1;
1197 num_extents = div64_u64(size + root->fs_info->max_extent - 1,
1198 root->fs_info->max_extent);
1199
1200 /*
1201 * if we break a large extent up then leave oustanding_extents
1202 * be, since we've already accounted for the large extent.
1203 */
1204 if (div64_u64(new_size + root->fs_info->max_extent - 1,
1205 root->fs_info->max_extent) < num_extents)
1206 return 0;
1207 }
1208
1209 spin_lock(&BTRFS_I(inode)->accounting_lock);
1210 BTRFS_I(inode)->outstanding_extents++;
1211 spin_unlock(&BTRFS_I(inode)->accounting_lock);
1212
1213 return 0;
1214}
1215
1216/*
1217 * extent_io.c merge_extent_hook, used to track merged delayed allocation
1218 * extents so we can keep track of new extents that are just merged onto old
1219 * extents, such as when we are doing sequential writes, so we can properly
1220 * account for the metadata space we'll need.
1221 */
1222static int btrfs_merge_extent_hook(struct inode *inode,
1223 struct extent_state *new,
1224 struct extent_state *other)
1225{
1226 struct btrfs_root *root = BTRFS_I(inode)->root;
1227 u64 new_size, old_size;
1228 u64 num_extents;
1229
1230 /* not delalloc, ignore it */
1231 if (!(other->state & EXTENT_DELALLOC))
1232 return 0;
1233
1234 old_size = other->end - other->start + 1;
1235 if (new->start < other->start)
1236 new_size = other->end - new->start + 1;
1237 else
1238 new_size = new->end - other->start + 1;
1239
1240 /* we're not bigger than the max, unreserve the space and go */
1241 if (new_size <= root->fs_info->max_extent) {
1242 spin_lock(&BTRFS_I(inode)->accounting_lock);
1243 BTRFS_I(inode)->outstanding_extents--;
1244 spin_unlock(&BTRFS_I(inode)->accounting_lock);
1245 return 0;
1246 }
1247
1248 /*
1249 * If we grew by another max_extent, just return, we want to keep that
1250 * reserved amount.
1251 */
1252 num_extents = div64_u64(old_size + root->fs_info->max_extent - 1,
1253 root->fs_info->max_extent);
1254 if (div64_u64(new_size + root->fs_info->max_extent - 1,
1255 root->fs_info->max_extent) > num_extents)
1256 return 0;
1257
1258 spin_lock(&BTRFS_I(inode)->accounting_lock);
1259 BTRFS_I(inode)->outstanding_extents--;
1260 spin_unlock(&BTRFS_I(inode)->accounting_lock);
1261
1262 return 0;
1263}
1264
1162/* 1265/*
1163 * extent_io.c set_bit_hook, used to track delayed allocation 1266 * extent_io.c set_bit_hook, used to track delayed allocation
1164 * bytes in this file, and to maintain the list of inodes that 1267 * bytes in this file, and to maintain the list of inodes that
@@ -1167,6 +1270,7 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page,
1167static int btrfs_set_bit_hook(struct inode *inode, u64 start, u64 end, 1270static int btrfs_set_bit_hook(struct inode *inode, u64 start, u64 end,
1168 unsigned long old, unsigned long bits) 1271 unsigned long old, unsigned long bits)
1169{ 1272{
1273
1170 /* 1274 /*
1171 * set_bit and clear bit hooks normally require _irqsave/restore 1275 * set_bit and clear bit hooks normally require _irqsave/restore
1172 * but in this case, we are only testeing for the DELALLOC 1276 * but in this case, we are only testeing for the DELALLOC
@@ -1174,6 +1278,10 @@ static int btrfs_set_bit_hook(struct inode *inode, u64 start, u64 end,
1174 */ 1278 */
1175 if (!(old & EXTENT_DELALLOC) && (bits & EXTENT_DELALLOC)) { 1279 if (!(old & EXTENT_DELALLOC) && (bits & EXTENT_DELALLOC)) {
1176 struct btrfs_root *root = BTRFS_I(inode)->root; 1280 struct btrfs_root *root = BTRFS_I(inode)->root;
1281
1282 spin_lock(&BTRFS_I(inode)->accounting_lock);
1283 BTRFS_I(inode)->outstanding_extents++;
1284 spin_unlock(&BTRFS_I(inode)->accounting_lock);
1177 btrfs_delalloc_reserve_space(root, inode, end - start + 1); 1285 btrfs_delalloc_reserve_space(root, inode, end - start + 1);
1178 spin_lock(&root->fs_info->delalloc_lock); 1286 spin_lock(&root->fs_info->delalloc_lock);
1179 BTRFS_I(inode)->delalloc_bytes += end - start + 1; 1287 BTRFS_I(inode)->delalloc_bytes += end - start + 1;
@@ -1190,22 +1298,31 @@ static int btrfs_set_bit_hook(struct inode *inode, u64 start, u64 end,
1190/* 1298/*
1191 * extent_io.c clear_bit_hook, see set_bit_hook for why 1299 * extent_io.c clear_bit_hook, see set_bit_hook for why
1192 */ 1300 */
1193static int btrfs_clear_bit_hook(struct inode *inode, u64 start, u64 end, 1301static int btrfs_clear_bit_hook(struct inode *inode,
1194 unsigned long old, unsigned long bits) 1302 struct extent_state *state, unsigned long bits)
1195{ 1303{
1196 /* 1304 /*
1197 * set_bit and clear bit hooks normally require _irqsave/restore 1305 * set_bit and clear bit hooks normally require _irqsave/restore
1198 * but in this case, we are only testeing for the DELALLOC 1306 * but in this case, we are only testeing for the DELALLOC
1199 * bit, which is only set or cleared with irqs on 1307 * bit, which is only set or cleared with irqs on
1200 */ 1308 */
1201 if ((old & EXTENT_DELALLOC) && (bits & EXTENT_DELALLOC)) { 1309 if ((state->state & EXTENT_DELALLOC) && (bits & EXTENT_DELALLOC)) {
1202 struct btrfs_root *root = BTRFS_I(inode)->root; 1310 struct btrfs_root *root = BTRFS_I(inode)->root;
1203 1311
1312 if (bits & EXTENT_DO_ACCOUNTING) {
1313 spin_lock(&BTRFS_I(inode)->accounting_lock);
1314 BTRFS_I(inode)->outstanding_extents--;
1315 spin_unlock(&BTRFS_I(inode)->accounting_lock);
1316 btrfs_unreserve_metadata_for_delalloc(root, inode, 1);
1317 }
1318
1204 spin_lock(&root->fs_info->delalloc_lock); 1319 spin_lock(&root->fs_info->delalloc_lock);
1205 if (end - start + 1 > root->fs_info->delalloc_bytes) { 1320 if (state->end - state->start + 1 >
1321 root->fs_info->delalloc_bytes) {
1206 printk(KERN_INFO "btrfs warning: delalloc account " 1322 printk(KERN_INFO "btrfs warning: delalloc account "
1207 "%llu %llu\n", 1323 "%llu %llu\n",
1208 (unsigned long long)end - start + 1, 1324 (unsigned long long)
1325 state->end - state->start + 1,
1209 (unsigned long long) 1326 (unsigned long long)
1210 root->fs_info->delalloc_bytes); 1327 root->fs_info->delalloc_bytes);
1211 btrfs_delalloc_free_space(root, inode, (u64)-1); 1328 btrfs_delalloc_free_space(root, inode, (u64)-1);
@@ -1213,9 +1330,12 @@ static int btrfs_clear_bit_hook(struct inode *inode, u64 start, u64 end,
1213 BTRFS_I(inode)->delalloc_bytes = 0; 1330 BTRFS_I(inode)->delalloc_bytes = 0;
1214 } else { 1331 } else {
1215 btrfs_delalloc_free_space(root, inode, 1332 btrfs_delalloc_free_space(root, inode,
1216 end - start + 1); 1333 state->end -
1217 root->fs_info->delalloc_bytes -= end - start + 1; 1334 state->start + 1);
1218 BTRFS_I(inode)->delalloc_bytes -= end - start + 1; 1335 root->fs_info->delalloc_bytes -= state->end -
1336 state->start + 1;
1337 BTRFS_I(inode)->delalloc_bytes -= state->end -
1338 state->start + 1;
1219 } 1339 }
1220 if (BTRFS_I(inode)->delalloc_bytes == 0 && 1340 if (BTRFS_I(inode)->delalloc_bytes == 0 &&
1221 !list_empty(&BTRFS_I(inode)->delalloc_inodes)) { 1341 !list_empty(&BTRFS_I(inode)->delalloc_inodes)) {
@@ -2912,12 +3032,22 @@ static int btrfs_truncate_page(struct address_space *mapping, loff_t from)
2912 3032
2913 if ((offset & (blocksize - 1)) == 0) 3033 if ((offset & (blocksize - 1)) == 0)
2914 goto out; 3034 goto out;
3035 ret = btrfs_check_data_free_space(root, inode, PAGE_CACHE_SIZE);
3036 if (ret)
3037 goto out;
3038
3039 ret = btrfs_reserve_metadata_for_delalloc(root, inode, 1);
3040 if (ret)
3041 goto out;
2915 3042
2916 ret = -ENOMEM; 3043 ret = -ENOMEM;
2917again: 3044again:
2918 page = grab_cache_page(mapping, index); 3045 page = grab_cache_page(mapping, index);
2919 if (!page) 3046 if (!page) {
3047 btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE);
3048 btrfs_unreserve_metadata_for_delalloc(root, inode, 1);
2920 goto out; 3049 goto out;
3050 }
2921 3051
2922 page_start = page_offset(page); 3052 page_start = page_offset(page);
2923 page_end = page_start + PAGE_CACHE_SIZE - 1; 3053 page_end = page_start + PAGE_CACHE_SIZE - 1;
@@ -2950,7 +3080,16 @@ again:
2950 goto again; 3080 goto again;
2951 } 3081 }
2952 3082
2953 btrfs_set_extent_delalloc(inode, page_start, page_end); 3083 clear_extent_bits(&BTRFS_I(inode)->io_tree, page_start, page_end,
3084 EXTENT_DIRTY | EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING,
3085 GFP_NOFS);
3086
3087 ret = btrfs_set_extent_delalloc(inode, page_start, page_end);
3088 if (ret) {
3089 unlock_extent(io_tree, page_start, page_end, GFP_NOFS);
3090 goto out_unlock;
3091 }
3092
2954 ret = 0; 3093 ret = 0;
2955 if (offset != PAGE_CACHE_SIZE) { 3094 if (offset != PAGE_CACHE_SIZE) {
2956 kaddr = kmap(page); 3095 kaddr = kmap(page);
@@ -2963,6 +3102,9 @@ again:
2963 unlock_extent(io_tree, page_start, page_end, GFP_NOFS); 3102 unlock_extent(io_tree, page_start, page_end, GFP_NOFS);
2964 3103
2965out_unlock: 3104out_unlock:
3105 if (ret)
3106 btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE);
3107 btrfs_unreserve_metadata_for_delalloc(root, inode, 1);
2966 unlock_page(page); 3108 unlock_page(page);
2967 page_cache_release(page); 3109 page_cache_release(page);
2968out: 3110out:
@@ -2981,17 +3123,15 @@ int btrfs_cont_expand(struct inode *inode, loff_t size)
2981 u64 last_byte; 3123 u64 last_byte;
2982 u64 cur_offset; 3124 u64 cur_offset;
2983 u64 hole_size; 3125 u64 hole_size;
2984 int err; 3126 int err = 0;
2985 3127
2986 if (size <= hole_start) 3128 if (size <= hole_start)
2987 return 0; 3129 return 0;
2988 3130
2989 err = btrfs_check_metadata_free_space(root); 3131 err = btrfs_truncate_page(inode->i_mapping, inode->i_size);
2990 if (err) 3132 if (err)
2991 return err; 3133 return err;
2992 3134
2993 btrfs_truncate_page(inode->i_mapping, inode->i_size);
2994
2995 while (1) { 3135 while (1) {
2996 struct btrfs_ordered_extent *ordered; 3136 struct btrfs_ordered_extent *ordered;
2997 btrfs_wait_ordered_range(inode, hole_start, 3137 btrfs_wait_ordered_range(inode, hole_start,
@@ -3024,12 +3164,18 @@ int btrfs_cont_expand(struct inode *inode, loff_t size)
3024 cur_offset, &hint_byte, 1); 3164 cur_offset, &hint_byte, 1);
3025 if (err) 3165 if (err)
3026 break; 3166 break;
3167
3168 err = btrfs_reserve_metadata_space(root, 1);
3169 if (err)
3170 break;
3171
3027 err = btrfs_insert_file_extent(trans, root, 3172 err = btrfs_insert_file_extent(trans, root,
3028 inode->i_ino, cur_offset, 0, 3173 inode->i_ino, cur_offset, 0,
3029 0, hole_size, 0, hole_size, 3174 0, hole_size, 0, hole_size,
3030 0, 0, 0); 3175 0, 0, 0);
3031 btrfs_drop_extent_cache(inode, hole_start, 3176 btrfs_drop_extent_cache(inode, hole_start,
3032 last_byte - 1, 0); 3177 last_byte - 1, 0);
3178 btrfs_unreserve_metadata_space(root, 1);
3033 } 3179 }
3034 free_extent_map(em); 3180 free_extent_map(em);
3035 cur_offset = last_byte; 3181 cur_offset = last_byte;
@@ -3353,6 +3499,7 @@ static noinline void init_btrfs_i(struct inode *inode)
3353 bi->generation = 0; 3499 bi->generation = 0;
3354 bi->sequence = 0; 3500 bi->sequence = 0;
3355 bi->last_trans = 0; 3501 bi->last_trans = 0;
3502 bi->last_sub_trans = 0;
3356 bi->logged_trans = 0; 3503 bi->logged_trans = 0;
3357 bi->delalloc_bytes = 0; 3504 bi->delalloc_bytes = 0;
3358 bi->reserved_bytes = 0; 3505 bi->reserved_bytes = 0;
@@ -3503,12 +3650,14 @@ static int btrfs_dentry_delete(struct dentry *dentry)
3503{ 3650{
3504 struct btrfs_root *root; 3651 struct btrfs_root *root;
3505 3652
3506 if (!dentry->d_inode) 3653 if (!dentry->d_inode && !IS_ROOT(dentry))
3507 return 0; 3654 dentry = dentry->d_parent;
3508 3655
3509 root = BTRFS_I(dentry->d_inode)->root; 3656 if (dentry->d_inode) {
3510 if (btrfs_root_refs(&root->root_item) == 0) 3657 root = BTRFS_I(dentry->d_inode)->root;
3511 return 1; 3658 if (btrfs_root_refs(&root->root_item) == 0)
3659 return 1;
3660 }
3512 return 0; 3661 return 0;
3513} 3662}
3514 3663
@@ -3990,11 +4139,18 @@ static int btrfs_mknod(struct inode *dir, struct dentry *dentry,
3990 if (!new_valid_dev(rdev)) 4139 if (!new_valid_dev(rdev))
3991 return -EINVAL; 4140 return -EINVAL;
3992 4141
3993 err = btrfs_check_metadata_free_space(root); 4142 /*
4143 * 2 for inode item and ref
4144 * 2 for dir items
4145 * 1 for xattr if selinux is on
4146 */
4147 err = btrfs_reserve_metadata_space(root, 5);
3994 if (err) 4148 if (err)
3995 goto fail; 4149 return err;
3996 4150
3997 trans = btrfs_start_transaction(root, 1); 4151 trans = btrfs_start_transaction(root, 1);
4152 if (!trans)
4153 goto fail;
3998 btrfs_set_trans_block_group(trans, dir); 4154 btrfs_set_trans_block_group(trans, dir);
3999 4155
4000 err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); 4156 err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid);
@@ -4032,6 +4188,7 @@ out_unlock:
4032 nr = trans->blocks_used; 4188 nr = trans->blocks_used;
4033 btrfs_end_transaction_throttle(trans, root); 4189 btrfs_end_transaction_throttle(trans, root);
4034fail: 4190fail:
4191 btrfs_unreserve_metadata_space(root, 5);
4035 if (drop_inode) { 4192 if (drop_inode) {
4036 inode_dec_link_count(inode); 4193 inode_dec_link_count(inode);
4037 iput(inode); 4194 iput(inode);
@@ -4052,10 +4209,18 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry,
4052 u64 objectid; 4209 u64 objectid;
4053 u64 index = 0; 4210 u64 index = 0;
4054 4211
4055 err = btrfs_check_metadata_free_space(root); 4212 /*
4213 * 2 for inode item and ref
4214 * 2 for dir items
4215 * 1 for xattr if selinux is on
4216 */
4217 err = btrfs_reserve_metadata_space(root, 5);
4056 if (err) 4218 if (err)
4057 goto fail; 4219 return err;
4220
4058 trans = btrfs_start_transaction(root, 1); 4221 trans = btrfs_start_transaction(root, 1);
4222 if (!trans)
4223 goto fail;
4059 btrfs_set_trans_block_group(trans, dir); 4224 btrfs_set_trans_block_group(trans, dir);
4060 4225
4061 err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); 4226 err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid);
@@ -4096,6 +4261,7 @@ out_unlock:
4096 nr = trans->blocks_used; 4261 nr = trans->blocks_used;
4097 btrfs_end_transaction_throttle(trans, root); 4262 btrfs_end_transaction_throttle(trans, root);
4098fail: 4263fail:
4264 btrfs_unreserve_metadata_space(root, 5);
4099 if (drop_inode) { 4265 if (drop_inode) {
4100 inode_dec_link_count(inode); 4266 inode_dec_link_count(inode);
4101 iput(inode); 4267 iput(inode);
@@ -4118,10 +4284,16 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
4118 if (inode->i_nlink == 0) 4284 if (inode->i_nlink == 0)
4119 return -ENOENT; 4285 return -ENOENT;
4120 4286
4121 btrfs_inc_nlink(inode); 4287 /*
4122 err = btrfs_check_metadata_free_space(root); 4288 * 1 item for inode ref
4289 * 2 items for dir items
4290 */
4291 err = btrfs_reserve_metadata_space(root, 3);
4123 if (err) 4292 if (err)
4124 goto fail; 4293 return err;
4294
4295 btrfs_inc_nlink(inode);
4296
4125 err = btrfs_set_inode_index(dir, &index); 4297 err = btrfs_set_inode_index(dir, &index);
4126 if (err) 4298 if (err)
4127 goto fail; 4299 goto fail;
@@ -4145,6 +4317,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
4145 nr = trans->blocks_used; 4317 nr = trans->blocks_used;
4146 btrfs_end_transaction_throttle(trans, root); 4318 btrfs_end_transaction_throttle(trans, root);
4147fail: 4319fail:
4320 btrfs_unreserve_metadata_space(root, 3);
4148 if (drop_inode) { 4321 if (drop_inode) {
4149 inode_dec_link_count(inode); 4322 inode_dec_link_count(inode);
4150 iput(inode); 4323 iput(inode);
@@ -4164,17 +4337,21 @@ static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
4164 u64 index = 0; 4337 u64 index = 0;
4165 unsigned long nr = 1; 4338 unsigned long nr = 1;
4166 4339
4167 err = btrfs_check_metadata_free_space(root); 4340 /*
4341 * 2 items for inode and ref
4342 * 2 items for dir items
4343 * 1 for xattr if selinux is on
4344 */
4345 err = btrfs_reserve_metadata_space(root, 5);
4168 if (err) 4346 if (err)
4169 goto out_unlock; 4347 return err;
4170 4348
4171 trans = btrfs_start_transaction(root, 1); 4349 trans = btrfs_start_transaction(root, 1);
4172 btrfs_set_trans_block_group(trans, dir); 4350 if (!trans) {
4173 4351 err = -ENOMEM;
4174 if (IS_ERR(trans)) {
4175 err = PTR_ERR(trans);
4176 goto out_unlock; 4352 goto out_unlock;
4177 } 4353 }
4354 btrfs_set_trans_block_group(trans, dir);
4178 4355
4179 err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); 4356 err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid);
4180 if (err) { 4357 if (err) {
@@ -4223,6 +4400,7 @@ out_fail:
4223 btrfs_end_transaction_throttle(trans, root); 4400 btrfs_end_transaction_throttle(trans, root);
4224 4401
4225out_unlock: 4402out_unlock:
4403 btrfs_unreserve_metadata_space(root, 5);
4226 if (drop_on_err) 4404 if (drop_on_err)
4227 iput(inode); 4405 iput(inode);
4228 btrfs_btree_balance_dirty(root, nr); 4406 btrfs_btree_balance_dirty(root, nr);
@@ -4684,7 +4862,8 @@ static void btrfs_invalidatepage(struct page *page, unsigned long offset)
4684 */ 4862 */
4685 clear_extent_bit(tree, page_start, page_end, 4863 clear_extent_bit(tree, page_start, page_end,
4686 EXTENT_DIRTY | EXTENT_DELALLOC | 4864 EXTENT_DIRTY | EXTENT_DELALLOC |
4687 EXTENT_LOCKED, 1, 0, NULL, GFP_NOFS); 4865 EXTENT_LOCKED | EXTENT_DO_ACCOUNTING, 1, 0,
4866 NULL, GFP_NOFS);
4688 /* 4867 /*
4689 * whoever cleared the private bit is responsible 4868 * whoever cleared the private bit is responsible
4690 * for the finish_ordered_io 4869 * for the finish_ordered_io
@@ -4697,8 +4876,8 @@ static void btrfs_invalidatepage(struct page *page, unsigned long offset)
4697 lock_extent(tree, page_start, page_end, GFP_NOFS); 4876 lock_extent(tree, page_start, page_end, GFP_NOFS);
4698 } 4877 }
4699 clear_extent_bit(tree, page_start, page_end, 4878 clear_extent_bit(tree, page_start, page_end,
4700 EXTENT_LOCKED | EXTENT_DIRTY | EXTENT_DELALLOC, 4879 EXTENT_LOCKED | EXTENT_DIRTY | EXTENT_DELALLOC |
4701 1, 1, NULL, GFP_NOFS); 4880 EXTENT_DO_ACCOUNTING, 1, 1, NULL, GFP_NOFS);
4702 __btrfs_releasepage(page, GFP_NOFS); 4881 __btrfs_releasepage(page, GFP_NOFS);
4703 4882
4704 ClearPageChecked(page); 4883 ClearPageChecked(page);
@@ -4747,6 +4926,13 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
4747 goto out; 4926 goto out;
4748 } 4927 }
4749 4928
4929 ret = btrfs_reserve_metadata_for_delalloc(root, inode, 1);
4930 if (ret) {
4931 btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE);
4932 ret = VM_FAULT_SIGBUS;
4933 goto out;
4934 }
4935
4750 ret = VM_FAULT_NOPAGE; /* make the VM retry the fault */ 4936 ret = VM_FAULT_NOPAGE; /* make the VM retry the fault */
4751again: 4937again:
4752 lock_page(page); 4938 lock_page(page);
@@ -4778,7 +4964,24 @@ again:
4778 goto again; 4964 goto again;
4779 } 4965 }
4780 4966
4781 btrfs_set_extent_delalloc(inode, page_start, page_end); 4967 /*
4968 * XXX - page_mkwrite gets called every time the page is dirtied, even
4969 * if it was already dirty, so for space accounting reasons we need to
4970 * clear any delalloc bits for the range we are fixing to save. There
4971 * is probably a better way to do this, but for now keep consistent with
4972 * prepare_pages in the normal write path.
4973 */
4974 clear_extent_bits(&BTRFS_I(inode)->io_tree, page_start, page_end,
4975 EXTENT_DIRTY | EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING,
4976 GFP_NOFS);
4977
4978 ret = btrfs_set_extent_delalloc(inode, page_start, page_end);
4979 if (ret) {
4980 unlock_extent(io_tree, page_start, page_end, GFP_NOFS);
4981 ret = VM_FAULT_SIGBUS;
4982 btrfs_free_reserved_data_space(root, inode, PAGE_CACHE_SIZE);
4983 goto out_unlock;
4984 }
4782 ret = 0; 4985 ret = 0;
4783 4986
4784 /* page is wholly or partially inside EOF */ 4987 /* page is wholly or partially inside EOF */
@@ -4797,10 +5000,13 @@ again:
4797 set_page_dirty(page); 5000 set_page_dirty(page);
4798 SetPageUptodate(page); 5001 SetPageUptodate(page);
4799 5002
4800 BTRFS_I(inode)->last_trans = root->fs_info->generation + 1; 5003 BTRFS_I(inode)->last_trans = root->fs_info->generation;
5004 BTRFS_I(inode)->last_sub_trans = BTRFS_I(inode)->root->log_transid;
5005
4801 unlock_extent(io_tree, page_start, page_end, GFP_NOFS); 5006 unlock_extent(io_tree, page_start, page_end, GFP_NOFS);
4802 5007
4803out_unlock: 5008out_unlock:
5009 btrfs_unreserve_metadata_for_delalloc(root, inode, 1);
4804 if (!ret) 5010 if (!ret)
4805 return VM_FAULT_LOCKED; 5011 return VM_FAULT_LOCKED;
4806 unlock_page(page); 5012 unlock_page(page);
@@ -4821,7 +5027,9 @@ static void btrfs_truncate(struct inode *inode)
4821 if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) 5027 if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
4822 return; 5028 return;
4823 5029
4824 btrfs_truncate_page(inode->i_mapping, inode->i_size); 5030 ret = btrfs_truncate_page(inode->i_mapping, inode->i_size);
5031 if (ret)
5032 return;
4825 btrfs_wait_ordered_range(inode, inode->i_size & (~mask), (u64)-1); 5033 btrfs_wait_ordered_range(inode, inode->i_size & (~mask), (u64)-1);
4826 5034
4827 trans = btrfs_start_transaction(root, 1); 5035 trans = btrfs_start_transaction(root, 1);
@@ -4916,7 +5124,11 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)
4916 if (!ei) 5124 if (!ei)
4917 return NULL; 5125 return NULL;
4918 ei->last_trans = 0; 5126 ei->last_trans = 0;
5127 ei->last_sub_trans = 0;
4919 ei->logged_trans = 0; 5128 ei->logged_trans = 0;
5129 ei->outstanding_extents = 0;
5130 ei->reserved_extents = 0;
5131 spin_lock_init(&ei->accounting_lock);
4920 btrfs_ordered_inode_tree_init(&ei->ordered_tree); 5132 btrfs_ordered_inode_tree_init(&ei->ordered_tree);
4921 INIT_LIST_HEAD(&ei->i_orphan); 5133 INIT_LIST_HEAD(&ei->i_orphan);
4922 INIT_LIST_HEAD(&ei->ordered_operations); 5134 INIT_LIST_HEAD(&ei->ordered_operations);
@@ -5070,7 +5282,12 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
5070 new_inode->i_size > BTRFS_EMPTY_DIR_SIZE) 5282 new_inode->i_size > BTRFS_EMPTY_DIR_SIZE)
5071 return -ENOTEMPTY; 5283 return -ENOTEMPTY;
5072 5284
5073 ret = btrfs_check_metadata_free_space(root); 5285 /*
5286 * 2 items for dir items
5287 * 1 item for orphan entry
5288 * 1 item for ref
5289 */
5290 ret = btrfs_reserve_metadata_space(root, 4);
5074 if (ret) 5291 if (ret)
5075 return ret; 5292 return ret;
5076 5293
@@ -5185,6 +5402,8 @@ out_fail:
5185 5402
5186 if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID) 5403 if (old_inode->i_ino == BTRFS_FIRST_FREE_OBJECTID)
5187 up_read(&root->fs_info->subvol_sem); 5404 up_read(&root->fs_info->subvol_sem);
5405
5406 btrfs_unreserve_metadata_space(root, 4);
5188 return ret; 5407 return ret;
5189} 5408}
5190 5409
@@ -5256,11 +5475,18 @@ static int btrfs_symlink(struct inode *dir, struct dentry *dentry,
5256 if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root)) 5475 if (name_len > BTRFS_MAX_INLINE_DATA_SIZE(root))
5257 return -ENAMETOOLONG; 5476 return -ENAMETOOLONG;
5258 5477
5259 err = btrfs_check_metadata_free_space(root); 5478 /*
5479 * 2 items for inode item and ref
5480 * 2 items for dir items
5481 * 1 item for xattr if selinux is on
5482 */
5483 err = btrfs_reserve_metadata_space(root, 5);
5260 if (err) 5484 if (err)
5261 goto out_fail; 5485 return err;
5262 5486
5263 trans = btrfs_start_transaction(root, 1); 5487 trans = btrfs_start_transaction(root, 1);
5488 if (!trans)
5489 goto out_fail;
5264 btrfs_set_trans_block_group(trans, dir); 5490 btrfs_set_trans_block_group(trans, dir);
5265 5491
5266 err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid); 5492 err = btrfs_find_free_objectid(trans, root, dir->i_ino, &objectid);
@@ -5341,6 +5567,7 @@ out_unlock:
5341 nr = trans->blocks_used; 5567 nr = trans->blocks_used;
5342 btrfs_end_transaction_throttle(trans, root); 5568 btrfs_end_transaction_throttle(trans, root);
5343out_fail: 5569out_fail:
5570 btrfs_unreserve_metadata_space(root, 5);
5344 if (drop_inode) { 5571 if (drop_inode) {
5345 inode_dec_link_count(inode); 5572 inode_dec_link_count(inode);
5346 iput(inode); 5573 iput(inode);
@@ -5362,6 +5589,11 @@ static int prealloc_file_range(struct btrfs_trans_handle *trans,
5362 5589
5363 while (num_bytes > 0) { 5590 while (num_bytes > 0) {
5364 alloc_size = min(num_bytes, root->fs_info->max_extent); 5591 alloc_size = min(num_bytes, root->fs_info->max_extent);
5592
5593 ret = btrfs_reserve_metadata_space(root, 1);
5594 if (ret)
5595 goto out;
5596
5365 ret = btrfs_reserve_extent(trans, root, alloc_size, 5597 ret = btrfs_reserve_extent(trans, root, alloc_size,
5366 root->sectorsize, 0, alloc_hint, 5598 root->sectorsize, 0, alloc_hint,
5367 (u64)-1, &ins, 1); 5599 (u64)-1, &ins, 1);
@@ -5381,6 +5613,7 @@ static int prealloc_file_range(struct btrfs_trans_handle *trans,
5381 num_bytes -= ins.offset; 5613 num_bytes -= ins.offset;
5382 cur_offset += ins.offset; 5614 cur_offset += ins.offset;
5383 alloc_hint = ins.objectid + ins.offset; 5615 alloc_hint = ins.objectid + ins.offset;
5616 btrfs_unreserve_metadata_space(root, 1);
5384 } 5617 }
5385out: 5618out:
5386 if (cur_offset > start) { 5619 if (cur_offset > start) {
@@ -5544,7 +5777,7 @@ static const struct inode_operations btrfs_dir_ro_inode_operations = {
5544 .permission = btrfs_permission, 5777 .permission = btrfs_permission,
5545}; 5778};
5546 5779
5547static struct file_operations btrfs_dir_file_operations = { 5780static const struct file_operations btrfs_dir_file_operations = {
5548 .llseek = generic_file_llseek, 5781 .llseek = generic_file_llseek,
5549 .read = generic_read_dir, 5782 .read = generic_read_dir,
5550 .readdir = btrfs_real_readdir, 5783 .readdir = btrfs_real_readdir,
@@ -5566,6 +5799,8 @@ static struct extent_io_ops btrfs_extent_io_ops = {
5566 .readpage_io_failed_hook = btrfs_io_failed_hook, 5799 .readpage_io_failed_hook = btrfs_io_failed_hook,
5567 .set_bit_hook = btrfs_set_bit_hook, 5800 .set_bit_hook = btrfs_set_bit_hook,
5568 .clear_bit_hook = btrfs_clear_bit_hook, 5801 .clear_bit_hook = btrfs_clear_bit_hook,
5802 .merge_extent_hook = btrfs_merge_extent_hook,
5803 .split_extent_hook = btrfs_split_extent_hook,
5569}; 5804};
5570 5805
5571/* 5806/*
@@ -5632,6 +5867,6 @@ static const struct inode_operations btrfs_symlink_inode_operations = {
5632 .removexattr = btrfs_removexattr, 5867 .removexattr = btrfs_removexattr,
5633}; 5868};
5634 5869
5635struct dentry_operations btrfs_dentry_operations = { 5870const struct dentry_operations btrfs_dentry_operations = {
5636 .d_delete = btrfs_dentry_delete, 5871 .d_delete = btrfs_dentry_delete,
5637}; 5872};