On Tue, 02 Dec 2008 00:42:05 +1100, Christoph Hellwig <hch@xxxxxxxxxxxxx>
On Mon, Dec 01, 2008 at 05:34:39PM +1100, Barry Naujok wrote:
xfs_repair is the main culprit when getting disk extents which aren't
properly aligned in memory. This patch does not call
xfs_bmbt_disk_get_all directly anymore but does an unaligned get on
the disk extent record and calls xfs_bmbt_get_all which is host-based
like the rest of the kernel routines do.
What about just doin the get_unaligned in xfs_bmbt_disk_get_all? That
way we could just use it everywhere. The only users that don't need
the get_unaligned are in the tracing code, and I don't think we should
be worried about that little bit of overhead.
@@ -277,21 +277,17 @@ convert_extent(
And then we could replace this helper with a direct call to
xfs_bmbt_disk_get_all as the caller would be much cleaner with a
xfs_bmbt_irec_t on the stack anyway..
It's a libxfs/kernel function, so ideally, it should be also ported
into the kernel space and possible kernel cleanups along with it.
--- a/xfsprogs/repair/dino_chunks.c 2008-12-01 17:10:37.000000000 +1100
+++ b/xfsprogs/repair/dino_chunks.c 2008-12-01 16:11:11.549834281 +1100
@@ -609,7 +609,8 @@ process_inode_chunk(
if (blks_per_cluster == 0)
blks_per_cluster = 1;
cluster_count = XFS_INODES_PER_CHUNK / inodes_per_cluster;
- ASSERT(cluster_count > 0);
+ if (cluster_count == 0)
+ cluster_count = 1;
I can't see how this is related.
Another IA64 fix.