593efaf9f7
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 |
||
---|---|---|
.. | ||
bus_if.m | ||
capabilities.conf | ||
clock_if.m | ||
cpufreq_if.m | ||
device_if.m | ||
dtio_kdtrace.c | ||
genassym.sh | ||
imgact_aout.c | ||
imgact_elf32.c | ||
imgact_elf64.c | ||
imgact_elf.c | ||
imgact_gzip.c | ||
imgact_shell.c | ||
inflate.c | ||
init_main.c | ||
init_sysent.c | ||
kern_acct.c | ||
kern_alq.c | ||
kern_clock.c | ||
kern_clocksource.c | ||
kern_condvar.c | ||
kern_conf.c | ||
kern_cons.c | ||
kern_context.c | ||
kern_cpu.c | ||
kern_cpuset.c | ||
kern_ctf.c | ||
kern_descrip.c | ||
kern_dtrace.c | ||
kern_environment.c | ||
kern_et.c | ||
kern_event.c | ||
kern_exec.c | ||
kern_exit.c | ||
kern_fail.c | ||
kern_ffclock.c | ||
kern_fork.c | ||
kern_gzio.c | ||
kern_hhook.c | ||
kern_idle.c | ||
kern_intr.c | ||
kern_jail.c | ||
kern_khelp.c | ||
kern_kthread.c | ||
kern_ktr.c | ||
kern_ktrace.c | ||
kern_linker.c | ||
kern_lock.c | ||
kern_lockf.c | ||
kern_lockstat.c | ||
kern_loginclass.c | ||
kern_malloc.c | ||
kern_mbuf.c | ||
kern_mib.c | ||
kern_module.c | ||
kern_mtxpool.c | ||
kern_mutex.c | ||
kern_ntptime.c | ||
kern_osd.c | ||
kern_physio.c | ||
kern_pmc.c | ||
kern_poll.c | ||
kern_priv.c | ||
kern_proc.c | ||
kern_prot.c | ||
kern_racct.c | ||
kern_rangelock.c | ||
kern_rctl.c | ||
kern_resource.c | ||
kern_rmlock.c | ||
kern_rwlock.c | ||
kern_sdt.c | ||
kern_sema.c | ||
kern_sharedpage.c | ||
kern_shutdown.c | ||
kern_sig.c | ||
kern_switch.c | ||
kern_sx.c | ||
kern_synch.c | ||
kern_syscalls.c | ||
kern_sysctl.c | ||
kern_tc.c | ||
kern_thr.c | ||
kern_thread.c | ||
kern_time.c | ||
kern_timeout.c | ||
kern_umtx.c | ||
kern_uuid.c | ||
kern_xxx.c | ||
ksched.c | ||
link_elf_obj.c | ||
link_elf.c | ||
linker_if.m | ||
Make.tags.inc | ||
Makefile | ||
makesyscalls.sh | ||
md4c.c | ||
md5c.c | ||
p1003_1b.c | ||
posix4_mib.c | ||
sched_4bsd.c | ||
sched_ule.c | ||
serdev_if.m | ||
stack_protector.c | ||
subr_acl_nfs4.c | ||
subr_acl_posix1e.c | ||
subr_autoconf.c | ||
subr_blist.c | ||
subr_bufring.c | ||
subr_bus_dma.c | ||
subr_bus.c | ||
subr_busdma_bufalloc.c | ||
subr_clock.c | ||
subr_devstat.c | ||
subr_disk.c | ||
subr_dummy_vdso_tc.c | ||
subr_eventhandler.c | ||
subr_fattime.c | ||
subr_firmware.c | ||
subr_hash.c | ||
subr_hints.c | ||
subr_kdb.c | ||
subr_kobj.c | ||
subr_lock.c | ||
subr_log.c | ||
subr_mbpool.c | ||
subr_mchain.c | ||
subr_module.c | ||
subr_msgbuf.c | ||
subr_param.c | ||
subr_pcpu.c | ||
subr_power.c | ||
subr_prf.c | ||
subr_prof.c | ||
subr_rman.c | ||
subr_rtc.c | ||
subr_sbuf.c | ||
subr_scanf.c | ||
subr_sglist.c | ||
subr_sleepqueue.c | ||
subr_smp.c | ||
subr_stack.c | ||
subr_syscall.c | ||
subr_taskqueue.c | ||
subr_trap.c | ||
subr_turnstile.c | ||
subr_uio.c | ||
subr_unit.c | ||
subr_witness.c | ||
sys_capability.c | ||
sys_generic.c | ||
sys_pipe.c | ||
sys_procdesc.c | ||
sys_process.c | ||
sys_socket.c | ||
syscalls.c | ||
syscalls.master | ||
systrace_args.c | ||
sysv_ipc.c | ||
sysv_msg.c | ||
sysv_sem.c | ||
sysv_shm.c | ||
tty_compat.c | ||
tty_info.c | ||
tty_inq.c | ||
tty_outq.c | ||
tty_pts.c | ||
tty_tty.c | ||
tty_ttydisc.c | ||
tty.c | ||
uipc_accf.c | ||
uipc_cow.c | ||
uipc_debug.c | ||
uipc_domain.c | ||
uipc_mbuf2.c | ||
uipc_mbuf.c | ||
uipc_mqueue.c | ||
uipc_sem.c | ||
uipc_shm.c | ||
uipc_sockbuf.c | ||
uipc_socket.c | ||
uipc_syscalls.c | ||
uipc_usrreq.c | ||
vfs_acl.c | ||
vfs_aio.c | ||
vfs_bio.c | ||
vfs_cache.c | ||
vfs_cluster.c | ||
vfs_default.c | ||
vfs_export.c | ||
vfs_extattr.c | ||
vfs_hash.c | ||
vfs_init.c | ||
vfs_lookup.c | ||
vfs_mount.c | ||
vfs_mountroot.c | ||
vfs_subr.c | ||
vfs_syscalls.c | ||
vfs_vnops.c | ||
vnode_if.src |