[Top] [All Lists]

Re: [REVIEW] Fix unaligned accesses in IA64 in xfsprogs

To: "Christoph Hellwig" <hch@xxxxxxxxxxxxx>
Subject: Re: [REVIEW] Fix unaligned accesses in IA64 in xfsprogs
From: "Barry Naujok" <bnaujok@xxxxxxx>
Date: Tue, 02 Dec 2008 10:31:16 +1100
Cc: "xfs@xxxxxxxxxxx" <xfs@xxxxxxxxxxx>
In-reply-to: <20081201134205.GA7528@xxxxxxxxxxxxx>
Organization: SGI
References: <op.ulg0j1bf3jf8g2@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> <20081201134205.GA7528@xxxxxxxxxxxxx>
User-agent: Opera Mail/9.52 (Win32)
On Tue, 02 Dec 2008 00:42:05 +1100, Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote:

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..

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.

<Prev in Thread] Current Thread [Next in Thread>