diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-09 21:49:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-09 21:49:20 -0400 |
commit | 72055425e53540d9d0e59a57ac8c9b8ce77b62d5 (patch) | |
tree | 8033d7d7bfdf8725eed785d02f7121d201052d2e /fs/btrfs/root-tree.c | |
parent | fc81c038c2d61d4fcd8150f383fec1ce23087597 (diff) | |
parent | f46dbe3dee853f8a860f889cb2b7ff4c624f2a7a (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs
Pull btrfs update from Chris Mason:
"This is a large pull, with the bulk of the updates coming from:
- Hole punching
- send/receive fixes
- fsync performance
- Disk format extension allowing more hardlinks inside a single
directory (btrfs-progs patch required to enable the compat bit for
this one)
I'm cooking more unrelated RAID code, but I wanted to make sure this
original batch makes it in. The largest updates here are relatively
old and have been in testing for some time."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs: (121 commits)
btrfs: init ref_index to zero in add_inode_ref
Btrfs: remove repeated eb->pages check in, disk-io.c/csum_dirty_buffer
Btrfs: fix page leakage
Btrfs: do not warn_on when we cannot alloc a page for an extent buffer
Btrfs: don't bug on enomem in readpage
Btrfs: cleanup pages properly when ENOMEM in compression
Btrfs: make filesystem read-only when submitting barrier fails
Btrfs: detect corrupted filesystem after write I/O errors
Btrfs: make compress and nodatacow mount options mutually exclusive
btrfs: fix message printing
Btrfs: don't bother committing delayed inode updates when fsyncing
btrfs: move inline function code to header file
Btrfs: remove unnecessary IS_ERR in bio_readpage_error()
btrfs: remove unused function btrfs_insert_some_items()
Btrfs: don't commit instead of overcommitting
Btrfs: confirmation of value is added before trace_btrfs_get_extent() is called
Btrfs: be smarter about dropping things from the tree log
Btrfs: don't lookup csums for prealloc extents
Btrfs: cache extent state when writing out dirty metadata pages
Btrfs: do not hold the file extent leaf locked when adding extent item
...
Diffstat (limited to 'fs/btrfs/root-tree.c')
-rw-r--r-- | fs/btrfs/root-tree.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c index 10d8e4d88071..eb923d087da7 100644 --- a/fs/btrfs/root-tree.c +++ b/fs/btrfs/root-tree.c | |||
@@ -141,8 +141,10 @@ int btrfs_update_root(struct btrfs_trans_handle *trans, struct btrfs_root | |||
141 | return -ENOMEM; | 141 | return -ENOMEM; |
142 | 142 | ||
143 | ret = btrfs_search_slot(trans, root, key, path, 0, 1); | 143 | ret = btrfs_search_slot(trans, root, key, path, 0, 1); |
144 | if (ret < 0) | 144 | if (ret < 0) { |
145 | goto out_abort; | 145 | btrfs_abort_transaction(trans, root, ret); |
146 | goto out; | ||
147 | } | ||
146 | 148 | ||
147 | if (ret != 0) { | 149 | if (ret != 0) { |
148 | btrfs_print_leaf(root, path->nodes[0]); | 150 | btrfs_print_leaf(root, path->nodes[0]); |
@@ -166,16 +168,23 @@ int btrfs_update_root(struct btrfs_trans_handle *trans, struct btrfs_root | |||
166 | btrfs_release_path(path); | 168 | btrfs_release_path(path); |
167 | ret = btrfs_search_slot(trans, root, key, path, | 169 | ret = btrfs_search_slot(trans, root, key, path, |
168 | -1, 1); | 170 | -1, 1); |
169 | if (ret < 0) | 171 | if (ret < 0) { |
170 | goto out_abort; | 172 | btrfs_abort_transaction(trans, root, ret); |
173 | goto out; | ||
174 | } | ||
175 | |||
171 | ret = btrfs_del_item(trans, root, path); | 176 | ret = btrfs_del_item(trans, root, path); |
172 | if (ret < 0) | 177 | if (ret < 0) { |
173 | goto out_abort; | 178 | btrfs_abort_transaction(trans, root, ret); |
179 | goto out; | ||
180 | } | ||
174 | btrfs_release_path(path); | 181 | btrfs_release_path(path); |
175 | ret = btrfs_insert_empty_item(trans, root, path, | 182 | ret = btrfs_insert_empty_item(trans, root, path, |
176 | key, sizeof(*item)); | 183 | key, sizeof(*item)); |
177 | if (ret < 0) | 184 | if (ret < 0) { |
178 | goto out_abort; | 185 | btrfs_abort_transaction(trans, root, ret); |
186 | goto out; | ||
187 | } | ||
179 | l = path->nodes[0]; | 188 | l = path->nodes[0]; |
180 | slot = path->slots[0]; | 189 | slot = path->slots[0]; |
181 | ptr = btrfs_item_ptr_offset(l, slot); | 190 | ptr = btrfs_item_ptr_offset(l, slot); |
@@ -192,10 +201,6 @@ int btrfs_update_root(struct btrfs_trans_handle *trans, struct btrfs_root | |||
192 | out: | 201 | out: |
193 | btrfs_free_path(path); | 202 | btrfs_free_path(path); |
194 | return ret; | 203 | return ret; |
195 | |||
196 | out_abort: | ||
197 | btrfs_abort_transaction(trans, root, ret); | ||
198 | goto out; | ||
199 | } | 204 | } |
200 | 205 | ||
201 | int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 206 | int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root *root, |