Module Name: src Committed By: riz Date: Fri Jul 15 23:41:13 UTC 2011
Modified Files: src/sys/fs/puffs [netbsd-5]: puffs_msgif.c src/sys/rump/librump/rumpkern [netbsd-5]: Makefile.rumpkern emul.c Added Files: src/sys/rump/librump/rumpkern/opt [netbsd-5]: opt_compat_netbsd32.h Log Message: Pull up following revision(s) (requested by manu in ticket #1604): sys/fs/puffs/puffs_msgif.c: revision 1.84 Apply patch from PR kern/44093 by yamt: Interrupt server wait only on certain signals (same set at nfs -i) instead of all signals. According to the PR this helps with "git clone" run on a puffs file system. To generate a diff of this commit: cvs rdiff -u -r1.72.4.3 -r1.72.4.4 src/sys/fs/puffs/puffs_msgif.c cvs rdiff -u -r1.17 -r1.17.4.1 \ src/sys/rump/librump/rumpkern/Makefile.rumpkern cvs rdiff -u -r1.53 -r1.53.4.1 src/sys/rump/librump/rumpkern/emul.c cvs rdiff -u -r0 -r1.1.2.1 \ src/sys/rump/librump/rumpkern/opt/opt_compat_netbsd32.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/fs/puffs/puffs_msgif.c diff -u src/sys/fs/puffs/puffs_msgif.c:1.72.4.3 src/sys/fs/puffs/puffs_msgif.c:1.72.4.4 --- src/sys/fs/puffs/puffs_msgif.c:1.72.4.3 Fri May 20 21:50:09 2011 +++ src/sys/fs/puffs/puffs_msgif.c Fri Jul 15 23:41:13 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: puffs_msgif.c,v 1.72.4.3 2011/05/20 21:50:09 bouyer Exp $ */ +/* $NetBSD: puffs_msgif.c,v 1.72.4.4 2011/07/15 23:41:13 riz Exp $ */ /* * Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: puffs_msgif.c,v 1.72.4.3 2011/05/20 21:50:09 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: puffs_msgif.c,v 1.72.4.4 2011/07/15 23:41:13 riz Exp $"); #include <sys/param.h> #include <sys/atomic.h> @@ -352,17 +352,30 @@ if (__predict_false((park->park_flags & PARKFLAG_WANTREPLY) && (park->park_flags & PARKFLAG_CALL) == 0 && (l->l_flag & LW_PENDSIG) != 0 && sigispending(l, 0))) { - park->park_flags |= PARKFLAG_HASERROR; - preq->preq_rv = EINTR; - if (PUFFSOP_OPCLASS(preq->preq_opclass) == PUFFSOP_VN - && (preq->preq_optype == PUFFS_VN_INACTIVE - || preq->preq_optype == PUFFS_VN_RECLAIM)) { - park->park_preq->preq_opclass |= PUFFSOPFLAG_FAF; - park->park_flags &= ~PARKFLAG_WANTREPLY; - DPRINTF(("puffs_msg_enqueue: converted to FAF %p\n", - park)); - } else { - return; + sigset_t ss; + + /* + * see the comment about signals in puffs_msg_wait. + */ + sigpending1(l, &ss); + if (sigismember(&ss, SIGINT) || + sigismember(&ss, SIGTERM) || + sigismember(&ss, SIGKILL) || + sigismember(&ss, SIGHUP) || + sigismember(&ss, SIGQUIT)) { + park->park_flags |= PARKFLAG_HASERROR; + preq->preq_rv = EINTR; + if (PUFFSOP_OPCLASS(preq->preq_opclass) == PUFFSOP_VN + && (preq->preq_optype == PUFFS_VN_INACTIVE + || preq->preq_optype == PUFFS_VN_RECLAIM)) { + park->park_preq->preq_opclass |= + PUFFSOPFLAG_FAF; + park->park_flags &= ~PARKFLAG_WANTREPLY; + DPRINTF(("puffs_msg_enqueue: " + "converted to FAF %p\n", park)); + } else { + return; + } } } @@ -431,11 +444,31 @@ int puffs_msg_wait(struct puffs_mount *pmp, struct puffs_msgpark *park) { - struct puffs_req *preq = park->park_preq; /* XXX: hmmm */ + lwp_t *l = curlwp; + proc_t *p = l->l_proc; + struct puffs_req *preq = park->park_preq; /* XXX: hmmm */ + sigset_t ss; + sigset_t oss; struct mount *mp = PMPTOMP(pmp); int error = 0; int rv; + /* + * block unimportant signals. + * + * The set of "important" signals here was chosen to be same as + * nfs interruptible mount. + */ + sigfillset(&ss); + sigdelset(&ss, SIGINT); + sigdelset(&ss, SIGTERM); + sigdelset(&ss, SIGKILL); + sigdelset(&ss, SIGHUP); + sigdelset(&ss, SIGQUIT); + mutex_enter(p->p_lock); + sigprocmask1(l, SIG_BLOCK, &ss, &oss); + mutex_exit(p->p_lock); + mutex_enter(&pmp->pmp_lock); puffs_mp_reference(pmp); mutex_exit(&pmp->pmp_lock); @@ -523,6 +556,10 @@ puffs_mp_release(pmp); mutex_exit(&pmp->pmp_lock); + mutex_enter(p->p_lock); + sigprocmask1(l, SIG_SETMASK, &oss, NULL); + mutex_exit(p->p_lock); + return rv; } Index: src/sys/rump/librump/rumpkern/Makefile.rumpkern diff -u src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.17 src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.17.4.1 --- src/sys/rump/librump/rumpkern/Makefile.rumpkern:1.17 Sat Oct 25 22:27:38 2008 +++ src/sys/rump/librump/rumpkern/Makefile.rumpkern Fri Jul 15 23:41:13 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.rumpkern,v 1.17 2008/10/25 22:27:38 apb Exp $ +# $NetBSD: Makefile.rumpkern,v 1.17.4.1 2011/07/15 23:41:13 riz Exp $ # .include "${RUMPTOP}/Makefile.rump" @@ -28,7 +28,7 @@ # sys/kern SRCS+= kern_auth.c kern_descrip.c kern_malloc_stdtype.c kern_module.c \ kern_rate.c kern_stub.c kern_sysctl.c kern_timeout.c \ - kern_uidinfo.c param.c sys_descrip.c sys_generic.c + kern_uidinfo.c param.c sys_descrip.c sys_generic.c sys_sig.c # sys/kern subr (misc) SRCS+= subr_bufq.c subr_callback.c subr_hash.c subr_iostat.c \ Index: src/sys/rump/librump/rumpkern/emul.c diff -u src/sys/rump/librump/rumpkern/emul.c:1.53 src/sys/rump/librump/rumpkern/emul.c:1.53.4.1 --- src/sys/rump/librump/rumpkern/emul.c:1.53 Tue Oct 14 10:42:27 2008 +++ src/sys/rump/librump/rumpkern/emul.c Fri Jul 15 23:41:13 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: emul.c,v 1.53 2008/10/14 10:42:27 pooka Exp $ */ +/* $NetBSD: emul.c,v 1.53.4.1 2011/07/15 23:41:13 riz Exp $ */ /* * Copyright (c) 2007 Antti Kantee. All Rights Reserved. @@ -89,6 +89,8 @@ const char *domainname; int domainnamelen; +const int sigprop[NSIG]; + const struct filterops seltrue_filtops; void @@ -505,13 +507,6 @@ } void -sigpending1(struct lwp *l, sigset_t *ss) -{ - - panic("%s: not implemented", __func__); -} - -void knote_fdclose(int fd) { @@ -651,3 +646,59 @@ panic("%s: not implemented", __func__); } + +int +killpg1(struct lwp *l, ksiginfo_t *ksi, int pgid, int all) +{ + + panic("%s: not implemented", __func__); +} + +int +setucontext(struct lwp *l, const ucontext_t *ucp) +{ + + panic("%s: not implemented", __func__); +} + +void +getucontext(struct lwp *l, ucontext_t *ucp) +{ + + panic("%s: not implemented", __func__); +} + +void +getnanouptime(struct timespec *tsp) +{ + + panic("%s: not implemented", __func__); +} + +void +kpsignal2(struct proc *p, ksiginfo_t *ksi) +{ + + panic("%s: not implemented", __func__); +} + +void +sigclearall(struct proc *p, const sigset_t *mask, ksiginfoq_t *kq) +{ + + panic("%s: not implemented", __func__); +} + +int +sigget(sigpend_t *sp, ksiginfo_t *out, int signo, const sigset_t *mask) +{ + + panic("%s: not implemented", __func__); +} + +void +ksiginfo_queue_drain0(ksiginfoq_t *kq) +{ + + panic("%s: not implemented", __func__); +} Added files: Index: src/sys/rump/librump/rumpkern/opt/opt_compat_netbsd32.h diff -u /dev/null src/sys/rump/librump/rumpkern/opt/opt_compat_netbsd32.h:1.1.2.1 --- /dev/null Fri Jul 15 23:41:13 2011 +++ src/sys/rump/librump/rumpkern/opt/opt_compat_netbsd32.h Fri Jul 15 23:41:13 2011 @@ -0,0 +1 @@ +/* $NetBSD: opt_compat_netbsd32.h,v 1.1.2.1 2011/07/15 23:41:13 riz Exp $ */