On Tue, 2010-09-07 at 19:34 -0400, Christoph Hellwig wrote:
> The implementation os ->kill_root only differ by either simply zeroing
> out the now unused buffer in the btree cursor in the inode allocation
> btree or using xfs_btree_setbuf in the allocation btree.
> Initially both of them used xfs_btree_setbuf, but the use in the ialloc
> btree was removed early on because it interacted badly with xfs_trans_binval.
> In addition to zeroing out the buffer in the cursor xfs_btree_setbuf updates
> the bc_ra array in the btree cursor, and calls xfs_trans_brelse on the
> buffer previous occupying the slot.
> The bc_ra update should be done for the alloc btree updated too, although
> the lack of it does not cause serious problems. The xfs_trans_brelse
> call on the other hand is effectively a no-op in the end - it keeps
> decrementing the bli_recur refcount until it hits zero, and then just
> skips out because the buffer will always be dirty at this point. So
> removing it for the allocation btree is just fine.
> So unify the code and move it to xfs_btree.c. While we're at it also
> replace the call to xfs_btree_setbuf with a NULL bp argument in
> xfs_btree_del_cursor with a direct call to xfs_trans_brelse given
> that the cursor is beeing freed just after this and the state updates
> are superflous. After this xfs_btree_setbuf is only used with a non-NULL
> bp argument and can thus be simplified.
Reviewed-by: Alex Elder <aelder@xxxxxxx>
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
. . .