sbin/newfs_hammer: Set HAMMER_OBJTYPE_DIRECTORY for ondisk PFS#0 data master
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Thu, 25 Aug 2016 12:40:12 +0000 (21:40 +0900)
committerTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Thu, 25 Aug 2016 15:10:22 +0000 (00:10 +0900)
Ondisk PFS data is a record part of the root ip (inode) when
a new PFS is created via ioctl, so it's normal for ondisk PFS
data to have HAMMER_OBJTYPE_DIRECTORY for obj_type. It's
rather insane that PFS#0 (the only PFS created without ioctl)
has 0 (HAMMER_OBJTYPE_UNKNOWN) for obj_type while the root ip
(not PFS root but HAMMER root) is apparently a directory.

Although PFS#0 and the rest of the PFS are a bit different,
PFS ioctls treat all the ondisk PFS data in the same fashion.
Having consistent obj_type value for the same data type is
considered better than not having.

This change does affect 1 byte of ondisk PFS#0 data initially
created by newfs_hammer, but doesn't break compatibility.
Also see hammer_mkroot_pseudofs().

sbin/newfs_hammer/newfs_hammer.c

index 80e237e..e4d2a4d 100644 (file)
@@ -640,6 +640,8 @@ format_root_directory(const char *label)
 
        /*
         * Create the second node element for the PFS data.
+        * This is supposed to be a record part of the root ip (inode),
+        * so it should have the same obj_type value as above.
         */
        elm = &bnode->elms[1];
        elm->leaf.base.btype = HAMMER_BTREE_TYPE_RECORD;
@@ -650,7 +652,7 @@ format_root_directory(const char *label)
        elm->leaf.base.create_tid = create_tid;
        elm->leaf.base.delete_tid = 0;
        elm->leaf.base.rec_type = HAMMER_RECTYPE_PFS;
-       elm->leaf.base.obj_type = 0;
+       elm->leaf.base.obj_type = HAMMER_OBJTYPE_DIRECTORY;
        elm->leaf.create_ts = (uint32_t)time(NULL);
 
        elm->leaf.data_offset = pfsd_off;