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