]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
xfs: fix use of agi_newino in finobt lookup
authorDave Chinner <david@fromorbit.com>
Mon, 29 Sep 2014 00:43:15 +0000 (10:43 +1000)
committerDave Chinner <david@fromorbit.com>
Mon, 29 Sep 2014 00:43:15 +0000 (10:43 +1000)
Sparse warns that we are passing the big-endian valueo f agi_newino
to the initial btree lookup function when trying to find a new
inode. This is wrong - we need to pass the host order value, not the
disk order value. This will adversely affect the next inode
allocated, but given that the free inode btree is usually much
smaller than the allocated inode btree it is much less likely to be
a performance issue if we start the search in the wrong place.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/libxfs/xfs_ialloc.c

index d213a2eae95e0984ea5f4045c15f4dfd1e9d857f..23dcb72fc5e688f7d550f4cd79b7f4fbac8ec7b3 100644 (file)
@@ -1076,8 +1076,8 @@ xfs_dialloc_ag_finobt_newino(
        int i;
 
        if (agi->agi_newino != cpu_to_be32(NULLAGINO)) {
-               error = xfs_inobt_lookup(cur, agi->agi_newino, XFS_LOOKUP_EQ,
-                                        &i);
+               error = xfs_inobt_lookup(cur, be32_to_cpu(agi->agi_newino),
+                                        XFS_LOOKUP_EQ, &i);
                if (error)
                        return error;
                if (i == 1) {
@@ -1085,7 +1085,6 @@ xfs_dialloc_ag_finobt_newino(
                        if (error)
                                return error;
                        XFS_WANT_CORRUPTED_RETURN(i == 1);
-
                        return 0;
                }
        }