mirror of
https://github.com/opnsense/src.git
synced 2026-04-27 09:06:49 -04:00
changes in r246417 were incomplete as they did not add explicit calls to sigdeferstop() around all the places that previously passed SBDRY to _sleep(). In addition, nfs_getcacheblk() could trigger a write RPC from getblk() resulting in sigdeferstop() recursing. Rather than manually deferring stop signals in specific places, change the VFS_*() and VOP_*() methods to defer stop signals for filesystems which request this behavior via a new VFCF_SBDRY flag. Note that this has to be a VFC flag rather than a MNTK flag so that it works properly with VFS_MOUNT() when the mount is not yet fully constructed. For now, only the NFS clients are set this new flag in VFS_SET(). A few other related changes: - Add an assertion to ensure that TDF_SBDRY doesn't leak to userland. - When a lookup request uses VOP_READLINK() to follow a symlink, mark the request as being on behalf of the thread performing the lookup (cnp_thread) rather than using a NULL thread pointer. This causes NFS to properly handle signals during this VOP on an interruptible mount. PR: kern/176179 Reported by: Russell Cattelan (sigdeferstop() recursion) Reviewed by: kib MFC after: 1 month |
||
|---|---|---|
| .. | ||
| nfs.h | ||
| nfs_bio.c | ||
| nfs_kdtrace.c | ||
| nfs_krpc.c | ||
| nfs_nfsiod.c | ||
| nfs_node.c | ||
| nfs_subs.c | ||
| nfs_vfsops.c | ||
| nfs_vnops.c | ||
| nfsargs.h | ||
| nfsm_subs.h | ||
| nfsmount.h | ||
| nfsnode.h | ||
| nfsstats.h | ||
| nlminfo.h | ||