Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 Jul 2009 09:35:33 -0400 (EDT)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        Anonymous <swell.k@gmail.com>
Cc:        Kostik Belousov <kostikbel@gmail.com>, Rick Macklem <rmacklem@freebsd.org>, freebsd-current@freebsd.org
Subject:   Re: [newnfs/client] SIGINFO aborts transfer and produces `permission denied'
Message-ID:  <Pine.GSO.4.63.0907180933010.12045@muncher.cs.uoguelph.ca>
In-Reply-To: <86ocrjyrqu.fsf@gmail.com>
References:  <86zlb45px8.fsf@gmail.com> <Pine.GSO.4.63.0907162013570.9851@muncher.cs.uoguelph.ca> <20090717081105.GQ55190@deviant.kiev.zoral.com.ua> <Pine.GSO.4.63.0907171016450.28363@muncher.cs.uoguelph.ca> <86ocrjyrqu.fsf@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help


On Sat, 18 Jul 2009, Anonymous wrote:

>
> Yep, I can reproduce it as easily on 8.0-BETA2 snapshot under qemu
>
> # uname -vm
> FreeBSD 8.0-BETA2 #0: Wed Jul 15 23:25:30 UTC 2009
> root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
>
I'll try to get around to testing it this weekend, but if you'd
like to test the following patch, I think it might fix the problem.

The new krpc only checks NFSMNT_INT at connect and not every rpc.

rick
ps: The line #s assume the other patch you tested is already applied.
--- untested exp. nfs client patch ---
--- fs/nfsclient/nfs_clvfsops.c.sav2	2009-07-18 09:19:07.000000000 -0400
+++ fs/nfsclient/nfs_clvfsops.c	2009-07-18 09:29:14.000000000 -0400
@@ -1037,7 +1037,7 @@
  {
  	struct nfsmount *nmp;
  	struct nfsnode *np;
-	int error, trycnt, ret, clearintr;
+	int error, trycnt, ret;
  	struct nfsvattr nfsva;
  	static u_int64_t clval = 0;

@@ -1152,20 +1152,8 @@
  		nmp->nm_sockreq.nr_vers = NFS_VER2;


-	/*
-	 * For Connection based sockets (TCP,...) do the connect here,
-	 * but make it interruptible, even for non-interuptible mounts.
-	 */
-	if ((nmp->nm_flag & NFSMNT_INT) == 0) {
-		nmp->nm_flag |= NFSMNT_INT;
-		clearintr = 1;
-	} else {
-		clearintr = 0;
-	}
  	if ((error = newnfs_connect(nmp, &nmp->nm_sockreq, cred, td, 0)))
  		goto bad;
-	if (clearintr)
-		nmp->nm_flag &= ~NFSMNT_INT;

  	/*
  	 * A reference count is needed on the nfsnode representing the



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.63.0907180933010.12045>