rename funcs and structs to btrfs
[linux-2.6-block.git] / fs / btrfs / mkfs.c
CommitLineData
06ed4b31
CM
1#define _XOPEN_SOURCE 500
2#include <stdio.h>
3#include <stdlib.h>
4#include <sys/types.h>
5#include <sys/stat.h>
6#include <fcntl.h>
7#include <unistd.h>
8#include "kerncompat.h"
9#include "radix-tree.h"
10#include "ctree.h"
11#include "disk-io.h"
12
13int mkfs(int fd)
14{
234b63a0
CM
15 struct btrfs_root_info info[2];
16 struct btrfs_leaf empty_leaf;
0783fcfc 17 struct btrfs_item item;
234b63a0 18 struct btrfs_extent_item extent_item;
06ed4b31
CM
19 int ret;
20
cfaa7295 21 /* setup the super block area */
06ed4b31
CM
22 memset(info, 0, sizeof(info));
23 info[0].blocknr = 16;
24 info[0].objectid = 1;
25 info[0].tree_root = 17;
06ed4b31
CM
26
27 info[1].blocknr = 16;
28 info[1].objectid = 2;
9a8dd150 29 info[1].tree_root = 18;
06ed4b31 30 ret = pwrite(fd, info, sizeof(info),
234b63a0 31 BTRFS_SUPER_INFO_OFFSET(BTRFS_BLOCKSIZE));
06ed4b31
CM
32 if (ret != sizeof(info))
33 return -1;
cfaa7295
CM
34
35 /* create leaves for the tree root and extent root */
06ed4b31 36 memset(&empty_leaf, 0, sizeof(empty_leaf));
7518a238
CM
37 btrfs_set_header_parentid(&empty_leaf.header, 1);
38 btrfs_set_header_blocknr(&empty_leaf.header, 17);
234b63a0 39 ret = pwrite(fd, &empty_leaf, sizeof(empty_leaf), 17 * BTRFS_BLOCKSIZE);
06ed4b31
CM
40 if (ret != sizeof(empty_leaf))
41 return -1;
42
7518a238
CM
43 btrfs_set_header_parentid(&empty_leaf.header, 2);
44 btrfs_set_header_blocknr(&empty_leaf.header, 18);
45 btrfs_set_header_nritems(&empty_leaf.header, 3);
9a8dd150
CM
46
47 /* item1, reserve blocks 0-16 */
0783fcfc
CM
48 btrfs_set_key_objectid(&item.key, 0);
49 btrfs_set_key_offset(&item.key, 17);
50 btrfs_set_key_flags(&item.key, 0);
234b63a0
CM
51 btrfs_set_item_offset(&item, LEAF_DATA_SIZE -
52 sizeof(struct btrfs_extent_item));
53 btrfs_set_item_size(&item, sizeof(struct btrfs_extent_item));
cf27e1ee
CM
54 btrfs_set_extent_refs(&extent_item, 1);
55 btrfs_set_extent_owner(&extent_item, 0);
06ed4b31 56 memcpy(empty_leaf.items, &item, sizeof(item));
0783fcfc
CM
57 memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item,
58 btrfs_item_size(&item));
9a8dd150
CM
59
60 /* item2, give block 17 to the root */
0783fcfc
CM
61 btrfs_set_key_objectid(&item.key, 17);
62 btrfs_set_key_offset(&item.key, 1);
234b63a0
CM
63 btrfs_set_item_offset(&item, LEAF_DATA_SIZE -
64 sizeof(struct btrfs_extent_item) * 2);
cf27e1ee 65 btrfs_set_extent_owner(&extent_item, 1);
06ed4b31 66 memcpy(empty_leaf.items + 1, &item, sizeof(item));
0783fcfc
CM
67 memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item,
68 btrfs_item_size(&item));
9a8dd150
CM
69
70 /* item3, give block 18 for the extent root */
0783fcfc
CM
71 btrfs_set_key_objectid(&item.key, 18);
72 btrfs_set_key_offset(&item.key, 1);
234b63a0
CM
73 btrfs_set_item_offset(&item, LEAF_DATA_SIZE -
74 sizeof(struct btrfs_extent_item) * 3);
cf27e1ee 75 btrfs_set_extent_owner(&extent_item, 2);
9a8dd150 76 memcpy(empty_leaf.items + 2, &item, sizeof(item));
0783fcfc
CM
77 memcpy(empty_leaf.data + btrfs_item_offset(&item), &extent_item,
78 btrfs_item_size(&item));
234b63a0 79 ret = pwrite(fd, &empty_leaf, sizeof(empty_leaf), 18 * BTRFS_BLOCKSIZE);
06ed4b31
CM
80 if (ret != sizeof(empty_leaf))
81 return -1;
82 return 0;
83}