From owner-cvs-src-old@FreeBSD.ORG Tue Oct 12 17:04:41 2010 Return-Path: Delivered-To: cvs-src-old@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 765921065787 for ; Tue, 12 Oct 2010 17:04:41 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 635AA8FC24 for ; Tue, 12 Oct 2010 17:04:41 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.4/8.14.4) with ESMTP id o9CH4fcP099859 for ; Tue, 12 Oct 2010 17:04:41 GMT (envelope-from avg@repoman.freebsd.org) Received: (from svn2cvs@localhost) by repoman.freebsd.org (8.14.4/8.14.4/Submit) id o9CH4ful099858 for cvs-src-old@freebsd.org; Tue, 12 Oct 2010 17:04:41 GMT (envelope-from avg@repoman.freebsd.org) Message-Id: <201010121704.o9CH4ful099858@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: svn2cvs set sender to avg@repoman.freebsd.org using -f From: Andriy Gapon Date: Tue, 12 Oct 2010 17:04:21 +0000 (UTC) To: cvs-src-old@freebsd.org X-FreeBSD-CVS-Branch: HEAD Subject: cvs commit: src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs zfs_vnops.c X-BeenThere: cvs-src-old@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: **OBSOLETE** CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Oct 2010 17:04:41 -0000 avg 2010-10-12 17:04:21 UTC FreeBSD src repository Modified files: sys/cddl/contrib/opensolaris/uts/common/fs/zfs zfs_vnops.c Log: SVN rev 213730 on 2010-10-12 17:04:21Z by avg zfs + sendfile: do not produce partially valid pages for vnode's tail Since r212650 and before this change sendfile(2) could produce a partially valid page for a trailing portion of a ZFS vnode. vm_fault() always wants to see a fully valid page even if it's the last page that partially extends beyond vnode's end. Otherwise it calls vop_getpages() to bring in the page. In the case of ZFS this means that the data is read from the page into the same page and this breaks checks in ZFS mappedread() - a thread that set VPO_BUSY on the page in vm_fault() will get blocked forever waiting for it to be cleared. Many thanks to Kai and Jeremy for reproducing the issue and providing important debugging information and help. Reported by: Kai Gallasch , Jeremy Chadwick Tested by: Kai Gallasch , Jeremy Chadwick Reviewed by: kib MFC after: 3 days To-Do: apply the same treatment to tmpfs + sendfile Revision Changes Path 1.82 +6 -3 src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c