> Steve Lord <lord@xxxxxxx> wrote:
>
> > Maybe scattering prinks through the xfs_readsb will tell us something
> > else.
>
> ok - i have found the place where it hangs (by the help of lots of
> printk's and at the end also delays :-) - it loops in xfs_xlatesb
> through the while loop taking the "if (arch == ARCH_NOCONVERT" and
> the "if (dir>0) {" (not the "else" one in both cases) ... does this
> help you in any way ? - should i print out any variables there ?
>
> so what next ?
>
My cheap answer is we wait for the Australians who did the endian conversion
work to come in to work. A big endian version of this code has booted but
any changes this required have not been put back into the tree, I suspect
something in this area, since this code is dealing with byte swapping
and should be a noop in your case.
You could replace this code:
sbp = XFS_BUF_TO_SBP(bp);
xfs_xlatesb(XFS_BUF_PTR(bp), &(mp->m_sb), 1, ARCH_CONVERT,
XFS_SB_ALL_BITS);
if (error = xfs_mount_validate_sb(mp, &(mp->m_sb))) {
cmn_err(CE_WARN, "XFS: SB validate failed\n");
goto err;
}
mp->m_sb_bp = bp;
With this code:
sbp = XFS_BUF_TO_SBP(bp);
if (error = xfs_mount_validate_sb(mp, sbp)) {
goto err;
}
mp->m_sb_bp = bp;
mp->m_sb = *sbp; /* bcopy structure */
and see what happens. In theory you do not need the conversion.
Steve
|