[XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-12474-gaa72a5c
xfs at oss.sgi.com
xfs at oss.sgi.com
Tue Sep 1 16:41:22 CDT 2009
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "XFS development tree".
The branch, master has been updated
aa72a5c xfs: simplify xfs_trans_iget
13e6d5c xfs: merge fsync and O_SYNC handling
bd16956 xfs: speed up free inode search
2187550 xfs: rationalize xfs_inobt_lookup*
4254b0b xfs: untangle xfs_dialloc
0b48db8 xfs: factor out debug checks from xfs_dialloc and xfs_difree
afabc24 xfs: improve xfs_inobt_update prototype
2e287a7 xfs: improve xfs_inobt_get_rec prototype
85c0b2a xfs: factor out inode initialisation
from 1da1daed813c534263a87ffc36d5b775e65231ad (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit aa72a5cf00001d0b952c7c755be404b9118ceb2e
Author: Christoph Hellwig <hch at lst.de>
Date: Mon Aug 31 21:51:52 2009 -0300
xfs: simplify xfs_trans_iget
xfs_trans_iget is a wrapper for xfs_iget that adds the inode to the
transaction after it is read. Except when the inode already is in the
inode cache, in which case it returns the existing locked inode with
increment lock recursion counts.
Now, no one in the tree every decrements these lock recursion counts,
so any user of this gets a potential double unlock when both the original
owner of the inode and the xfs_trans_iget caller unlock it. When looking
back in a git bisect in the historic XFS tree there was only one place
that decremented these counts, xfs_trans_iput. Introduced in commit
ca25df7a840f426eb566d52667b6950b92bb84b5 by Adam Sweeney in 1993,
and removed in commit 19f899a3ab155ff6a49c0c79b06f2f61059afaf3 by
Steve Lord in 2003. And as long as it didn't slip through git bisects
cracks never actually used in that time frame.
A quick audit of the callers of xfs_trans_iget shows that no caller
really relies on this behaviour fortunately - xfs_ialloc allows this
inode from disk so it must not be there before, and all the RT allocator
routines only every add each RT bitmap inode once.
In addition to removing lots of code and reducing the size of the inode
item this patch also avoids the double inode cache lookup in each
create/mkdir/mknod transaction.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Reviewed-by: Alex Elder <aelder at sgi.com>
Signed-off-by: Felix Blyakher <felixb at sgi.com>
commit 13e6d5cdde0e785aa943810f08b801cadd0935df
Author: Christoph Hellwig <hch at lst.de>
Date: Mon Aug 31 21:00:31 2009 -0300
xfs: merge fsync and O_SYNC handling
The guarantees for O_SYNC are exactly the same as the ones we need to
make for an fsync call (and given that Linux O_SYNC is O_DSYNC the
equivalent is fdadatasync, but we treat both the same in XFS), except
with a range data writeout. Jan Kara has started unifying these two
path for filesystems using the generic helpers, and I've started to
look at XFS.
The actual transaction commited by xfs_fsync and xfs_write_sync_logforce
has a different transaction number, but actually is exactly the same.
We'll only use the fsync transaction going forward. One major difference
is that xfs_write_sync_logforce never issues a cache flush unless we
commit a transaction causing that as a side-effect, which is an obvious
bug in the O_SYNC handling. Second all the locking and i_update_size
vs i_update_core changes from 978b7237123d007b9fa983af6e0e2fa8f97f9934
never made it to xfs_write_sync_logforce, so we add them back.
To make xfs_fsync easily usable from the O_SYNC path, the filemap_fdatawait
call is moved up to xfs_file_fsync, so that we don't wait on the whole
file after we already waited for our portion in xfs_write.
We'll also use a plain call to filemap_write_and_wait_range instead
of the previous sync_page_rang which did it in two steps including
an half-hearted inode write out that doesn't help us.
Once we're done with this also remove the now useless i_update_size
tracking.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Reviewed-by: Felix Blyakher <felixb at sgi.com>
Signed-off-by: Felix Blyakher <felixb at sgi.com>
commit bd169565993b39b9b4b102cdac8b13e0a259ce2f
Author: Dave Chinner <dgc at sgi.com>
Date: Mon Aug 31 20:58:28 2009 -0300
xfs: speed up free inode search
Don't search too far - abort if it is outside a certain radius and simply do
a linear search for the first free inode. In AGs with a million inodes this
can speed up allocation speed by 3-4x.
[hch: ported to the new xfs_ialloc.c world order]
Signed-off-by: Dave Chinner <dgc at sgi.com>
Signed-off-by: Christoph Hellwig <hch at lst.de>
Reviewed-by: Alex Elder <aelder at sgi.com>
Signed-off-by: Felix Blyakher <felixb at sgi.com>
commit 2187550525d7bcb8c87689e4eca41b1955bf9ac3
Author: Christoph Hellwig <hch at lst.de>
Date: Mon Aug 31 20:58:21 2009 -0300
xfs: rationalize xfs_inobt_lookup*
Currenly we have a xfs_inobt_lookup* variant for each comparism direction,
and all these get all three fields of the inobt records passed, while the
common case is just looking for the inode number and we have only marginally
more callers than xfs_inobt_lookup* variants.
So opencode a direct call to xfs_btree_lookup for the single case where we
need all fields, and replace xfs_inobt_lookup* with a xfs_inobt_looku that
just takes the inode number and the direction for all other callers.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Reviewed-by: Alex Elder <aelder at sgi.com>
Signed-off-by: Felix Blyakher <felixb at sgi.com>
commit 4254b0bbb1c0826b7443ffa593576696bc591aa2
Author: Christoph Hellwig <hch at lst.de>
Date: Mon Aug 31 20:57:14 2009 -0300
xfs: untangle xfs_dialloc
Clarify the control flow in xfs_dialloc. Factor out a helper to go to the
next node from the current one and improve the control flow by expanding
composite if statements and using gotos.
The xfs_ialloc_next_rec helper is borrowed from Dave Chinners dynamic
allocation policy patches.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Reviewed-by: Alex Elder <aelder at sgi.com>
Signed-off-by: Felix Blyakher <felixb at sgi.com>
commit 0b48db80ba689edfd96ed06c3124d6cf1146de3f
Author: Dave Chinner <dgc at sgi.com>
Date: Mon Aug 31 20:57:09 2009 -0300
xfs: factor out debug checks from xfs_dialloc and xfs_difree
Factor out a common helper from repeated debug checks in xfs_dialloc and
xfs_difree.
[hch: split out from Dave's dynamic allocation policy patches]
Signed-off-by: Christoph Hellwig <hch at lst.de>
Reviewed-by: Alex Elder <aelder at sgi.com>
Signed-off-by: Felix Blyakher <felixb at sgi.com>
commit afabc24a73bfee2656724b0a70395f1693eaa62b
Author: Christoph Hellwig <hch at lst.de>
Date: Mon Aug 31 20:57:03 2009 -0300
xfs: improve xfs_inobt_update prototype
Both callers of xfs_inobt_update have the record in form of a
xfs_inobt_rec_incore_t, so just pass a pointer to it instead of the
individual variables.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Reviewed-by: Alex Elder <aelder at sgi.com>
Signed-off-by: Felix Blyakher <felixb at sgi.com>
commit 2e287a731e0607e0371dc6165b7dd3ebc67fa8e1
Author: Christoph Hellwig <hch at lst.de>
Date: Mon Aug 31 20:56:58 2009 -0300
xfs: improve xfs_inobt_get_rec prototype
Most callers of xfs_inobt_get_rec need to fill a xfs_inobt_rec_incore_t, and
those who don't yet are fine with a xfs_inobt_rec_incore_t, instead of the
three individual variables, too. So just change xfs_inobt_get_rec to write
the output into a xfs_inobt_rec_incore_t directly.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Reviewed-by: Alex Elder <aelder at sgi.com>
Signed-off-by: Felix Blyakher <felixb at sgi.com>
commit 85c0b2ab5e69ca6133380ead1c50e0840d136b39
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Aug 31 20:56:51 2009 -0300
xfs: factor out inode initialisation
Factor out code to initialize new inode clusters into a function of it's own.
This keeps xfs_ialloc_ag_alloc smaller and better structured and enables a
future inode cluster initialization transaction. Also initialize the agno
variable earlier in xfs_ialloc_ag_alloc to avoid repeated byte swaps.
[hch: The original patch is from Dave from his unpublished inode create
transaction patch series, with some modifcations by me to apply stand-alone]
Signed-off-by: Dave Chinner <david at fromorbit.com>
Signed-off-by: Christoph Hellwig <hch at lst.de>
Reviewed-by: Alex Elder <aelder at sgi.com>
Signed-off-by: Felix Blyakher <felixb at sgi.com>
-----------------------------------------------------------------------
Summary of changes:
fs/xfs/linux-2.6/xfs_aops.c | 1 -
fs/xfs/linux-2.6/xfs_file.c | 19 +-
fs/xfs/linux-2.6/xfs_lrw.c | 7 +-
fs/xfs/xfs_ag.h | 9 +
fs/xfs/xfs_ialloc.c | 805 ++++++++++++++++++++++---------------------
fs/xfs/xfs_ialloc.h | 18 +-
fs/xfs/xfs_iget.c | 27 --
fs/xfs/xfs_inode.h | 3 -
fs/xfs/xfs_inode_item.c | 10 -
fs/xfs/xfs_inode_item.h | 2 -
fs/xfs/xfs_itable.c | 96 +++---
fs/xfs/xfs_rw.c | 84 -----
fs/xfs/xfs_rw.h | 1 -
fs/xfs/xfs_trans.h | 2 +-
fs/xfs/xfs_trans_inode.c | 86 +-----
fs/xfs/xfs_vnodeops.c | 11 +-
16 files changed, 499 insertions(+), 682 deletions(-)
hooks/post-receive
--
XFS development tree
More information about the xfs
mailing list