I think I might have misinterpreted this code segment. I'll think more about 
this.


________________________________
From: zettamail <notificati...@github.com>
Sent: Saturday, December 19, 2015 9:55 AM
To: openzfs/openzfs
Cc: Boris Protopopov
Subject: Re: [openzfs] 6513 partially filled holes lose birth time (#46)

Hi, Matt,

thanks for the reply. I think I was not quite clear. The code segment in 
question is

....

} else {
int i;
ASSERT(dn->dn_next_nblkptr[txgoff] < dnp->dn_nblkptr);
/ the blkptrs we are losing better be unallocated */
for (i = dn->dn_next_nblkptr[txgoff];
i < dnp->dn_nblkptr; i++)
ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));

....


If I am reading this correctly, this means that some block pointers in the 
dnode became holes during the txg under sync. Which means that those pointers 
were non-holes before the txg, and therefore, could not have been "holes that 
have always been there". That is why I believe they should be verified for the 
proper birth epoch setting (checking the hole_birth enabled txg against the txg 
under sync and setting the epoch accordingly).


What do you think ?


P.S. There is also somewhat obscure issue of dnode reallocation when it is 
apparently hard to say if the holes were "original" or not. Can you comment on 
this case if applicable here ?

________________________________
From: Matthew Ahrens <notificati...@github.com>
Sent: Friday, December 18, 2015 1:37 PM
To: openzfs/openzfs
Subject: Re: [OpenZFS Developer] [openzfs] 6513 partially filled holes lose 
birth time (#46)


@bprotopopov<https://github.com/bprotopopov> re: dnode_sync(), I'm not sure why 
we would want to assert that the birth time is filled in (and it might not be, 
as @pcd1193182<https://github.com/pcd1193182> described). We might want to 
assert that the birth time is not filled in (and that the bp's being removed 
are entirely zeroed out). But I don't think that would be true either. We might 
want to make it true by explicitly bzero-ing the no-longer-bp's. Otherwise it 
might be possible for the realloc'd object to have garbage (the old hole BP's) 
in its bonus buffer. (Though in practice I think we always overwrite the bonus 
buffer when reallocating.)

[https://avatars3.githubusercontent.com/u/2488505?v=3&s=400]<https://github.com/bprotopopov>

bprotopopov (Boris Protopopov) · GitHub<https://github.com/bprotopopov>
github.com
bprotopopov has 5 repositories written in Shell, C, and C++. Follow their code 
on GitHub.



-
Reply to this email directly or view it on 
GitHub<https://github.com/openzfs/openzfs/pull/46#issuecomment-165865550>.

-
Reply to this email directly or view it on 
GitHub<https://github.com/openzfs/openzfs/pull/46#issuecomment-165992918>.

[https://avatars0.githubusercontent.com/u/799124?v=3&s=400]<https://github.com/openzfs/openzfs/pull/46#issuecomment-165992918>

6513 partially filled holes lose birth time by ahrens · Pull Request #46 · 
openzfs/openzfs<https://github.com/openzfs/openzfs/pull/46#issuecomment-165992918>
github.com
Reviewed by: Matthew Ahrens mahr...@delphix.com Reviewed by: George Wilson 
george.wil...@delphix.com If a ZFS object contains a hole at level one, and 
then a data block is created at level 0 under...




---
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/46#issuecomment-165996144
_______________________________________________
developer mailing list
developer@open-zfs.org
http://lists.open-zfs.org/mailman/listinfo/developer

Reply via email to