From owner-freebsd-fs@FreeBSD.ORG Wed Apr 4 08:38:50 2012 Return-Path: Delivered-To: freebsd-fs@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1F642106564A for ; Wed, 4 Apr 2012 08:38:50 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 5CCC88FC0C for ; Wed, 4 Apr 2012 08:38:49 +0000 (UTC) Received: from porto.starpoint.kiev.ua (porto-e.starpoint.kiev.ua [212.40.38.100]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id LAA22514; Wed, 04 Apr 2012 11:38:40 +0300 (EEST) (envelope-from avg@FreeBSD.org) Received: from localhost ([127.0.0.1]) by porto.starpoint.kiev.ua with esmtp (Exim 4.34 (FreeBSD)) id 1SFLjk-000Mvh-4c; Wed, 04 Apr 2012 11:38:40 +0300 Message-ID: <4F7C088D.4070803@FreeBSD.org> Date: Wed, 04 Apr 2012 11:38:37 +0300 From: Andriy Gapon User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:10.0.3) Gecko/20120317 Thunderbird/10.0.3 MIME-Version: 1.0 To: Attila Nagy References: <4F7BFDD4.6080703@fsn.hu> In-Reply-To: <4F7BFDD4.6080703@fsn.hu> X-Enigmail-Version: 1.4 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: freebsd-fs@FreeBSD.org Subject: Re: SEEK_HOLE and SEEK_DATA does not work on zfs (with test case) X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Apr 2012 08:38:50 -0000 on 04/04/2012 10:52 Attila Nagy said the following: > Hi, > > I've started to experiment with SEEK_HOLE and SEEK_DATA in python on a recent > FreeBSD 9-STABLE/amd64 box and it quickly became evident that the program that > works on Solaris doesn't work on FreeBSD. > Python itself couldn't cause this, because it correctly issues the lseek, but > taking the C test program from here: > https://lkml.org/lkml/2011/4/22/79 > gives the same result (failure). Please see this PR: http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/164445 If you can't figure out a patch from its contents, then I'll try to provide it some time later today. > On a Solaris 10 box I get (the correct result): > creating file > Error 0 > fpathconf gives 512, ENXIO is 6 > > testing at start > CUR at offset 0, errno 0 > HOLE gives offset 131072, errno 0 > CUR at offset 131072, errno 0 > DATA gives offset 0, errno 0 > CUR at offset 0, errno 0 > HOLE gives offset 131072, errno 0 > CUR at offset 131072, errno 0 > > testing at end > end at offset 1048578, errno 0 > HOLE gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > DATA gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > HOLE gives offset 1048578, errno 0 > CUR at offset 1048578, errno 0 > DATA gives offset 1048577, errno 0 > CUR at offset 1048577, errno 0 > > testing at offset 1 > HOLE gives offset 131072, errno 0 > CUR at offset 131072, errno 0 > DATA gives offset 1, errno 0 > CUR at offset 1, errno 0 > > testing at offset 200000 > HOLE gives offset 200000, errno 0 > CUR at offset 200000, errno 0 > DATA gives offset 1048576, errno 0 > CUR at offset 1048576, errno 0 > > On FreeBSD 9-STABLE/amd64 (all HOLE or DATA seeks fail): > creating file > No error: 0 > fpathconf gives 512, ENXIO is 6 > > testing at start > CUR at offset 0, errno 0 > HOLE gives offset -1, errno 6 > CUR at offset 0, errno 0 > DATA gives offset -1, errno 6 > CUR at offset 0, errno 0 > HOLE gives offset -1, errno 6 > CUR at offset 0, errno 0 > > testing at end > end at offset 1048578, errno 0 > HOLE gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > DATA gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > HOLE gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > DATA gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > > testing at offset 1 > HOLE gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > DATA gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > > testing at offset 200000 > HOLE gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > DATA gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > > Interestingly on an older 8.2-PRELEASE (Dec 14 23:12:05 CET 2010 and i386) box > it works: > creating file > No such file or directory > fpathconf gives 512, ENXIO is 6 > > testing at start > CUR at offset 0, errno 0 > HOLE gives offset 131072, errno 0 > CUR at offset 131072, errno 0 > DATA gives offset 0, errno 0 > CUR at offset 0, errno 0 > HOLE gives offset 131072, errno 0 > CUR at offset 131072, errno 0 > > testing at end > end at offset 1048578, errno 0 > HOLE gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > DATA gives offset -1, errno 6 > CUR at offset 1048578, errno 0 > HOLE gives offset 1048578, errno 0 > CUR at offset 1048578, errno 0 > DATA gives offset 1048577, errno 0 > CUR at offset 1048577, errno 0 > > testing at offset 1 > HOLE gives offset 131072, errno 0 > CUR at offset 131072, errno 0 > DATA gives offset 1, errno 0 > CUR at offset 1, errno 0 > > testing at offset 200000 > HOLE gives offset 200000, errno 0 > CUR at offset 200000, errno 0 > DATA gives offset 1048576, errno 0 > CUR at offset 1048576, errno 0 > > I don't know whether 32 bit, the OS or the pool version (the only working > FreeBSD case use a version 13 zpool) cause the malfunction, but this is a major > issue for anybody who wants to use this documented feature. -- Andriy Gapon