sbin/newfs_hammer: Properly allocate root inode and pfs from meta zone master
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Sat, 28 Mar 2015 19:01:26 +0000 (04:01 +0900)
committerTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Sat, 28 Mar 2015 22:17:15 +0000 (07:17 +0900)
- newfs_hammer writes initial two elements, root inode and pfs
  directly from userspace (which is based on different code from
  HAMMER's storage allocation code in kernel space), but it's
  not using the right zone. It should be using META zone instead
  of SMALL_DATA zone.

- This issue was found by zone checking added in commit 901e04c7.

- Bug #2807 acked by dillon

sbin/hammer/hammer_util.h
sbin/hammer/ondisk.c
sbin/newfs_hammer/newfs_hammer.c

index c3987c3..a6e3b39 100644 (file)
@@ -138,6 +138,8 @@ void format_blockmap(hammer_blockmap_t blockmap, hammer_off_t zone_base);
 void format_undomap(hammer_volume_ondisk_t ondisk);
 
 void *alloc_btree_element(hammer_off_t *offp);
+void *alloc_meta_element(hammer_off_t *offp, int32_t data_len,
+                        struct buffer_info **data_bufferp);
 void *alloc_data_element(hammer_off_t *offp, int32_t data_len,
                         struct buffer_info **data_bufferp);
 
index 4bb9c95..016029f 100644 (file)
@@ -422,7 +422,7 @@ get_ondisk(hammer_off_t buf_offset, struct buffer_info **bufferp,
 }
 
 /*
- * Allocate HAMMER elements - btree nodes, data storage
+ * Allocate HAMMER elements - btree nodes, meta data, data storage
  */
 void *
 alloc_btree_element(hammer_off_t *offp)
@@ -438,6 +438,18 @@ alloc_btree_element(hammer_off_t *offp)
 }
 
 void *
+alloc_meta_element(hammer_off_t *offp, int32_t data_len,
+                  struct buffer_info **data_bufferp)
+{
+       void *data;
+
+       data = alloc_blockmap(HAMMER_ZONE_META_INDEX, data_len,
+                             offp, data_bufferp);
+       bzero(data, data_len);
+       return (data);
+}
+
+void *
 alloc_data_element(hammer_off_t *offp, int32_t data_len,
                   struct buffer_info **data_bufferp)
 {
index 6bd72f3..000c1ee 100644 (file)
@@ -615,11 +615,11 @@ format_root(const char *label)
        u_int64_t xtime;
 
        /*
-        * Allocate zero-filled root btree node and data
+        * Allocate zero-filled root btree node, inode and pfs
         */
        bnode = alloc_btree_element(&btree_off);
-       idata = alloc_data_element(&data_off, sizeof(*idata), &data_buffer1);
-       pfsd = alloc_data_element(&pfsd_off, sizeof(*pfsd), &data_buffer2);
+       idata = alloc_meta_element(&data_off, sizeof(*idata), &data_buffer1);
+       pfsd = alloc_meta_element(&pfsd_off, sizeof(*pfsd), &data_buffer2);
        create_tid = createtid();
        xtime = nowtime();