[03:51:31] --- jaltman has left: Replaced by new connection [03:51:31] --- jaltman has become available [04:56:34] --- mdionne has become available [05:27:50] --- matt has become available [06:22:37] --- matt has left [06:51:04] --- Russ has become available [07:09:37] --- matt has become available [07:09:43] --- matt has left [07:32:42] --- Simon Wilkinson has become available [07:50:50] Simon, I've been looking at Hartmut's problem. There are two problems that I see immediately. rx_nPackets is only being computed properly in the TSFPQ case so we have no idea how many packets have been allocated on the system. The second issue is that the initial allocation appears to be 97 packets which is smaller than the new maximum window size. There is a comment in rx.h that the initial allocation should be twice the window size. The rxdebug output shows that a very large number of packet reclaims are being recorded. That happens on the Unix client during a rxi_ReceiveDataPacket where the client calls rxi_ClearReceiveQueue on the current call because the client can't safely allocate more packets at the time and is afraid of reaching a panic condition if there are no free packets [07:52:22] I've given a patch to Hartmut to try that will at the very least count rx_nPackets in all cases and increase the initial packet allocation to match the increase in the max window size which is currently 128 on 1.5. The initial packet allocation was from the days when the window size was 16 [07:54:40] Would anyone object to adding a rxdebug interface to provide access to the Process and Peer RPC statistics? [08:02:17] --- Simon Wilkinson has left [08:03:50] --- matt has become available [08:56:27] rxdebug interface: if it requires a wire change, needs to standardize it [13:23:21] --- matt has left [13:50:03] This one has me stumped -- we are panicing later in the call to vfs_unbusy(): 762 /* 763 * Check to see if the vnode has been mounted on; 764 * if so find the root of the mounted filesystem. 765 */ 766 while (dp->v_type == VDIR && (mp = dp->v_mountedhere) && 767 (cnp->cn_flags & NOCROSSMOUNT) == 0) { 768 if (vfs_busy(mp, 0)) 769 continue; 770 vput(dp); 771 VFS_UNLOCK_GIANT(vfslocked); 772 vfslocked = VFS_LOCK_GIANT(mp); 773 if (dp != ndp->ni_dvp) 774 vput(ndp->ni_dvp); 775 else 776 vrele(ndp->ni_dvp); 777 VFS_UNLOCK_GIANT(dvfslocked); 778 dvfslocked = 0; 779 vref(vp_crossmp); 780 ndp->ni_dvp = vp_crossmp; 781 error = VFS_ROOT(mp, compute_cn_lkflags(mp, cnp->cn_lkflags), 782 &tdp); 783 vfs_unbusy(mp); Looking more carefully, it looks like this is because mp is now a pointer to garbage: (kgdb) p mp $43 = (struct mount *) 0xffffff8000acd585 (kgdb) p dp->v_un->vu_mount $44 = (struct mount *) 0xffffff0002a25000 (v_mountedhere is a macro for v_un.vu_mount) dp is a UFS vnode; presumably we are attempting to cross into AFS (the full trace is through an lstat() syscall and involves nothing from libafs.ko). I just don't see how our afs_root() could corrupt the mp pointer. [14:04:12] --- Simon Wilkinson has become available [14:13:56] --- deason has become available [14:38:53] --- Russ has left: Disconnected [14:55:29] --- matt has become available [14:59:49] --- Russ has become available [14:59:54] --- Russ has left: Disconnected [15:10:43] --- Russ has become available [15:15:06] --- Simon Wilkinson has left [17:30:54] --- pod has become available [17:33:34] --- pod has left [17:35:13] --- jaltman has left: Disconnected [17:35:21] --- jaltman has become available [17:41:01] --- pod has become available [18:52:37] Huh, Matt's commit a123bd8ccd introduced a lot of ifndef FBSD80'd calls to afs_PutVCache(). Anyone know why? [20:21:51] --- mdionne has left [20:56:41] --- Born Fool has become available [21:23:13] --- Born Fool has left [23:08:48] --- deason has left