aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2016-02-26 09:38:33 -0500
committerDavid Sterba <dsterba@suse.com>2016-02-26 09:38:33 -0500
commitf004fae0cfeb96d33240eb5471f14cb6fbbd4eea (patch)
tree8a0cc3be4e031298ef1f6db573c5f57da333737e
parent675d276b322b45e7bf7c616a2847bdc425745b99 (diff)
parentf827ba9a641b481f01d1bdc0771a7afc3776cc0b (diff)
Merge branch 'cleanups-4.6' into for-chris-4.6
-rw-r--r--fs/btrfs/backref.c12
-rw-r--r--fs/btrfs/ctree.h3
-rw-r--r--fs/btrfs/delayed-inode.c3
-rw-r--r--fs/btrfs/delayed-ref.c12
-rw-r--r--fs/btrfs/disk-io.c3
-rw-r--r--fs/btrfs/extent-tree.c2
-rw-r--r--fs/btrfs/extent_io.c37
-rw-r--r--fs/btrfs/extent_io.h5
-rw-r--r--fs/btrfs/extent_map.c3
-rw-r--r--fs/btrfs/file.c7
-rw-r--r--fs/btrfs/inode.c40
-rw-r--r--fs/btrfs/ioctl.c12
-rw-r--r--fs/btrfs/ordered-data.c3
-rw-r--r--fs/btrfs/root-tree.c2
-rw-r--r--fs/btrfs/transaction.c7
-rw-r--r--fs/btrfs/xattr.c2
16 files changed, 64 insertions, 89 deletions
diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
index f6dac40f87ff..80e8472d618b 100644
--- a/fs/btrfs/backref.c
+++ b/fs/btrfs/backref.c
@@ -148,8 +148,7 @@ int __init btrfs_prelim_ref_init(void)
148 148
149void btrfs_prelim_ref_exit(void) 149void btrfs_prelim_ref_exit(void)
150{ 150{
151 if (btrfs_prelim_ref_cache) 151 kmem_cache_destroy(btrfs_prelim_ref_cache);
152 kmem_cache_destroy(btrfs_prelim_ref_cache);
153} 152}
154 153
155/* 154/*
@@ -566,17 +565,14 @@ static void __merge_refs(struct list_head *head, int mode)
566 struct __prelim_ref *pos2 = pos1, *tmp; 565 struct __prelim_ref *pos2 = pos1, *tmp;
567 566
568 list_for_each_entry_safe_continue(pos2, tmp, head, list) { 567 list_for_each_entry_safe_continue(pos2, tmp, head, list) {
569 struct __prelim_ref *xchg, *ref1 = pos1, *ref2 = pos2; 568 struct __prelim_ref *ref1 = pos1, *ref2 = pos2;
570 struct extent_inode_elem *eie; 569 struct extent_inode_elem *eie;
571 570
572 if (!ref_for_same_block(ref1, ref2)) 571 if (!ref_for_same_block(ref1, ref2))
573 continue; 572 continue;
574 if (mode == 1) { 573 if (mode == 1) {
575 if (!ref1->parent && ref2->parent) { 574 if (!ref1->parent && ref2->parent)
576 xchg = ref1; 575 swap(ref1, ref2);
577 ref1 = ref2;
578 ref2 = xchg;
579 }
580 } else { 576 } else {
581 if (ref1->parent != ref2->parent) 577 if (ref1->parent != ref2->parent)
582 continue; 578 continue;
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 38f34dadb86a..67fca268449b 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3490,8 +3490,7 @@ u64 btrfs_csum_bytes_to_leaves(struct btrfs_root *root, u64 csum_bytes);
3490static inline u64 btrfs_calc_trans_metadata_size(struct btrfs_root *root, 3490static inline u64 btrfs_calc_trans_metadata_size(struct btrfs_root *root,
3491 unsigned num_items) 3491 unsigned num_items)
3492{ 3492{
3493 return (root->nodesize + root->nodesize * (BTRFS_MAX_LEVEL - 1)) * 3493 return root->nodesize * BTRFS_MAX_LEVEL * 2 * num_items;
3494 2 * num_items;
3495} 3494}
3496 3495
3497/* 3496/*
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
index b57daa895cea..a20d541bb190 100644
--- a/fs/btrfs/delayed-inode.c
+++ b/fs/btrfs/delayed-inode.c
@@ -43,8 +43,7 @@ int __init btrfs_delayed_inode_init(void)
43 43
44void btrfs_delayed_inode_exit(void) 44void btrfs_delayed_inode_exit(void)
45{ 45{
46 if (delayed_node_cache) 46 kmem_cache_destroy(delayed_node_cache);
47 kmem_cache_destroy(delayed_node_cache);
48} 47}
49 48
50static inline void btrfs_init_delayed_node( 49static inline void btrfs_init_delayed_node(
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
index 914ac13bd92f..430b3689b112 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -929,14 +929,10 @@ btrfs_find_delayed_ref_head(struct btrfs_trans_handle *trans, u64 bytenr)
929 929
930void btrfs_delayed_ref_exit(void) 930void btrfs_delayed_ref_exit(void)
931{ 931{
932 if (btrfs_delayed_ref_head_cachep) 932 kmem_cache_destroy(btrfs_delayed_ref_head_cachep);
933 kmem_cache_destroy(btrfs_delayed_ref_head_cachep); 933 kmem_cache_destroy(btrfs_delayed_tree_ref_cachep);
934 if (btrfs_delayed_tree_ref_cachep) 934 kmem_cache_destroy(btrfs_delayed_data_ref_cachep);
935 kmem_cache_destroy(btrfs_delayed_tree_ref_cachep); 935 kmem_cache_destroy(btrfs_delayed_extent_op_cachep);
936 if (btrfs_delayed_data_ref_cachep)
937 kmem_cache_destroy(btrfs_delayed_data_ref_cachep);
938 if (btrfs_delayed_extent_op_cachep)
939 kmem_cache_destroy(btrfs_delayed_extent_op_cachep);
940} 936}
941 937
942int btrfs_delayed_ref_init(void) 938int btrfs_delayed_ref_init(void)
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 1809475ace2f..a998ef15ec6d 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -110,8 +110,7 @@ int __init btrfs_end_io_wq_init(void)
110 110
111void btrfs_end_io_wq_exit(void) 111void btrfs_end_io_wq_exit(void)
112{ 112{
113 if (btrfs_end_io_wq_cache) 113 kmem_cache_destroy(btrfs_end_io_wq_cache);
114 kmem_cache_destroy(btrfs_end_io_wq_cache);
115} 114}
116 115
117/* 116/*
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index aa31fe97c47a..083783b53536 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -7024,7 +7024,7 @@ btrfs_lock_cluster(struct btrfs_block_group_cache *block_group,
7024 struct btrfs_free_cluster *cluster, 7024 struct btrfs_free_cluster *cluster,
7025 int delalloc) 7025 int delalloc)
7026{ 7026{
7027 struct btrfs_block_group_cache *used_bg; 7027 struct btrfs_block_group_cache *used_bg = NULL;
7028 bool locked = false; 7028 bool locked = false;
7029again: 7029again:
7030 spin_lock(&cluster->refill_lock); 7030 spin_lock(&cluster->refill_lock);
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index ed2f32dd0d29..76a0c8597d98 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -206,10 +206,8 @@ void extent_io_exit(void)
206 * destroy caches. 206 * destroy caches.
207 */ 207 */
208 rcu_barrier(); 208 rcu_barrier();
209 if (extent_state_cache) 209 kmem_cache_destroy(extent_state_cache);
210 kmem_cache_destroy(extent_state_cache); 210 kmem_cache_destroy(extent_buffer_cache);
211 if (extent_buffer_cache)
212 kmem_cache_destroy(extent_buffer_cache);
213 if (btrfs_bioset) 211 if (btrfs_bioset)
214 bioset_free(btrfs_bioset); 212 bioset_free(btrfs_bioset);
215} 213}
@@ -232,7 +230,7 @@ static struct extent_state *alloc_extent_state(gfp_t mask)
232 if (!state) 230 if (!state)
233 return state; 231 return state;
234 state->state = 0; 232 state->state = 0;
235 state->private = 0; 233 state->failrec = NULL;
236 RB_CLEAR_NODE(&state->rb_node); 234 RB_CLEAR_NODE(&state->rb_node);
237 btrfs_leak_debug_add(&state->leak_list, &states); 235 btrfs_leak_debug_add(&state->leak_list, &states);
238 atomic_set(&state->refs, 1); 236 atomic_set(&state->refs, 1);
@@ -1844,7 +1842,8 @@ out:
1844 * set the private field for a given byte offset in the tree. If there isn't 1842 * set the private field for a given byte offset in the tree. If there isn't
1845 * an extent_state there already, this does nothing. 1843 * an extent_state there already, this does nothing.
1846 */ 1844 */
1847static int set_state_private(struct extent_io_tree *tree, u64 start, u64 private) 1845static noinline int set_state_failrec(struct extent_io_tree *tree, u64 start,
1846 struct io_failure_record *failrec)
1848{ 1847{
1849 struct rb_node *node; 1848 struct rb_node *node;
1850 struct extent_state *state; 1849 struct extent_state *state;
@@ -1865,13 +1864,14 @@ static int set_state_private(struct extent_io_tree *tree, u64 start, u64 private
1865 ret = -ENOENT; 1864 ret = -ENOENT;
1866 goto out; 1865 goto out;
1867 } 1866 }
1868 state->private = private; 1867 state->failrec = failrec;
1869out: 1868out:
1870 spin_unlock(&tree->lock); 1869 spin_unlock(&tree->lock);
1871 return ret; 1870 return ret;
1872} 1871}
1873 1872
1874int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private) 1873static noinline int get_state_failrec(struct extent_io_tree *tree, u64 start,
1874 struct io_failure_record **failrec)
1875{ 1875{
1876 struct rb_node *node; 1876 struct rb_node *node;
1877 struct extent_state *state; 1877 struct extent_state *state;
@@ -1892,7 +1892,7 @@ int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private)
1892 ret = -ENOENT; 1892 ret = -ENOENT;
1893 goto out; 1893 goto out;
1894 } 1894 }
1895 *private = state->private; 1895 *failrec = state->failrec;
1896out: 1896out:
1897 spin_unlock(&tree->lock); 1897 spin_unlock(&tree->lock);
1898 return ret; 1898 return ret;
@@ -1972,7 +1972,7 @@ int free_io_failure(struct inode *inode, struct io_failure_record *rec)
1972 int err = 0; 1972 int err = 0;
1973 struct extent_io_tree *failure_tree = &BTRFS_I(inode)->io_failure_tree; 1973 struct extent_io_tree *failure_tree = &BTRFS_I(inode)->io_failure_tree;
1974 1974
1975 set_state_private(failure_tree, rec->start, 0); 1975 set_state_failrec(failure_tree, rec->start, NULL);
1976 ret = clear_extent_bits(failure_tree, rec->start, 1976 ret = clear_extent_bits(failure_tree, rec->start,
1977 rec->start + rec->len - 1, 1977 rec->start + rec->len - 1,
1978 EXTENT_LOCKED | EXTENT_DIRTY, GFP_NOFS); 1978 EXTENT_LOCKED | EXTENT_DIRTY, GFP_NOFS);
@@ -2089,7 +2089,6 @@ int clean_io_failure(struct inode *inode, u64 start, struct page *page,
2089 unsigned int pg_offset) 2089 unsigned int pg_offset)
2090{ 2090{
2091 u64 private; 2091 u64 private;
2092 u64 private_failure;
2093 struct io_failure_record *failrec; 2092 struct io_failure_record *failrec;
2094 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info; 2093 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
2095 struct extent_state *state; 2094 struct extent_state *state;
@@ -2102,12 +2101,11 @@ int clean_io_failure(struct inode *inode, u64 start, struct page *page,
2102 if (!ret) 2101 if (!ret)
2103 return 0; 2102 return 0;
2104 2103
2105 ret = get_state_private(&BTRFS_I(inode)->io_failure_tree, start, 2104 ret = get_state_failrec(&BTRFS_I(inode)->io_failure_tree, start,
2106 &private_failure); 2105 &failrec);
2107 if (ret) 2106 if (ret)
2108 return 0; 2107 return 0;
2109 2108
2110 failrec = (struct io_failure_record *)(unsigned long) private_failure;
2111 BUG_ON(!failrec->this_mirror); 2109 BUG_ON(!failrec->this_mirror);
2112 2110
2113 if (failrec->in_validation) { 2111 if (failrec->in_validation) {
@@ -2167,7 +2165,7 @@ void btrfs_free_io_failure_record(struct inode *inode, u64 start, u64 end)
2167 2165
2168 next = next_state(state); 2166 next = next_state(state);
2169 2167
2170 failrec = (struct io_failure_record *)(unsigned long)state->private; 2168 failrec = state->failrec;
2171 free_extent_state(state); 2169 free_extent_state(state);
2172 kfree(failrec); 2170 kfree(failrec);
2173 2171
@@ -2177,10 +2175,9 @@ void btrfs_free_io_failure_record(struct inode *inode, u64 start, u64 end)
2177} 2175}
2178 2176
2179int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end, 2177int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end,
2180 struct io_failure_record **failrec_ret) 2178 struct io_failure_record **failrec_ret)
2181{ 2179{
2182 struct io_failure_record *failrec; 2180 struct io_failure_record *failrec;
2183 u64 private;
2184 struct extent_map *em; 2181 struct extent_map *em;
2185 struct extent_io_tree *failure_tree = &BTRFS_I(inode)->io_failure_tree; 2182 struct extent_io_tree *failure_tree = &BTRFS_I(inode)->io_failure_tree;
2186 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; 2183 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree;
@@ -2188,7 +2185,7 @@ int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end,
2188 int ret; 2185 int ret;
2189 u64 logical; 2186 u64 logical;
2190 2187
2191 ret = get_state_private(failure_tree, start, &private); 2188 ret = get_state_failrec(failure_tree, start, &failrec);
2192 if (ret) { 2189 if (ret) {
2193 failrec = kzalloc(sizeof(*failrec), GFP_NOFS); 2190 failrec = kzalloc(sizeof(*failrec), GFP_NOFS);
2194 if (!failrec) 2191 if (!failrec)
@@ -2237,8 +2234,7 @@ int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end,
2237 ret = set_extent_bits(failure_tree, start, end, 2234 ret = set_extent_bits(failure_tree, start, end,
2238 EXTENT_LOCKED | EXTENT_DIRTY, GFP_NOFS); 2235 EXTENT_LOCKED | EXTENT_DIRTY, GFP_NOFS);
2239 if (ret >= 0) 2236 if (ret >= 0)
2240 ret = set_state_private(failure_tree, start, 2237 ret = set_state_failrec(failure_tree, start, failrec);
2241 (u64)(unsigned long)failrec);
2242 /* set the bits in the inode's tree */ 2238 /* set the bits in the inode's tree */
2243 if (ret >= 0) 2239 if (ret >= 0)
2244 ret = set_extent_bits(tree, start, end, EXTENT_DAMAGED, 2240 ret = set_extent_bits(tree, start, end, EXTENT_DAMAGED,
@@ -2248,7 +2244,6 @@ int btrfs_get_io_failure_record(struct inode *inode, u64 start, u64 end,
2248 return ret; 2244 return ret;
2249 } 2245 }
2250 } else { 2246 } else {
2251 failrec = (struct io_failure_record *)(unsigned long)private;
2252 pr_debug("Get IO Failure Record: (found) logical=%llu, start=%llu, len=%llu, validation=%d\n", 2247 pr_debug("Get IO Failure Record: (found) logical=%llu, start=%llu, len=%llu, validation=%d\n",
2253 failrec->logical, failrec->start, failrec->len, 2248 failrec->logical, failrec->start, failrec->len,
2254 failrec->in_validation); 2249 failrec->in_validation);
diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
index 880d5292e972..5dbf92e68fbd 100644
--- a/fs/btrfs/extent_io.h
+++ b/fs/btrfs/extent_io.h
@@ -61,6 +61,7 @@
61struct extent_state; 61struct extent_state;
62struct btrfs_root; 62struct btrfs_root;
63struct btrfs_io_bio; 63struct btrfs_io_bio;
64struct io_failure_record;
64 65
65typedef int (extent_submit_bio_hook_t)(struct inode *inode, int rw, 66typedef int (extent_submit_bio_hook_t)(struct inode *inode, int rw,
66 struct bio *bio, int mirror_num, 67 struct bio *bio, int mirror_num,
@@ -111,8 +112,7 @@ struct extent_state {
111 atomic_t refs; 112 atomic_t refs;
112 unsigned state; 113 unsigned state;
113 114
114 /* for use by the FS */ 115 struct io_failure_record *failrec;
115 u64 private;
116 116
117#ifdef CONFIG_BTRFS_DEBUG 117#ifdef CONFIG_BTRFS_DEBUG
118 struct list_head leak_list; 118 struct list_head leak_list;
@@ -342,7 +342,6 @@ int extent_readpages(struct extent_io_tree *tree,
342 get_extent_t get_extent); 342 get_extent_t get_extent);
343int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, 343int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
344 __u64 start, __u64 len, get_extent_t *get_extent); 344 __u64 start, __u64 len, get_extent_t *get_extent);
345int get_state_private(struct extent_io_tree *tree, u64 start, u64 *private);
346void set_page_extent_mapped(struct page *page); 345void set_page_extent_mapped(struct page *page);
347 346
348struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info, 347struct extent_buffer *alloc_extent_buffer(struct btrfs_fs_info *fs_info,
diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
index 84fb56d5c018..cdbadeaef202 100644
--- a/fs/btrfs/extent_map.c
+++ b/fs/btrfs/extent_map.c
@@ -20,8 +20,7 @@ int __init extent_map_init(void)
20 20
21void extent_map_exit(void) 21void extent_map_exit(void)
22{ 22{
23 if (extent_map_cache) 23 kmem_cache_destroy(extent_map_cache);
24 kmem_cache_destroy(extent_map_cache);
25} 24}
26 25
27/** 26/**
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 2d9e4009c7e4..4ab4b5cdf4b0 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -2569,7 +2569,7 @@ out_trans:
2569 goto out_free; 2569 goto out_free;
2570 2570
2571 inode_inc_iversion(inode); 2571 inode_inc_iversion(inode);
2572 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 2572 inode->i_mtime = inode->i_ctime = current_fs_time(inode->i_sb);
2573 2573
2574 trans->block_rsv = &root->fs_info->trans_block_rsv; 2574 trans->block_rsv = &root->fs_info->trans_block_rsv;
2575 ret = btrfs_update_inode(trans, root, inode); 2575 ret = btrfs_update_inode(trans, root, inode);
@@ -2819,7 +2819,7 @@ static long btrfs_fallocate(struct file *file, int mode,
2819 if (IS_ERR(trans)) { 2819 if (IS_ERR(trans)) {
2820 ret = PTR_ERR(trans); 2820 ret = PTR_ERR(trans);
2821 } else { 2821 } else {
2822 inode->i_ctime = CURRENT_TIME; 2822 inode->i_ctime = current_fs_time(inode->i_sb);
2823 i_size_write(inode, actual_end); 2823 i_size_write(inode, actual_end);
2824 btrfs_ordered_update_i_size(inode, actual_end, NULL); 2824 btrfs_ordered_update_i_size(inode, actual_end, NULL);
2825 ret = btrfs_update_inode(trans, root, inode); 2825 ret = btrfs_update_inode(trans, root, inode);
@@ -2964,8 +2964,7 @@ const struct file_operations btrfs_file_operations = {
2964 2964
2965void btrfs_auto_defrag_exit(void) 2965void btrfs_auto_defrag_exit(void)
2966{ 2966{
2967 if (btrfs_inode_defrag_cachep) 2967 kmem_cache_destroy(btrfs_inode_defrag_cachep);
2968 kmem_cache_destroy(btrfs_inode_defrag_cachep);
2969} 2968}
2970 2969
2971int btrfs_auto_defrag_init(void) 2970int btrfs_auto_defrag_init(void)
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index d4381f5ef52d..d0d152f39771 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4014,7 +4014,8 @@ err:
4014 btrfs_i_size_write(dir, dir->i_size - name_len * 2); 4014 btrfs_i_size_write(dir, dir->i_size - name_len * 2);
4015 inode_inc_iversion(inode); 4015 inode_inc_iversion(inode);
4016 inode_inc_iversion(dir); 4016 inode_inc_iversion(dir);
4017 inode->i_ctime = dir->i_mtime = dir->i_ctime = CURRENT_TIME; 4017 inode->i_ctime = dir->i_mtime =
4018 dir->i_ctime = current_fs_time(inode->i_sb);
4018 ret = btrfs_update_inode(trans, root, dir); 4019 ret = btrfs_update_inode(trans, root, dir);
4019out: 4020out:
4020 return ret; 4021 return ret;
@@ -4157,7 +4158,7 @@ int btrfs_unlink_subvol(struct btrfs_trans_handle *trans,
4157 4158
4158 btrfs_i_size_write(dir, dir->i_size - name_len * 2); 4159 btrfs_i_size_write(dir, dir->i_size - name_len * 2);
4159 inode_inc_iversion(dir); 4160 inode_inc_iversion(dir);
4160 dir->i_mtime = dir->i_ctime = CURRENT_TIME; 4161 dir->i_mtime = dir->i_ctime = current_fs_time(dir->i_sb);
4161 ret = btrfs_update_inode_fallback(trans, root, dir); 4162 ret = btrfs_update_inode_fallback(trans, root, dir);
4162 if (ret) 4163 if (ret)
4163 btrfs_abort_transaction(trans, root, ret); 4164 btrfs_abort_transaction(trans, root, ret);
@@ -5602,7 +5603,7 @@ static struct inode *new_simple_dir(struct super_block *s,
5602 inode->i_op = &btrfs_dir_ro_inode_operations; 5603 inode->i_op = &btrfs_dir_ro_inode_operations;
5603 inode->i_fop = &simple_dir_operations; 5604 inode->i_fop = &simple_dir_operations;
5604 inode->i_mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO; 5605 inode->i_mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO;
5605 inode->i_mtime = CURRENT_TIME; 5606 inode->i_mtime = current_fs_time(inode->i_sb);
5606 inode->i_atime = inode->i_mtime; 5607 inode->i_atime = inode->i_mtime;
5607 inode->i_ctime = inode->i_mtime; 5608 inode->i_ctime = inode->i_mtime;
5608 BTRFS_I(inode)->i_otime = inode->i_mtime; 5609 BTRFS_I(inode)->i_otime = inode->i_mtime;
@@ -6186,7 +6187,7 @@ static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans,
6186 inode_init_owner(inode, dir, mode); 6187 inode_init_owner(inode, dir, mode);
6187 inode_set_bytes(inode, 0); 6188 inode_set_bytes(inode, 0);
6188 6189
6189 inode->i_mtime = CURRENT_TIME; 6190 inode->i_mtime = current_fs_time(inode->i_sb);
6190 inode->i_atime = inode->i_mtime; 6191 inode->i_atime = inode->i_mtime;
6191 inode->i_ctime = inode->i_mtime; 6192 inode->i_ctime = inode->i_mtime;
6192 BTRFS_I(inode)->i_otime = inode->i_mtime; 6193 BTRFS_I(inode)->i_otime = inode->i_mtime;
@@ -6299,7 +6300,8 @@ int btrfs_add_link(struct btrfs_trans_handle *trans,
6299 btrfs_i_size_write(parent_inode, parent_inode->i_size + 6300 btrfs_i_size_write(parent_inode, parent_inode->i_size +
6300 name_len * 2); 6301 name_len * 2);
6301 inode_inc_iversion(parent_inode); 6302 inode_inc_iversion(parent_inode);
6302 parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME; 6303 parent_inode->i_mtime = parent_inode->i_ctime =
6304 current_fs_time(parent_inode->i_sb);
6303 ret = btrfs_update_inode(trans, root, parent_inode); 6305 ret = btrfs_update_inode(trans, root, parent_inode);
6304 if (ret) 6306 if (ret)
6305 btrfs_abort_transaction(trans, root, ret); 6307 btrfs_abort_transaction(trans, root, ret);
@@ -6517,7 +6519,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
6517 BTRFS_I(inode)->dir_index = 0ULL; 6519 BTRFS_I(inode)->dir_index = 0ULL;
6518 inc_nlink(inode); 6520 inc_nlink(inode);
6519 inode_inc_iversion(inode); 6521 inode_inc_iversion(inode);
6520 inode->i_ctime = CURRENT_TIME; 6522 inode->i_ctime = current_fs_time(inode->i_sb);
6521 ihold(inode); 6523 ihold(inode);
6522 set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags); 6524 set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags);
6523 6525
@@ -9298,16 +9300,11 @@ void btrfs_destroy_cachep(void)
9298 * destroy cache. 9300 * destroy cache.
9299 */ 9301 */
9300 rcu_barrier(); 9302 rcu_barrier();
9301 if (btrfs_inode_cachep) 9303 kmem_cache_destroy(btrfs_inode_cachep);
9302 kmem_cache_destroy(btrfs_inode_cachep); 9304 kmem_cache_destroy(btrfs_trans_handle_cachep);
9303 if (btrfs_trans_handle_cachep) 9305 kmem_cache_destroy(btrfs_transaction_cachep);
9304 kmem_cache_destroy(btrfs_trans_handle_cachep); 9306 kmem_cache_destroy(btrfs_path_cachep);
9305 if (btrfs_transaction_cachep) 9307 kmem_cache_destroy(btrfs_free_space_cachep);
9306 kmem_cache_destroy(btrfs_transaction_cachep);
9307 if (btrfs_path_cachep)
9308 kmem_cache_destroy(btrfs_path_cachep);
9309 if (btrfs_free_space_cachep)
9310 kmem_cache_destroy(btrfs_free_space_cachep);
9311} 9308}
9312 9309
9313int btrfs_init_cachep(void) 9310int btrfs_init_cachep(void)
@@ -9375,7 +9372,6 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
9375 struct btrfs_root *dest = BTRFS_I(new_dir)->root; 9372 struct btrfs_root *dest = BTRFS_I(new_dir)->root;
9376 struct inode *new_inode = d_inode(new_dentry); 9373 struct inode *new_inode = d_inode(new_dentry);
9377 struct inode *old_inode = d_inode(old_dentry); 9374 struct inode *old_inode = d_inode(old_dentry);
9378 struct timespec ctime = CURRENT_TIME;
9379 u64 index = 0; 9375 u64 index = 0;
9380 u64 root_objectid; 9376 u64 root_objectid;
9381 int ret; 9377 int ret;
@@ -9472,9 +9468,9 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
9472 inode_inc_iversion(old_dir); 9468 inode_inc_iversion(old_dir);
9473 inode_inc_iversion(new_dir); 9469 inode_inc_iversion(new_dir);
9474 inode_inc_iversion(old_inode); 9470 inode_inc_iversion(old_inode);
9475 old_dir->i_ctime = old_dir->i_mtime = ctime; 9471 old_dir->i_ctime = old_dir->i_mtime =
9476 new_dir->i_ctime = new_dir->i_mtime = ctime; 9472 new_dir->i_ctime = new_dir->i_mtime =
9477 old_inode->i_ctime = ctime; 9473 old_inode->i_ctime = current_fs_time(old_dir->i_sb);
9478 9474
9479 if (old_dentry->d_parent != new_dentry->d_parent) 9475 if (old_dentry->d_parent != new_dentry->d_parent)
9480 btrfs_record_unlink_dir(trans, old_dir, old_inode, 1); 9476 btrfs_record_unlink_dir(trans, old_dir, old_inode, 1);
@@ -9499,7 +9495,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
9499 9495
9500 if (new_inode) { 9496 if (new_inode) {
9501 inode_inc_iversion(new_inode); 9497 inode_inc_iversion(new_inode);
9502 new_inode->i_ctime = CURRENT_TIME; 9498 new_inode->i_ctime = current_fs_time(new_inode->i_sb);
9503 if (unlikely(btrfs_ino(new_inode) == 9499 if (unlikely(btrfs_ino(new_inode) ==
9504 BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) { 9500 BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) {
9505 root_objectid = BTRFS_I(new_inode)->location.objectid; 9501 root_objectid = BTRFS_I(new_inode)->location.objectid;
@@ -9977,7 +9973,7 @@ next:
9977 *alloc_hint = ins.objectid + ins.offset; 9973 *alloc_hint = ins.objectid + ins.offset;
9978 9974
9979 inode_inc_iversion(inode); 9975 inode_inc_iversion(inode);
9980 inode->i_ctime = CURRENT_TIME; 9976 inode->i_ctime = current_fs_time(inode->i_sb);
9981 BTRFS_I(inode)->flags |= BTRFS_INODE_PREALLOC; 9977 BTRFS_I(inode)->flags |= BTRFS_INODE_PREALLOC;
9982 if (!(mode & FALLOC_FL_KEEP_SIZE) && 9978 if (!(mode & FALLOC_FL_KEEP_SIZE) &&
9983 (actual_len > inode->i_size) && 9979 (actual_len > inode->i_size) &&
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index a0be375702f9..6110d8c386a5 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -347,7 +347,7 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg)
347 347
348 btrfs_update_iflags(inode); 348 btrfs_update_iflags(inode);
349 inode_inc_iversion(inode); 349 inode_inc_iversion(inode);
350 inode->i_ctime = CURRENT_TIME; 350 inode->i_ctime = current_fs_time(inode->i_sb);
351 ret = btrfs_update_inode(trans, root, inode); 351 ret = btrfs_update_inode(trans, root, inode);
352 352
353 btrfs_end_transaction(trans, root); 353 btrfs_end_transaction(trans, root);
@@ -443,7 +443,7 @@ static noinline int create_subvol(struct inode *dir,
443 struct btrfs_root *root = BTRFS_I(dir)->root; 443 struct btrfs_root *root = BTRFS_I(dir)->root;
444 struct btrfs_root *new_root; 444 struct btrfs_root *new_root;
445 struct btrfs_block_rsv block_rsv; 445 struct btrfs_block_rsv block_rsv;
446 struct timespec cur_time = CURRENT_TIME; 446 struct timespec cur_time = current_fs_time(dir->i_sb);
447 struct inode *inode; 447 struct inode *inode;
448 int ret; 448 int ret;
449 int err; 449 int err;
@@ -844,10 +844,6 @@ static noinline int btrfs_mksubvol(struct path *parent,
844 if (IS_ERR(dentry)) 844 if (IS_ERR(dentry))
845 goto out_unlock; 845 goto out_unlock;
846 846
847 error = -EEXIST;
848 if (d_really_is_positive(dentry))
849 goto out_dput;
850
851 error = btrfs_may_create(dir, dentry); 847 error = btrfs_may_create(dir, dentry);
852 if (error) 848 if (error)
853 goto out_dput; 849 goto out_dput;
@@ -3217,7 +3213,7 @@ static int clone_finish_inode_update(struct btrfs_trans_handle *trans,
3217 3213
3218 inode_inc_iversion(inode); 3214 inode_inc_iversion(inode);
3219 if (!no_time_update) 3215 if (!no_time_update)
3220 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 3216 inode->i_mtime = inode->i_ctime = current_fs_time(inode->i_sb);
3221 /* 3217 /*
3222 * We round up to the block size at eof when determining which 3218 * We round up to the block size at eof when determining which
3223 * extents to clone above, but shouldn't round up the file size. 3219 * extents to clone above, but shouldn't round up the file size.
@@ -5032,7 +5028,7 @@ static long _btrfs_ioctl_set_received_subvol(struct file *file,
5032 struct btrfs_root *root = BTRFS_I(inode)->root; 5028 struct btrfs_root *root = BTRFS_I(inode)->root;
5033 struct btrfs_root_item *root_item = &root->root_item; 5029 struct btrfs_root_item *root_item = &root->root_item;
5034 struct btrfs_trans_handle *trans; 5030 struct btrfs_trans_handle *trans;
5035 struct timespec ct = CURRENT_TIME; 5031 struct timespec ct = current_fs_time(inode->i_sb);
5036 int ret = 0; 5032 int ret = 0;
5037 int received_uuid_changed; 5033 int received_uuid_changed;
5038 5034
diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c
index 8c27292ea9ea..988eb1513aa5 100644
--- a/fs/btrfs/ordered-data.c
+++ b/fs/btrfs/ordered-data.c
@@ -1114,6 +1114,5 @@ int __init ordered_data_init(void)
1114 1114
1115void ordered_data_exit(void) 1115void ordered_data_exit(void)
1116{ 1116{
1117 if (btrfs_ordered_extent_cache) 1117 kmem_cache_destroy(btrfs_ordered_extent_cache);
1118 kmem_cache_destroy(btrfs_ordered_extent_cache);
1119} 1118}
diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c
index 7cf8509deda7..a25f3b21491b 100644
--- a/fs/btrfs/root-tree.c
+++ b/fs/btrfs/root-tree.c
@@ -488,7 +488,7 @@ void btrfs_update_root_times(struct btrfs_trans_handle *trans,
488 struct btrfs_root *root) 488 struct btrfs_root *root)
489{ 489{
490 struct btrfs_root_item *item = &root->root_item; 490 struct btrfs_root_item *item = &root->root_item;
491 struct timespec ct = CURRENT_TIME; 491 struct timespec ct = current_fs_time(root->fs_info->sb);
492 492
493 spin_lock(&root->root_item_lock); 493 spin_lock(&root->root_item_lock);
494 btrfs_set_root_ctransid(item, trans->transid); 494 btrfs_set_root_ctransid(item, trans->transid);
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index e9e95ef0644f..43885e51b882 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -1335,7 +1335,7 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
1335 struct dentry *dentry; 1335 struct dentry *dentry;
1336 struct extent_buffer *tmp; 1336 struct extent_buffer *tmp;
1337 struct extent_buffer *old; 1337 struct extent_buffer *old;
1338 struct timespec cur_time = CURRENT_TIME; 1338 struct timespec cur_time;
1339 int ret = 0; 1339 int ret = 0;
1340 u64 to_reserve = 0; 1340 u64 to_reserve = 0;
1341 u64 index = 0; 1341 u64 index = 0;
@@ -1385,6 +1385,8 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
1385 parent_root = BTRFS_I(parent_inode)->root; 1385 parent_root = BTRFS_I(parent_inode)->root;
1386 record_root_in_trans(trans, parent_root); 1386 record_root_in_trans(trans, parent_root);
1387 1387
1388 cur_time = current_fs_time(parent_inode->i_sb);
1389
1388 /* 1390 /*
1389 * insert the directory item 1391 * insert the directory item
1390 */ 1392 */
@@ -1527,7 +1529,8 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
1527 1529
1528 btrfs_i_size_write(parent_inode, parent_inode->i_size + 1530 btrfs_i_size_write(parent_inode, parent_inode->i_size +
1529 dentry->d_name.len * 2); 1531 dentry->d_name.len * 2);
1530 parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME; 1532 parent_inode->i_mtime = parent_inode->i_ctime =
1533 current_fs_time(parent_inode->i_sb);
1531 ret = btrfs_update_inode_fallback(trans, parent_root, parent_inode); 1534 ret = btrfs_update_inode_fallback(trans, parent_root, parent_inode);
1532 if (ret) { 1535 if (ret) {
1533 btrfs_abort_transaction(trans, root, ret); 1536 btrfs_abort_transaction(trans, root, ret);
diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c
index 6c68d6356197..f2a20d52b9db 100644
--- a/fs/btrfs/xattr.c
+++ b/fs/btrfs/xattr.c
@@ -249,7 +249,7 @@ int __btrfs_setxattr(struct btrfs_trans_handle *trans,
249 goto out; 249 goto out;
250 250
251 inode_inc_iversion(inode); 251 inode_inc_iversion(inode);
252 inode->i_ctime = CURRENT_TIME; 252 inode->i_ctime = current_fs_time(inode->i_sb);
253 set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags); 253 set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags);
254 ret = btrfs_update_inode(trans, root, inode); 254 ret = btrfs_update_inode(trans, root, inode);
255 BUG_ON(ret); 255 BUG_ON(ret);