From owner-svn-src-head@FreeBSD.ORG Sun Jul 12 17:07:35 2009 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BD2131065693; Sun, 12 Jul 2009 17:07:35 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9090C8FC18; Sun, 12 Jul 2009 17:07:35 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6CH7Zkj090334; Sun, 12 Jul 2009 17:07:35 GMT (envelope-from rmacklem@svn.freebsd.org) Received: (from rmacklem@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6CH7ZHa090332; Sun, 12 Jul 2009 17:07:35 GMT (envelope-from rmacklem@svn.freebsd.org) Message-Id: <200907121707.n6CH7ZHa090332@svn.freebsd.org> From: Rick Macklem Date: Sun, 12 Jul 2009 17:07:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195642 - head/sys/fs/nfs X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Jul 2009 17:07:36 -0000 Author: rmacklem Date: Sun Jul 12 17:07:35 2009 New Revision: 195642 URL: http://svn.freebsd.org/changeset/base/195642 Log: Add calls to the experimental nfs client for the case of an "intr" mount, so that signals that aren't supposed to terminate RPCs in progress are masked off during the RPC. Approved by: re (kensmith), kib (mentor) Modified: head/sys/fs/nfs/nfs_commonkrpc.c Modified: head/sys/fs/nfs/nfs_commonkrpc.c ============================================================================== --- head/sys/fs/nfs/nfs_commonkrpc.c Sun Jul 12 17:02:17 2009 (r195641) +++ head/sys/fs/nfs/nfs_commonkrpc.c Sun Jul 12 17:07:35 2009 (r195642) @@ -404,7 +404,7 @@ newnfs_request(struct nfsrv_descript *nd { u_int32_t *tl; time_t waituntil; - int i, j, set_uid = 0; + int i, j, set_uid = 0, set_sigset = 0; int trycnt, error = 0, usegssname = 0, secflavour = AUTH_SYS; u_int16_t procnum; u_int trylater_delay = 1; @@ -416,6 +416,7 @@ newnfs_request(struct nfsrv_descript *nd struct nfsreq *rep = NULL; char *srv_principal = NULL; uid_t saved_uid = (uid_t)-1; + sigset_t oldset; if (xidp != NULL) *xidp = 0; @@ -425,6 +426,12 @@ newnfs_request(struct nfsrv_descript *nd return (ESTALE); } + /* For client side interruptible mounts, mask off the signals. */ + if (nmp != NULL && td != NULL && NFSHASINT(nmp)) { + newnfs_set_sigmask(td, &oldset); + set_sigset = 1; + } + /* * XXX if not already connected call nfs_connect now. Longer * term, change nfs_mount to call nfs_connect unconditionally @@ -507,6 +514,8 @@ newnfs_request(struct nfsrv_descript *nd cred->cr_uid = saved_uid; if (auth == NULL) { m_freem(nd->nd_mreq); + if (set_sigset) + newnfs_restore_sigmask(td, &oldset); return (EACCES); } bzero(&ext, sizeof(ext)); @@ -598,6 +607,8 @@ tryagain: AUTH_DESTROY(auth); if (rep != NULL) FREE((caddr_t)rep, M_NFSDREQ); + if (set_sigset) + newnfs_restore_sigmask(td, &oldset); return (error); } @@ -728,6 +739,8 @@ tryagain: AUTH_DESTROY(auth); if (rep != NULL) FREE((caddr_t)rep, M_NFSDREQ); + if (set_sigset) + newnfs_restore_sigmask(td, &oldset); return (0); nfsmout: mbuf_freem(nd->nd_mrep); @@ -735,6 +748,8 @@ nfsmout: AUTH_DESTROY(auth); if (rep != NULL) FREE((caddr_t)rep, M_NFSDREQ); + if (set_sigset) + newnfs_restore_sigmask(td, &oldset); return (error); }