We need to go back through time, reviewing the history for this thread. To do this, we need the stack traceback. As a reminder, here it is. $c complete_panic(0xf0049460,0xf05d03ac,0xf05d0238,0x3,0x0,0x1) + 10c do_panic(?) + 1c vcmn_err(0xf015f7a8,0xf05d03ac,0xf05d03ac,0x3cad8,0x2,0x3) cmn_err(0x3,0xf015f7a8,0x0,0x18,0x18,0xf0152400) + 1c die(0x9,0xf05d04c4,0x3,0x3a6,0x2,0xf015f7a8) + 78 trap(0x9,0xf05d04c4,0xf01822d8,0x3a6,0x2,0x0) + 598 fault(?) + 84 mutex_enter(0x0,0xd,0x64,0x1,0xd,0xf05d06ec) lookuppn( 0xf05d06e4 ,0x0,0xf05d06ec,0x0,0x0,0xfc01dd14) + 148 lookupname(0x0,0x0,0x1,0x0,0xf05d07f4,0x0) + 28 vn_open(0x3cad8,0x0,0x3,0xb40,0xf05d08ac,0x0) + a4 copen(0x3cad8,0x3,0xb48,0xf05d0920,0x3cad8,0xf0156628) + 70 syscall(0xf0160f3c) + 3e4 From this, we see that fm_flb made a system call, requesting to open or create a file. copen() is a common routine used to open and create files. It calls vn_open() to open the associated vnode. vn_open() calls lookupname() , which collects the pathname of the file to open. lookupname() calls lookuppn() , which walks each component of the pathname, finally reaching the final component. The arguments to each of these routines, per the source, are as follows . copen (fname, filemode, createmode, rvp) vn_open (pnamep, seg, filemode, createmode, vpp, crwhy) lookupname (fnamep, seg, followlink, dirvpp, compvpp) lookuppn (pnp, followlink, dirvpp, compvpp) From this, we can guess at what most of the arguments might be. The letter p used at the end of a variable name usually means "pointer." Sometimes, as done here, you'll see double p's, which usually means "pointer to a pointer." So, vpp is actually a pointer to a vnode pointer, and compvpp is the pointer to the vnode pointer for the final component of the pathname. As you can tell, you really need the source code at this point. However, let's see what we can do without it. |