diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-23 18:19:16 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-23 18:19:16 -0400 |
commit | a77febbef105554c5a37241cf903f48ab7bc03c7 (patch) | |
tree | d6f96d9d5837312ce6dc2db9f3fc93a243eec87b /fs/xfs/xfs_alloc_btree.c | |
parent | 42cd71bf1e3a081b3150018bbf448cb6c8a844a5 (diff) | |
parent | bf59170a66bc3eaf3ee513aa6ce9774aa2ab5188 (diff) |
Merge branch 'for-linus' of git://oss.sgi.com/xfs/xfs
* 'for-linus' of git://oss.sgi.com/xfs/xfs:
xfs: obey minleft values during extent allocation correctly
xfs: reset buffer pointers before freeing them
xfs: avoid getting stuck during async inode flushes
xfs: fix xfs_itruncate_start tracing
xfs: fix duplicate workqueue initialisation
xfs: kill off xfs_printk()
xfs: fix race condition in AIL push trigger
xfs: make AIL target updates and compares 32bit safe.
xfs: always push the AIL to the target
xfs: exit AIL push work correctly when AIL is empty
xfs: ensure reclaim cursor is reset correctly at end of AG
xfs: add an x86 compat handler for XFS_IOC_ZERO_RANGE
xfs: fix compiler warning in xfs_trace.h
xfs: cleanup duplicate initializations
xfs: reduce the number of pagb_lock roundtrips in xfs_alloc_clear_busy
xfs: exact busy extent tracking
xfs: do not immediately reuse busy extent ranges
xfs: optimize AGFL refills
Diffstat (limited to 'fs/xfs/xfs_alloc_btree.c')
-rw-r--r-- | fs/xfs/xfs_alloc_btree.c | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/fs/xfs/xfs_alloc_btree.c b/fs/xfs/xfs_alloc_btree.c index 3916925e2584..8b469d53599f 100644 --- a/fs/xfs/xfs_alloc_btree.c +++ b/fs/xfs/xfs_alloc_btree.c | |||
@@ -95,6 +95,8 @@ xfs_allocbt_alloc_block( | |||
95 | return 0; | 95 | return 0; |
96 | } | 96 | } |
97 | 97 | ||
98 | xfs_alloc_busy_reuse(cur->bc_mp, cur->bc_private.a.agno, bno, 1, false); | ||
99 | |||
98 | xfs_trans_agbtree_delta(cur->bc_tp, 1); | 100 | xfs_trans_agbtree_delta(cur->bc_tp, 1); |
99 | new->s = cpu_to_be32(bno); | 101 | new->s = cpu_to_be32(bno); |
100 | 102 | ||
@@ -118,17 +120,6 @@ xfs_allocbt_free_block( | |||
118 | if (error) | 120 | if (error) |
119 | return error; | 121 | return error; |
120 | 122 | ||
121 | /* | ||
122 | * Since blocks move to the free list without the coordination used in | ||
123 | * xfs_bmap_finish, we can't allow block to be available for | ||
124 | * reallocation and non-transaction writing (user data) until we know | ||
125 | * that the transaction that moved it to the free list is permanently | ||
126 | * on disk. We track the blocks by declaring these blocks as "busy"; | ||
127 | * the busy list is maintained on a per-ag basis and each transaction | ||
128 | * records which entries should be removed when the iclog commits to | ||
129 | * disk. If a busy block is allocated, the iclog is pushed up to the | ||
130 | * LSN that freed the block. | ||
131 | */ | ||
132 | xfs_alloc_busy_insert(cur->bc_tp, be32_to_cpu(agf->agf_seqno), bno, 1); | 123 | xfs_alloc_busy_insert(cur->bc_tp, be32_to_cpu(agf->agf_seqno), bno, 1); |
133 | xfs_trans_agbtree_delta(cur->bc_tp, -1); | 124 | xfs_trans_agbtree_delta(cur->bc_tp, -1); |
134 | return 0; | 125 | return 0; |