Re: given a pointer to xfs_inode_t, how to determine path?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hey,

On Tue, Sep 18, 2012 at 08:49:57AM +1000, Dave Chinner wrote:
> On Mon, Sep 17, 2012 at 11:21:20AM -0500, Ben Myers wrote:
> > Hi Chris,
> > 
> > On Mon, Sep 17, 2012 at 09:51:37AM -0600, Chris Friesen wrote:
> > > We're running 2.6.27 (upgrading not currently possible, embedded product).
> > >
> > > We had a situation arise where we could see in stack traces that a
> > > number of tasks were stuck in vn_iowait().  That function takes a
> > > pointer to xfs_inode_t.  Given that, would it be possible to work
> > > backwards to determine a filesystem path corresponding to that
> > > inode?  I realize it would likely only go back to the head of the
> > > filesystem, but that would be fine.
> > 
> > Yep, it's possible.
> > 
> > echo t > /proc/sysrq-trigger won't give you the full stack, but you may be able
> > to get an idea of what is going on, well enough to make some guesses as to the
> > culprit.  That's probably your best first step.
> 
> Doesn't give you the path of the inode, or anything that can tell
> you what the inode number is so you could run "find <dir> -inum
> <num>" after the system has recovered.
> 
> > If you have crash installed:
> > 
> > 1) disassemble vn_iowait and find out which register the xfs_inode_t pointer is in.
> > 2) print out the full stacks of all the processes in the system. 'bt -f', I think.
> 
> 'bt -F <pid>' tells you what entries on the stack are of a
> particular symbol. i.e. they'll show up as [xfs_inode] instead of a
> number for all addresses from inside the xfs inode slab cache.
> comapring the output of 'bt -F' and 'bt -f' will get you the inode
> address without needing to be able to read x86-64 assembly
> language...
> 
> > 3) grep for the xfs_inode_t pointer on those stacks.
> 
> Which doesn't get you the path, either. From there, follow to the
> struct inode, and from there to the struct dentry and grab the file
> name, then walk the d_parent dentry links back up to the root and
> construct the path that way.
> 
> Alternatively, I think you can walk from the top down by looking
> that the open files that a given process has and working down to the
> xfs_inode, but it's been a long time since I've had to come from
> that direction. Indeed, you might even be able to use lsof to do
> this and get an idea from userspace what files are currently
> open on the hung processes.

Yep, I misunderstood the question.  I didn't mean to mislead you Chris!
Really!  ;)

-Ben

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs


[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux