git: sbin/hammer: Add __blockmap_xlate_to_zone2() to refactor get_buffer()

Tomohiro Kusumi tkusumi at
Wed Dec 14 09:37:53 PST 2016

commit 6acc1a36afff48ecfa1b8bbb5f57036541cc044b
Author: Tomohiro Kusumi <kusumi.tomohiro at>
Date:   Wed Dec 14 02:52:57 2016 +0900

    sbin/hammer: Add __blockmap_xlate_to_zone2() to refactor get_buffer()
    No functional difference, but this should make more sense than
    how it was implemented before. The only thing this part really
    does is convert zone offset to zone-2.
    If error is set by blockmap_lookup(), there's nothing it can do
    to recover, but get_buffer() mustn't call exit(1) here. A command
    like hammer recover (which could possibly pass invalid offsets)
    expects get_buffer() to return NULL for invalid offsets.
    The reason for not calling blockmap_lookup() via get_buffer()
    when zone_offset is in zone-2 is because zone_offset could be
    0 when newfs_hammer calls get_buffer_data() on bootstrap when
    layer1/2 entries aren't even created. It's ok to directly call
    it with zone-2 offset like hammer show and blockmap do.
        -> get_buffer_data()
          -> get_buffer()
            -> blockmap_lookup()
              -> get_buffer_data(0)
                -> get_buffer(0)
                  -> blockmap_lookup(0) /* XXX */

Summary of changes:
 sbin/hammer/ondisk.c | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list