[XFS updates] XFS development tree branch, master, updated. v2.6.30-rc4-34881-g4e23471
xfs at oss.sgi.com
xfs at oss.sgi.com
Fri Jan 15 15:42:31 CST 2010
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
4e23471 xfs: move more buffer helpers into xfs_buf.c
64e0bc7 xfs: clean up xfs_bwrite
873ff55 xfs: clean up log buffer writes
e57336f xfs: embed the pagb_list array in the perag structure
8b26c58 xfs: handle ENOMEM correctly during initialisation of perag structures
b657fc8 xfs: Kill filestreams cache flush
0fa800f xfs: Add trace points for per-ag refcount debugging.
aed3bb9 xfs: Reference count per-ag structures
1c1c6eb xfs: Replace per-ag array with a radix tree
44b56e0 xfs: convert remaining direct references to m_perag
4196ac0 xfs: Convert filestreams code to use per-ag get/put routines
a862e0f xfs: Don't directly reference m_perag in allocation code
5017e97 xfs: rename xfs_get_perag
c9c1297 xfs: Don't wake xfsbufd when idle
453eac8 xfs: Don't wake the aild once per second
f0a7695 xfs: Use list_heads for log recovery item lists
5d77c0d xfs: make several more functions static
6bded0f xfs: clean up inconsistent variable naming in xfs_swap_extent
3a85cd9 xfs: add tracing to xfs_swap_extents
e09f986 xfs: xfs_swap_extents needs to handle dynamic fork offsets
3daeb42 xfs: fix missing error check in xfs_rtfree_range
4b6a468 xfs: fix stale inode flush avoidance
126976c xfs: Remove inode iolock held check during allocation
57817c6 xfs: reclaim all inodes by background tree walks
018027b xfs: Avoid inodes in reclaim when flushing from inode cache
c8e20be xfs: reclaim inodes under a write lock
from 7284ce6c9f6153d1777df5f310c959724d1bd446 (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 4e23471a3f3aba885ea70100db47ccacb5f069f6
Author: Christoph Hellwig <hch at infradead.org>
Date: Wed Jan 13 22:17:56 2010 +0000
xfs: move more buffer helpers into xfs_buf.c
Move xfsbdstrat and xfs_bdstrat_cb from xfs_lrw.c and xfs_bioerror
and xfs_bioerror_relse from xfs_rw.c into xfs_buf.c. This also
means xfs_bioerror and xfs_bioerror_relse can be marked static now.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 64e0bc7d2a6609ad265757a600e2a0d93c8adb47
Author: Christoph Hellwig <hch at infradead.org>
Date: Wed Jan 13 22:17:58 2010 +0000
xfs: clean up xfs_bwrite
Fold XFS_bwrite into it's only caller, xfs_bwrite and move it into
xfs_buf.c instead of leaving it as a fairly large inline function.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 873ff5501d8cd1a21045d6c1da34f0c3876bc235
Author: Christoph Hellwig <hch at infradead.org>
Date: Wed Jan 13 22:17:57 2010 +0000
xfs: clean up log buffer writes
Don't bother using XFS_bwrite as it doesn't provide much code for
our use case. Instead opencode it and fold xlog_bdstrat_cb into the
new xlog_bdstrat helper.
Signed-off-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit e57336ff7fc7520bec7b3a7741043bdebaf622ea
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:49 2010 +0000
xfs: embed the pagb_list array in the perag structure
Now that the perag structure is allocated memory rather than held in
an array, we don't need to have the busy extent array external to
the structure. Embed it into the perag structure to avoid needing an
extra allocation when setting up.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 8b26c5825e023b1bccac7afd174ebe55b8905cb1
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:48 2010 +0000
xfs: handle ENOMEM correctly during initialisation of perag structures
Add proper error handling in case an error occurs while initializing
new perag structures for a mount point. The mount structure is
restored to its previous state by deleting and freeing any perag
structures added during the call.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit b657fc82a3ca6d7ad16a59e81765f0fb0e86cdbb
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:47 2010 +0000
xfs: Kill filestreams cache flush
The filestreams cache flush is not needed in the sync code as it
does not affect data writeback, and it is now not used by the growfs
code, either, so kill it.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 0fa800fbd549736dfdc1d7761f87e33dc8cd973b
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:46 2010 +0000
xfs: Add trace points for per-ag refcount debugging.
Uninline xfs_perag_{get,put} so that tracepoints can be inserted
into them to speed debugging of reference count problems.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit aed3bb90abaf0b42e8c8747e192f7bb97f445279
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:45 2010 +0000
xfs: Reference count per-ag structures
Reference count the per-ag structures to ensure that we keep get/put
pairs balanced. Assert that the reference counts are zero at unmount
time to catch leaks. In future, reference counts will enable us to
safely remove perag structures by allowing us to detect when they
are no longer in use.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 1c1c6ebcf5284aee4910f3b906ac90c20e510c82
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:44 2010 +0000
xfs: Replace per-ag array with a radix tree
The use of an array for the per-ag structures requires reallocation
of the array when growing the filesystem. This requires locking
access to the array to avoid use after free situations, and the
locking is difficult to get right. To avoid needing to reallocate an
array, change the per-ag structures to an allocated object per ag
and index them using a tree structure.
The AGs are always densely indexed (hence the use of an array), but
the number supported is 2^32 and lookups tend to be random and hence
indexing needs to scale. A simple choice is a radix tree - it works
well with this sort of index. This change also removes another
large contiguous allocation from the mount/growfs path in XFS.
The growing process now needs to change to only initialise the new
AGs required for the extra space, and as such only needs to
exclusively lock the tree for inserts. The rest of the code only
needs to lock the tree while doing lookups, and hence this will
remove all the deadlocks that currently occur on the m_perag_lock as
it is now an innermost lock. The lock is also changed to a spinlock
from a read/write lock as the hold time is now extremely short.
To complete the picture, the per-ag structures will need to be
reference counted to ensure that we don't free/modify them while
they are still in use. This will be done in subsequent patch.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 44b56e0a1aed522a10051645e85d300e10926fd3
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:43 2010 +0000
xfs: convert remaining direct references to m_perag
Convert the remaining direct lookups of the per ag structures to use
get/put accesses. Ensure that the loops across AGs and prior users
of the interface balance gets and puts correctly.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 4196ac08c023c6dab90c3fa460d9c06deaa304c4
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:42 2010 +0000
xfs: Convert filestreams code to use per-ag get/put routines
Use xfs_perag_get() and xfs_perag_put() in the filestreams code.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit a862e0fdcb8862aab2538ec2fc2f0dc07a625c59
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:41 2010 +0000
xfs: Don't directly reference m_perag in allocation code
Start abstracting the perag references so that the indexing of the
structures is not directly coded into all the places that uses the
perag structures. This will allow us to separate the use of the
perag structure and the way it is indexed and hence avoid the known
deadlocks related to growing a busy filesystem.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 5017e97d52628fb8ae56e434e86ac2e72ddaac2b
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:47:40 2010 +0000
xfs: rename xfs_get_perag
xfs_get_perag is really getting the perag that an inode belongs to
based on it's inode number. Convert the use of this function to just
get the perag from a provided ag number. Use this new function to
obtain the per-ag structure when traversing the per AG inode trees
for sync and reclaim.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit c9c129714e71c890bed1bd5b61697a896c3c2d54
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:49:59 2010 +0000
xfs: Don't wake xfsbufd when idle
The xfsbufd wakes every xfsbufd_centisecs (once per second by
default) for each filesystem even when the filesystem is idle. If
the xfsbufd has nothing to do, put it into a long term sleep and
only wake it up when there is work pending (i.e. dirty buffers to
flush soon). This will make laptop power misers happy.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 453eac8a9aa417878a38bdfbccafd5f7ce4e8e4e
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:49:58 2010 +0000
xfs: Don't wake the aild once per second
Now that the AIL push algorithm is traversal safe, we don't need a
watchdog function in the xfsaild to catch pushes that fail to make
progress. Remove the watchdog timeout and make pushes purely driven
by demand. This will remove the once-per-second wakeup that is seen
when the filesystem is idle and make laptop power misers happy.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit f0a7695380efa31cd281730917f7e907a724d5cb
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:49:57 2010 +0000
xfs: Use list_heads for log recovery item lists
Remove the roll-your-own linked list operations.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 5d77c0dc0c05c2c65aee16149fae06831a118730
Author: Eric Sandeen <sandeen at sandeen.net>
Date: Thu Nov 19 15:52:00 2009 +0000
xfs: make several more functions static
Just minor housekeeping, a lot more functions can be trivially made
static; others could if we reordered things a bit...
Signed-off-by: Eric Sandeen <sandeen at sandeen.net>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 6bded0f383fd7971b76ad6c194dda7d5b814b871
Author: Dave Chinner <david at fromorbit.com>
Date: Thu Jan 14 01:33:56 2010 +0000
xfs: clean up inconsistent variable naming in xfs_swap_extent
The swap extent ioctl passes in a target inode and a temporary inode
which are clearly named in the ioctl structure. The code then
assigns temp to target and vice versa, making it extremely difficult
to work out which inode is which later in the code. Make this
consistent throughout the code.
Also make xfs_swap_extent static as there are no external users of
the function.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 3a85cd96d3ab3c6dcf88b81fc6eaddb84e565a43
Author: Dave Chinner <david at fromorbit.com>
Date: Thu Jan 14 01:33:55 2010 +0000
xfs: add tracing to xfs_swap_extents
To be able to diagnose whether the swap extents function is
detecting compatible inode data fork configurations for swapping
extents, add tracing points to the code to allow us to see the
format of the inode forks before and after the swap.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit e09f98606dcc156de1146c209d45a0d6d5f51c3f
Author: Dave Chinner <david at fromorbit.com>
Date: Thu Jan 14 01:33:54 2010 +0000
xfs: xfs_swap_extents needs to handle dynamic fork offsets
When swapping extents, we can corrupt inodes by swapping data forks
that are in incompatible formats. This is caused by the two indoes
having different fork offsets due to the presence of an attribute
fork on an attr2 filesystem. xfs_fsr tries to be smart about
setting the fork offset, but the trick it plays only works on attr1
(old fixed format attribute fork) filesystems.
Changing the way xfs_fsr sets up the attribute fork will prevent
this situation from ever occurring, so in the kernel code we can get
by with a preventative fix - check that the data fork in the
defragmented inode is in a format valid for the inode it is being
swapped into. This will lead to files that will silently and
potentially repeatedly fail defragmentation, so issue a warning to
the log when this particular failure occurs to let us know that
xfs_fsr needs updating/fixing.
To help identify how to improve xfs_fsr to avoid this issue, add
trace points for the inodes being swapped so that we can determine
why the swap was rejected and to confirm that the code is making the
right decisions and modifications when swapping forks.
A further complication is even when the swap is allowed to proceed
when the fork offset is different between the two inodes then value
for the maximum number of extents the data fork can hold can be
wrong. Make sure these are also set correctly after the swap occurs.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 3daeb42c13567e1505f233f6a699cc0e23c8ab5a
Author: Dave Chinner <david at fromorbit.com>
Date: Thu Jan 14 08:44:46 2010 +0000
xfs: fix missing error check in xfs_rtfree_range
When xfs_rtfind_forw() returns an error, the block is returned
uninitialised. xfs_rtfree_range() is not checking the error return,
so could be using an uninitialised block number for modifying bitmap
summary info.
The problem was found by gcc when compiling the *userspace* libxfs
code - it is an copy of the kernel code with the exact same bug.
gcc gives an uninitialised variable warning on the userspace code
but not on the kernel code. You gotta love the consistency (Mmmm,
slightly chewy today!).
Signed-off-by: Dave Chinner <david at fromorbit.com>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 4b6a46882cca8349e8942e2650c33b11bc571c92
Author: Dave Chinner <david at fromorbit.com>
Date: Mon Jan 11 11:45:21 2010 +0000
xfs: fix stale inode flush avoidance
When reclaiming stale inodes, we need to guarantee that inodes are
unpinned before returning with a "clean" status. If we don't we can
reclaim inodes that are pinned, leading to use after free in the
transaction subsystem as transactions complete.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 126976c7c17d3bdfbc1fe9e0af8bee9f62d14cc6
Author: Dave Chinner <david at fromorbit.com>
Date: Sun Jan 10 23:51:48 2010 +0000
xfs: Remove inode iolock held check during allocation
lockdep complains about a the lock not being initialised as we do an
ASSERT based check that the lock is not held before we initialise it
to catch inodes freed with the lock held.
lockdep does this check for us in the lock initialisation code, so
remove the ASSERT to stop the lockdep warning.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 57817c68229984818fea9e614d6f95249c3fb098
Author: Dave Chinner <david at fromorbit.com>
Date: Sun Jan 10 23:51:47 2010 +0000
xfs: reclaim all inodes by background tree walks
We cannot do direct inode reclaim without taking the flush lock to
ensure that we do not reclaim an inode under IO. We check the inode
is clean before doing direct reclaim, but this is not good enough
because the inode flush code marks the inode clean once it has
copied the in-core dirty state to the backing buffer.
It is the flush lock that determines whether the inode is still
under IO, even though it is marked clean, and the inode is still
required at IO completion so we can't reclaim it even though it is
clean in core. Hence the requirement that we need to take the flush
lock even on clean inodes because this guarantees that the inode
writeback IO has completed and it is safe to reclaim the inode.
With delayed write inode flushing, we coul dend up waiting a long
time on the flush lock even for a clean inode. The background
reclaim already handles this efficiently, so avoid all the problems
by killing the direct reclaim path altogether.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit 018027be90a6946e8cf3f9b17b5582384f7ed117
Author: Dave Chinner <david at fromorbit.com>
Date: Sun Jan 10 23:51:46 2010 +0000
xfs: Avoid inodes in reclaim when flushing from inode cache
The reclaim code will handle flushing of dirty inodes before reclaim
occurs, so avoid them when determining whether an inode is a
candidate for flushing to disk when walking the radix trees. This
is based on a test patch from Christoph Hellwig.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
commit c8e20be020f234c8d492927a424a7d8bbefd5b5d
Author: Dave Chinner <david at fromorbit.com>
Date: Sun Jan 10 23:51:45 2010 +0000
xfs: reclaim inodes under a write lock
Make the inode tree reclaim walk exclusive to avoid races with
concurrent sync walkers and lookups. This is a version of a patch
posted by Christoph Hellwig that avoids all the code duplication.
Signed-off-by: Dave Chinner <david at fromorbit.com>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Alex Elder <aelder at sgi.com>
-----------------------------------------------------------------------
Summary of changes:
fs/xfs/linux-2.6/xfs_buf.c | 167 ++++++++++++++++++++++++++++++-
fs/xfs/linux-2.6/xfs_buf.h | 25 +----
fs/xfs/linux-2.6/xfs_lrw.c | 47 ---------
fs/xfs/linux-2.6/xfs_lrw.h | 3 -
fs/xfs/linux-2.6/xfs_super.c | 21 ++---
fs/xfs/linux-2.6/xfs_sync.c | 208 +++++++++++++++++++---------------------
fs/xfs/linux-2.6/xfs_sync.h | 3 +-
fs/xfs/linux-2.6/xfs_trace.h | 80 +++++++++++++++
fs/xfs/quota/xfs_qm_syscalls.c | 2 +-
fs/xfs/xfs_ag.h | 16 +--
fs/xfs/xfs_alloc.c | 94 +++++++++---------
fs/xfs/xfs_alloc_btree.c | 9 ++-
fs/xfs/xfs_attr.c | 2 +-
fs/xfs/xfs_attr.h | 1 -
fs/xfs/xfs_bmap.c | 15 ++--
fs/xfs/xfs_bmap_btree.c | 2 +-
fs/xfs/xfs_bmap_btree.h | 1 -
fs/xfs/xfs_dfrag.c | 149 ++++++++++++++++++++++------
fs/xfs/xfs_dfrag.h | 3 -
fs/xfs/xfs_dir2_node.c | 2 +-
fs/xfs/xfs_dir2_node.h | 2 -
fs/xfs/xfs_filestream.c | 42 +++------
fs/xfs/xfs_filestream.h | 28 +++++-
fs/xfs/xfs_fsops.c | 42 ++++----
fs/xfs/xfs_ialloc.c | 60 +++++------
fs/xfs/xfs_iget.c | 11 +-
fs/xfs/xfs_inode.c | 34 +++++--
fs/xfs/xfs_itable.c | 4 -
fs/xfs/xfs_log.c | 67 ++++++-------
fs/xfs/xfs_log_priv.h | 5 -
fs/xfs/xfs_log_recover.c | 211 ++++++++++++++--------------------------
fs/xfs/xfs_log_recover.h | 23 ++---
fs/xfs/xfs_mount.c | 121 +++++++++++++++++++----
fs/xfs/xfs_mount.h | 22 ++---
fs/xfs/xfs_mru_cache.c | 2 +-
fs/xfs/xfs_mru_cache.h | 1 -
fs/xfs/xfs_rtalloc.c | 2 +
fs/xfs/xfs_rw.c | 113 ---------------------
fs/xfs/xfs_rw.h | 3 -
fs/xfs/xfs_trans_ail.c | 19 ++--
40 files changed, 901 insertions(+), 761 deletions(-)
hooks/post-receive
--
XFS development tree
More information about the xfs
mailing list