Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Oct 2006 11:16:31 +0800
From:      David Xu <davidxu@freebsd.org>
To:        freebsd-current@freebsd.org
Subject:   Re: Thread stuck in aioprn
Message-ID:  <200610061116.31469.davidxu@freebsd.org>
In-Reply-To: <20061006001418.GA84293@xor.obsecurity.org>
References:  <20061004203715.GA38692@xor.obsecurity.org> <20061006001418.GA84293@xor.obsecurity.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--Boundary-00=_PqcJFw98v0x3/yc
Content-Type: text/plain;
  charset="gb2312"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On Friday 06 October 2006 08:14, Kris Kennaway wrote:

> FYI, this has recurred, so it seems to be an easy problem to trigger.
>
> Kris

can you try attached patch ? it disables support for non-disk files,
I suspect the test passed non-disk file handle to aio, and caused
the problem.

David Xu

--Boundary-00=_PqcJFw98v0x3/yc
Content-Type: text/x-diff;
  charset="gb2312";
  name="vfs_aio.c.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
	filename="vfs_aio.c.diff"

Index: vfs_aio.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/vfs_aio.c,v
retrieving revision 1.227
diff -u -r1.227 vfs_aio.c
--- vfs_aio.c	24 Sep 2006 04:47:47 -0000	1.227
+++ vfs_aio.c	6 Oct 2006 03:13:40 -0000
@@ -1331,6 +1331,7 @@
 	struct socket *so;
 	struct aiocblist *aiocbe, *cb;
 	struct kaioinfo *ki;
+	struct vnode *vp;
 	struct kevent kev;
 	struct sockbuf *sb;
 	int opcode;
@@ -1410,6 +1411,18 @@
 	default:
 		error = fget(td, fd, &fp);
 	}
+
+	if (error == 0) {
+		/* XXX Only block device and disk file is supported */
+		if (fp->f_type != DTYPE_VNODE)
+			error = ENOTSUP;
+		else {
+			vp = fp->f_vnode;
+			if (vp->v_type != VREG && !vn_isdisk(vp, &error))
+				error = ENOTSUP;
+		}
+	}
+
 	if (error) {
 		uma_zfree(aiocb_zone, aiocbe);
 		suword(&job->_aiocb_private.error, error);

--Boundary-00=_PqcJFw98v0x3/yc--



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