diff options
author | Zheng Yan <zheng.yan@oracle.com> | 2008-09-26 10:05:38 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-26 10:05:38 -0400 |
commit | 5b21f2ed3f2947b5195b65c9fdbdd9e52904cc03 (patch) | |
tree | 9af8f539ac487c163f3207bc065767c3c8b37ae7 /fs/btrfs/inode-map.c | |
parent | e465768938f95388723b0fd3c50a0ae48173edb9 (diff) |
Btrfs: extent_map and data=ordered fixes for space balancing
* Add an EXTENT_BOUNDARY state bit to keep the writepage code
from merging data extents that are in the process of being
relocated. This allows us to do accounting for them properly.
* The balancing code relocates data extents indepdent of the underlying
inode. The extent_map code was modified to properly account for
things moving around (invalidating extent_map caches in the inode).
* Don't take the drop_mutex in the create_subvol ioctl. It isn't
required.
* Fix walking of the ordered extent list to avoid races with sys_unlink
* Change the lock ordering rules. Transaction start goes outside
the drop_mutex. This allows btrfs_commit_transaction to directly
drop the relocation trees.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/inode-map.c')
-rw-r--r-- | fs/btrfs/inode-map.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c index cd6171c2da42..80038c5ef7cf 100644 --- a/fs/btrfs/inode-map.c +++ b/fs/btrfs/inode-map.c | |||
@@ -117,10 +117,14 @@ int btrfs_find_free_objectid(struct btrfs_trans_handle *trans, | |||
117 | *objectid = last_ino; | 117 | *objectid = last_ino; |
118 | goto found; | 118 | goto found; |
119 | } | 119 | } |
120 | } else if (key.objectid > search_start) { | ||
121 | *objectid = search_start; | ||
122 | goto found; | ||
120 | } | 123 | } |
121 | } | 124 | } |
122 | if (key.objectid >= BTRFS_LAST_FREE_OBJECTID) | 125 | if (key.objectid >= BTRFS_LAST_FREE_OBJECTID) |
123 | break; | 126 | break; |
127 | |||
124 | start_found = 1; | 128 | start_found = 1; |
125 | last_ino = key.objectid + 1; | 129 | last_ino = key.objectid + 1; |
126 | path->slots[0]++; | 130 | path->slots[0]++; |