Patch Name: PHKL_11730 Patch Description: s700 10.20 Buffer cache cumulative patch Creation Date: 97/07/11 Post Date: 97/07/17 Hardware Platforms - OS Releases: s700: 10.20 Products: N/A Filesets: OS-Core.CORE-KRN Automatic Reboot?: Yes Status: General Superseded Critical: Yes PHKL_11730: PANIC PHKL_10953: HANG PHKL_10288: PANIC PHKL_9931: HANG PHKL_9361: PANIC PHKL_8953: HANG PHKL_8331: CORRUPTION Path Name: /hp-ux_patches/s700/10.X/PHKL_11730 Symptoms: PHKL_11730: Data page fault in bwrite. PHKL_10953: Severe system hang: the crash dump (TOC) would show many threads waiting for the filesystem alpha semaphore. The kernel stack trace of the thread owning filesys_sema would show bc_yield() calling swtch(). 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_11730: Conditions needed to be re-checked after acquiring lock. Functions changed: bflush1, bflush_vfs, binval, blkflush, bpurge, ogetblk and syncip_flush_cache PHKL_10953: The bc_yield() buffer cache routine was calling swtch() without first releasing the file-system alpha semaphore. This defect would impact mainly systems using a large buffer cache. 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 4701353102 4701360925 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/07/10 11:37:43 $ $Revision: 1.2 6.98.20 $ PATCH_10.20 (PHKL_11730) /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: 1295294176 28944 /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 PHKL_10288 PHKL_10953 Equivalent Patches: PHKL_11731: s800: 10.20 Patch Package Size: 110 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_11730 5a. For a standalone system, run swinstall to install the patch: swinstall -x autoreboot=true -x match_target=true \ -s /tmp/PHKL_11730.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_11730.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_11730. 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_11730.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_11730.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: None