Patch Name: PHKL_10288 Patch Description: s700 10.20 Buffer cache cumulative patch Creation Date: 97/03/04 Post Date: 97/03/07 Hardware Platforms - OS Releases: s700: 10.20 Products: N/A Filesets: OS-Core.CORE-KRN Automatic Reboot?: Yes Status: General Superseded Critical: Yes PHKL_10288: PANIC PHKL_9931: HANG PHKL_9361: PANIC PHKL_8953: HANG PHKL_8331: CORRUPTION Path Name: /hp-ux_patches/s700/10.X/PHKL_10288 Symptoms: PHKL_10288: Panic trap 15 in bwrite() under heavy disk I/O stress. PHKL_9931: VxFS hangs waiting for I/O to finish.. PHKL_9361: MP machine used as a nfs client panics with: panic: (display==0xb800, flags==0x0) Data page fault panic stack: crash event was a panic panic+0x10 report_trap_or_int_and_panic+0x8c trap+0xbfc $call_trap+0x20 binvalfree_vfs+0x5c rinval+0x10 nfs_unmount+0x20 umount_vfs+0x5c umount_root+0x20 umount+0x98 syscall+0x1a4 PHKL_8953: The K400 4-way suddenly stopped to work. The user heavily accessed vxfs snapshot filesystem and have done sync's in parallel. We TOC'ed the system. PHKL_8331: Data loss with UFS files using fragments. Defect Description: PHKL_10288: A buffer arrives in bwrite() with B_ASYNC/B_DELWRI and B_INVAL on and bp-vp == 0 (buffer disowned). On attempting to complete the write, VOP_STRATEGY resolution results in a trap 15 due to null vp. PHKL_9931: Currently, biodone() sets B_DONE and drops the spinlock for the buffer before making a callback to an I/O completion routine, if one has been set up. This means that biowait() can return while the callback is in progress, and the buffer might be released. The solution is to always set B_DONE in finish_biodone() instead of biodone(). PHKL_9361: binvalfree_vfs() has a race window where while one process is checking to see if a vnode buffer can be freed, another process dereferences the vnode pointer from the same buffer. The fix is to use a local variable to avoid the MP race. PHKL_8953: The problem is caused by a defect in getnewbuf procedure in vfs_bio.c file. When Vxfs calls getnewbuf() to acquire a buffer, it passes BX_NONBLOCK in bxflags to avoid potential deadlock. However, the getnewbuf() proceeds to call bwrite() to flush the buffer without checking the bxflags when it finds a B_DELWRI buffer. This causes Vxfs with snapshot to hang. The fix for this defect is to make fix for getnewbuf() in file vfs_bio.c. When getnewbuf() ends up grabbing a DELWRI buffer with BX_NONBLOCK, it will release the buffer and return NULL instead of flushing and returning the buffer. PHKL_8331: There was a code path where dirty buffers could possibly be dropped (not flushed) when extending UFS files using fragments. SR: 1653166496 1653192294 4701327338 4701333419 4701348359 5003353797 Patch Files: /usr/conf/lib/libhp-ux.a(vfs_bio.o) /usr/conf/lib/libufs.a(ufs_alloc.o) what(1) Output: /usr/conf/lib/libhp-ux.a(vfs_bio.o): vfs_bio.c $Date: 97/03/04 07:37:03 $ $Revision: 1.2 6.98.18 $ PATCH_10.20 (PHKL_10288) /usr/conf/lib/libufs.a(ufs_alloc.o): ufs_alloc.c $Date: 96/08/20 14:18:16 $ $Revision: 1 .38.98.7 $ PATCH_10.20 (PHKL_8331) cksum(1) Output: 903647774 28620 /usr/conf/lib/libhp-ux.a(vfs_bio.o) 3255850541 17616 /usr/conf/lib/libufs.a(ufs_alloc.o) Patch Conflicts: None Patch Dependencies: None Hardware Dependencies: None Other Dependencies: None Supersedes: PHKL_8331 PHKL_8953 PHKL_9361 PHKL_9931 Equivalent Patches: PHKL_10284: s700: 10.01 PHKL_10285: s800: 10.01 PHKL_10286: s700: 10.10 PHKL_10287: s800: 10.10 PHKL_10289: s800: 10.20 Patch Package Size: 100 Kbytes Installation Instructions: Please review all instructions and the Hewlett-Packard SupportLine User Guide or your Hewlett-Packard support terms and conditions for precautions, scope of license, restrictions, and, limitation of liability and warranties, before installing this patch. ------------------------------------------------------------ 1. Back up your system before installing a patch. 2. Login as root. 3. Copy the patch to the /tmp directory. 4. Move to the /tmp directory and unshar the patch: cd /tmp sh PHKL_10288 5a. For a standalone system, run swinstall to install the patch: swinstall -x autoreboot=true -x match_target=true \ -s /tmp/PHKL_10288.depot 5b. For a homogeneous NFS Diskless cluster run swcluster on the server to install the patch on the server and the clients: swcluster -i -b This will invoke swcluster in the interactive mode and force all clients to be shut down. WARNING: All cluster clients must be shut down prior to the patch installation. Installing the patch while the clients are booted is unsupported and can lead to serious problems. The swcluster command will invoke an swinstall session in which you must specify: alternate root path - default is /export/shared_root/OS_700 source depot path - /tmp/PHKL_10288.depot To complete the installation, select the patch by choosing "Actions -> Match What Target Has" and then "Actions -> Install" from the Menubar. 5c. For a heterogeneous NFS Diskless cluster: - run swinstall on the server as in step 5a to install the patch on the cluster server. - run swcluster on the server as in step 5b to install the patch on the cluster clients. By default swinstall will archive the original software in /var/adm/sw/patch/PHKL_10288. If you do not wish to retain a copy of the original software, you can create an empty file named /var/adm/sw/patch/PATCH_NOSAVE. Warning: If this file exists when a patch is installed, the patch cannot be deinstalled. Please be careful when using this feature. It is recommended that you move the PHKL_10288.text file to /var/adm/sw/patch for future reference. To put this patch on a magnetic tape and install from the tape drive, use the command: dd if=/tmp/PHKL_10288.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: None