Hmmm, so the super block got read from disk, but you did not get much
further than this. The super block read comes out of xfs_readsb in
fs/xfs/xfs_mount.c, in this section of code:
XFS_BUF_SET_BRELSE_FUNC(bp,xfs_sb_relse);
XFS_BUF_SET_ADDR(bp, XFS_SB_DADDR);
XFS_BUF_READ(bp);
XFS_BUF_SET_TARGET(bp, mp->m_ddev_targp);
xfsbdstrat(mp, bp);
if (error = xfs_iowait(bp)) {
cmn_err(CE_WARN, "XFS: SB read failed\n");
goto err;
}
/*
* Initialize the mount structure from the superblock.
* But first do some basic consistency checking.
*/
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;
xfs_buf_relse(bp);
ASSERT(XFS_BUF_VALUSEMA(bp) > 0);
return 0;
You got as far as returning from xfs_iowait, but you did not get as
far as the xfs_buf_relse at the end of the function - the first thing
it will end up doing is another pagebuf trace call. There is not a
lot in here which could hang you up - the only possibility I can see
is cmn_err() which is in fs/xfs/linux/xfs_random.c and looks like
this:
void
cmn_err(register int level, char *fmt, ...)
{
char *fp = fmt;
char message[256];
va_list ap;
va_start(ap, fmt);
if (*fmt == '!') fp++;
vsprintf(message, fp, ap);
printk("%s\n", message);
va_end(ap);
}
Possibly this is messing up, but I do not really see how.
Maybe scattering prinks through the xfs_readsb will tell us something
else.
Steve
> Steve Lord <lord@xxxxxxx> wrote:
>
> > Try changing include/linux/page_buf_trace.h to look like this:
> > ...
>
> ok - got it now going on the ppc and here are the results for
> the try of a xfs mount (in the hope that this helps someone
> to get closer to the problem):
>
> page_buf module - Copyright (C) by Silicon Graphics Inc. 2000
> pb 0xc1d2c080 [get] (hold 1 lock 0) misc 0xc38be360
> address 0xc586f200
> offset 0x0 size 0x200 task 0xc39fc000
> flags: NONE LOCKABLE FORECIO
> pb 0xc1d2c080 [no_daddr] (hold 1 lock 0) misc 0xc32dd200
> address 0xc58fa0b4
> offset 0x0 size 0x200 task 0xc39fc000
> flags: MAPPED NONE LOCKABLE MEM_ALLOCATED FORECIO
> pb 0xc1d2c080 [ioreq] (hold 1 lock 0) misc 0x00000000
> address 0xc58fa040
> offset 0x0 size 0x200 task 0xc39fc000
> flags: READ MAPPED NONE LOCKABLE MEM_ALLOCATED FORECIO
> pb 0xc1d2c080 [hold] (hold 2 lock 0) misc 0x00000000
> address 0xc587090b
> offset 0x0 size 0x200 task 0xc39fc000
> flags: READ MAPPED NONE LOCKABLE MEM_ALLOCATED FORECIO
> pb 0xc1d2c080 [rele] (hold 2 lock 0) misc 0xc58d7f44
> address 0xc5870a2c
> offset 0x0 size 0x200 task 0xc39fc000
> flags: READ MAPPED NONE LOCKABLE MEM_ALLOCATED FORECIO
> pb 0xc1d2c080 [iowait] (hold 1 lock 0) misc 0x00000000
> address 0xc58d621c
> offset 0x0 size 0x200 task 0xc39fc000
> flags: READ MAPPED NONE LOCKABLE MEM_ALLOCATED FORECIO
> pb 0xc1d2c080 [done] (hold 1 lock 0) misc 0x00000000
> address 0xc586fc74
> offset 0x0 size 0x200 task 0xc39fc000
> flags: MAPPED LOCKABLE MEM_ALLOCATED FORECIO
> pb 0xc1d2c080 [iowaited] (hold 1 lock 0) misc 0x00000000
> address 0xc58d621c
> offset 0x0 size 0x200 task 0xc39fc000
> flags: MAPPED LOCKABLE MEM_ALLOCATED FORECIO
>
> yes and here it hangs ... if you need any other debugging
> info - just let me know and i'll do my best to provide it
>
> a diff of the code used against the current sgi xfs cvs
> tree from oss.sgi.com can be found at
>
> http://innominate.org/~graichen/projects/xfs-ppc/diff.000802
>
> t
>
> --
> thomas.graichen@xxxxxxxxxxxxx
> technical director innominate AG
> clustering & security networking people
> tel: +49.30.308806-13 fax: -77 web: http://innominate.de pgp: /pgp/tgr
|