From owner-freebsd-bugs@FreeBSD.ORG Tue Jan 31 13:00:18 2006 Return-Path: X-Original-To: freebsd-bugs@hub.freebsd.org Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 5ABFC16A420 for ; Tue, 31 Jan 2006 13:00:18 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id DE2B443D46 for ; Tue, 31 Jan 2006 13:00:17 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k0VD0H5g052929 for ; Tue, 31 Jan 2006 13:00:17 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k0VD0Ha8052928; Tue, 31 Jan 2006 13:00:17 GMT (envelope-from gnats) Date: Tue, 31 Jan 2006 13:00:17 GMT Message-Id: <200601311300.k0VD0Ha8052928@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org From: Yar Tikhiy Cc: Subject: Re: kern/92243: sendfile(2) returns early on files > 4GB X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Yar Tikhiy List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Jan 2006 13:00:18 -0000 The following reply was made to PR kern/92243; it has been noted by GNATS. From: Yar Tikhiy To: bug-followup@FreeBSD.org, dkelly@hiwaay.net Cc: "David G. Lawrence" , alc@FreeBSD.org Subject: Re: kern/92243: sendfile(2) returns early on files > 4GB Date: Tue, 31 Jan 2006 15:49:48 +0300 Just experimented with the issue. It appears easily reproducable on a local filesystem. The problem boils down to the fact that in the following code: sys/kern/uipc_syscalls.c:do_sendfile() 1864: /* 1865: * Calculate the amount to transfer. Not to exceed a page, 1866: * the EOF, or the passed in nbytes. 1867: */ 1868: xfsize = obj->un_pager.vnp.vnp_size - off; obj->un_pager.vnp.vnp_size is somehow truncated to 32 bits when the vnode comes from disk. I added a printf after line 1868 and I saw that for a recently created file, 2^32+10000 bytes in size, obj->un_pager.vnp.vnp_size was the full size of the file. The file's vnode was presumably still cached. However, after a reboot obj->un_pager.vnp.vnp_size for the same file was just 10000. # truncate -s 4294977296 ~ftp/4g # ftp ftp://127.1/4g obj->un_pager.vnp.vnp_size = 4294977296 # reboot ... # ftp ftp://127.1/4g obj->un_pager.vnp.vnp_size = 10000 # rm ~ftp/4g # truncate -s 4294977296 ~ftp/4g # ftp ftp://127.1/4g obj->un_pager.vnp.vnp_size = 4294977296 -- Yar