This fix for this bug is currently in test and will be pushed shortly.
-Mark
Pawel Jakub Dawidek wrote:
> On Tue, Jul 22, 2008 at 08:56:31AM -0600, Mark Shellenbaum wrote:
>> Pawel Jakub Dawidek wrote:
>>> On Tue, Jul 22, 2008 at 04:28:45PM +0200, Pawel Jakub Dawidek wrote:
>>>> Hi.
>>>>
>>>> I just reproduced a problem I was chasing on FreeBSD also on
>>>> OpenSolaris from around 2008.01.
>>>>
>>>> Simply doing something like this:
>>>>
>>>> write 9k of random data into 'foo' file
>>>> truncate 'foo' file to 7k
>>>> truncate 'foo' file to 11k
>>>> read data between 7k-9k
>>>>
>>>> There should be all zeros between 7k-9k, but there is previous data.
>>>> It worked fine on an older ZFS versions (I'm sure it works on version 6).
>>>>
>>>> Simple test program:
>>> [...]
>>>
>> Thanks for reporting this.
>>
>> I've opened bug:
>>
>> 6728399 ftruncate(2) broken on ZFS
>
> I went a bit further trying to find out what's going on. This is the
> change responsible for the problem: 20c04e18c58cfb135a135c0126c7d69f6078e1b5.
>
> In the dnode_free_range() function you can find this condition:
>
> [...]
> } else if (off > blkid) {
> /* Freeing past end-of-data */
> goto out;
> [...]
>
> Unfortunately blkid is uninitialized at this point, so it can't be
> right. I tried to change it to 'blksz', but it panics further.
>
> I hope this helps. This is one of the last issues that holds back
> integration of the most recent ZFS into FreeBSD tree, so we would be
> very grateful if you guys could look into this.
>
> Thanks in advance!
>