Module Name: src Committed By: riz Date: Wed Nov 2 20:11:12 UTC 2011
Modified Files: src/sys/fs/puffs [netbsd-5]: puffs_msgif.c puffs_node.c puffs_vfsops.c puffs_vnops.c Log Message: Pull up following revision(s) (requested by manu in ticket #1679): sys/fs/puffs/puffs_vnops.c: revision 1.157 sys/fs/puffs/puffs_vnops.c: revision 1.158 sys/fs/puffs/puffs_vnops.c: revision 1.159 sys/fs/puffs/puffs_vfsops.c: revision 1.97 sys/fs/puffs/puffs_vfsops.c: revision 1.99 sys/fs/puffs/puffs_vnops.c: revision 1.160 sys/fs/puffs/puffs_vfsops.c: revision 1.100 sys/miscfs/syncfs/sync_subr.c: revision 1.47 sys/fs/puffs/puffs_node.c: revision 1.21 sys/fs/puffs/puffs_node.c: revision 1.22 sys/fs/puffs/puffs_msgif.c: revision 1.88 sys/fs/puffs/puffs_msgif.c: revision 1.89 sys/fs/puffs/puffs_vnops.c: revision 1.156 Make sure ioflush does not sleep in PUFFS code path, waiting for a mutex, a memory allocation, or a response from the filesystem. This avoids deadlocks in the following situations: 1) when memory is low: ioflush waits the fileystem, the fielsystem waits for memory 2) when the filesystem does not respond (e.g.: network outage ona distributed filesystem) Fix the build that was broken by struct lwp *updateproc reference in RUMP-visible code. Instead of checking that updateproc (aka ioflush, aka syncer) will not sleep in PUFFS code, I check for any kernel thread: after all none of them are designed to hang awaiting for a remote filesystem operation to complete. Roll back the change that forced kernel threads to not sleep in PUFFS. The change does not make consensus, since only pagedaemon should need it. Other threads will tolerate sleeping, and problems here are only symptoms that something is going wrong in memory management. The cause, not the symptoms, need to be fixed. Make sure pagedaemon does not sleep for memory in puffs_vnop_sleep. Add KASSERT on any sleeping memory allocation to check it cannot happen again. Remove #ifdef DIAGNOSTIC guards around KASSERT, as the macro contains them To generate a diff of this commit: cvs rdiff -u -r1.72.4.4 -r1.72.4.5 src/sys/fs/puffs/puffs_msgif.c cvs rdiff -u -r1.13.10.2 -r1.13.10.3 src/sys/fs/puffs/puffs_node.c cvs rdiff -u -r1.81.8.2 -r1.81.8.3 src/sys/fs/puffs/puffs_vfsops.c cvs rdiff -u -r1.129.4.10 -r1.129.4.11 src/sys/fs/puffs/puffs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.