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(
> xfs_dfilblks_t *cp,
> int *fp)
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..
> --- 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.