Skip to content

Commit 1b4ca38

Browse files
chrismason-xxDavid Woodhouse
authored and
David Woodhouse
committed
drop the inode map tree
1 parent 43f6ab8 commit 1b4ca38

File tree

7 files changed

+15
-165
lines changed

7 files changed

+15
-165
lines changed

ctree.h

+3-22
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ struct btrfs_trans_handle;
1010

1111
#define BTRFS_ROOT_TREE_OBJECTID 1ULL
1212
#define BTRFS_EXTENT_TREE_OBJECTID 2ULL
13-
#define BTRFS_INODE_MAP_OBJECTID 3ULL
14-
#define BTRFS_FS_TREE_OBJECTID 4ULL
15-
#define BTRFS_FIRST_FREE_OBJECTID 5ULL
13+
#define BTRFS_FS_TREE_OBJECTID 3ULL
14+
#define BTRFS_FIRST_FREE_OBJECTID 4ULL
1615

1716
/*
1817
* we can actually store much bigger names, but lets not confuse the rest
@@ -58,7 +57,6 @@ struct btrfs_header {
5857
__le64 blocknr; /* which block this node is supposed to live in */
5958
__le64 generation;
6059
__le64 parentid; /* objectid of the tree root */
61-
__le32 ham;
6260
__le16 nritems;
6361
__le16 flags;
6462
u8 level;
@@ -222,16 +220,10 @@ struct btrfs_csum_item {
222220
u8 csum[BTRFS_CSUM_SIZE];
223221
} __attribute__ ((__packed__));
224222

225-
struct btrfs_inode_map_item {
226-
struct btrfs_disk_key key;
227-
} __attribute__ ((__packed__));
228-
229-
230223
struct btrfs_fs_info {
231224
struct btrfs_root *fs_root;
232225
struct btrfs_root *extent_root;
233226
struct btrfs_root *tree_root;
234-
struct btrfs_root *inode_root;
235227
struct btrfs_key current_insert;
236228
struct btrfs_key last_insert;
237229
struct radix_tree_root cache_radix;
@@ -309,16 +301,11 @@ struct btrfs_root {
309301
*/
310302
#define BTRFS_EXTENT_ITEM_KEY 8
311303

312-
/*
313-
* the inode map records which inode numbers are in use and where
314-
* they actually live on disk
315-
*/
316-
#define BTRFS_INODE_MAP_ITEM_KEY 9
317304
/*
318305
* string items are for debugging. They just store a short string of
319306
* data in the FS
320307
*/
321-
#define BTRFS_STRING_ITEM_KEY 10
308+
#define BTRFS_STRING_ITEM_KEY 9
322309

323310
static inline u64 btrfs_inode_generation(struct btrfs_inode_item *i)
324311
{
@@ -922,12 +909,6 @@ int btrfs_match_dir_item_name(struct btrfs_root *root, struct btrfs_path *path,
922909
int btrfs_find_free_objectid(struct btrfs_trans_handle *trans,
923910
struct btrfs_root *fs_root,
924911
u64 dirid, u64 *objectid);
925-
int btrfs_insert_inode_map(struct btrfs_trans_handle *trans,
926-
struct btrfs_root *root,
927-
u64 objectid, struct btrfs_key *location);
928-
int btrfs_lookup_inode_map(struct btrfs_trans_handle *trans,
929-
struct btrfs_root *root, struct btrfs_path *path,
930-
u64 objectid, int mod);
931912
int btrfs_insert_inode(struct btrfs_trans_handle *trans, struct btrfs_root
932913
*root, u64 objectid, struct btrfs_inode_item
933914
*inode_item);

debug-tree.c

-3
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,6 @@ int main(int ac, char **av) {
6666
case BTRFS_EXTENT_TREE_OBJECTID:
6767
printf("extent tree ");
6868
break;
69-
case BTRFS_INODE_MAP_OBJECTID:
70-
printf("inode map");
71-
break;
7269
}
7370
printf("tree %Lu %Lu %u\n", found_key.objectid,
7471
found_key.offset, found_key.flags);

dir-test.c

-17
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,6 @@ static int ins_one(struct btrfs_trans_handle *trans, struct btrfs_root *root,
7272
btrfs_set_key_type(&inode_map, BTRFS_INODE_ITEM_KEY);
7373
inode_map.offset = 0;
7474

75-
ret = btrfs_insert_inode_map(trans, root, objectid, &inode_map);
76-
if (ret)
77-
goto error;
78-
7975
initial_inode_init(root, &inode_item);
8076
ret = btrfs_insert_inode(trans, root, objectid, &inode_item);
8177
if (ret)
@@ -187,18 +183,8 @@ static int del_dir_item(struct btrfs_trans_handle *trans,
187183
goto out_release;
188184
btrfs_release_path(root, path);
189185

190-
/* delete the inode mapping */
191-
btrfs_init_path(path);
192-
ret = btrfs_lookup_inode_map(trans, root, path, file_objectid, -1);
193-
if (ret)
194-
goto out_release;
195-
ret = btrfs_del_item(trans, root->fs_info->inode_root, path);
196-
if (ret)
197-
goto out_release;
198-
199186
if (root->fs_info->last_inode_alloc > file_objectid)
200187
root->fs_info->last_inode_alloc = file_objectid;
201-
btrfs_release_path(root, path);
202188
ptr = radix_tree_delete(radix, radix_index);
203189
if (!ptr) {
204190
ret = -5555;
@@ -261,9 +247,6 @@ static int lookup_item(struct btrfs_trans_handle *trans, struct btrfs_root
261247
di = btrfs_item_ptr(&path.nodes[0]->leaf, path.slots[0],
262248
struct btrfs_dir_item);
263249
objectid = btrfs_disk_key_objectid(&di->location);
264-
btrfs_release_path(root, &path);
265-
btrfs_init_path(&path);
266-
ret = btrfs_lookup_inode_map(trans, root, &path, objectid, 0);
267250
}
268251
btrfs_release_path(root, &path);
269252
if (ret) {

disk-io.c

-18
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ struct btrfs_buffer *read_tree_block(struct btrfs_root *root, u64 blocknr)
8989
loff_t offset = blocknr * root->blocksize;
9090
struct btrfs_buffer *buf;
9191
int ret;
92-
9392
buf = radix_tree_lookup(&root->fs_info->cache_radix, blocknr);
9493
if (buf) {
9594
buf->count++;
@@ -169,14 +168,7 @@ static int commit_tree_roots(struct btrfs_trans_handle *trans,
169168
u64 old_extent_block;
170169
struct btrfs_root *tree_root = fs_info->tree_root;
171170
struct btrfs_root *extent_root = fs_info->extent_root;
172-
struct btrfs_root *inode_root = fs_info->inode_root;
173171

174-
btrfs_set_root_blocknr(&inode_root->root_item,
175-
inode_root->node->blocknr);
176-
ret = btrfs_update_root(trans, tree_root,
177-
&inode_root->root_key,
178-
&inode_root->root_item);
179-
BUG_ON(ret);
180172
while(1) {
181173
old_extent_block = btrfs_root_blocknr(&extent_root->root_item);
182174
if (old_extent_block == extent_root->node->blocknr)
@@ -281,7 +273,6 @@ struct btrfs_root *open_ctree_fd(int fp, struct btrfs_super_block *super)
281273
struct btrfs_root *root = malloc(sizeof(struct btrfs_root));
282274
struct btrfs_root *extent_root = malloc(sizeof(struct btrfs_root));
283275
struct btrfs_root *tree_root = malloc(sizeof(struct btrfs_root));
284-
struct btrfs_root *inode_root = malloc(sizeof(struct btrfs_root));
285276
struct btrfs_fs_info *fs_info = malloc(sizeof(*fs_info));
286277
int ret;
287278

@@ -295,7 +286,6 @@ struct btrfs_root *open_ctree_fd(int fp, struct btrfs_super_block *super)
295286
fs_info->fs_root = root;
296287
fs_info->tree_root = tree_root;
297288
fs_info->extent_root = extent_root;
298-
fs_info->inode_root = inode_root;
299289
fs_info->last_inode_alloc = 0;
300290
fs_info->last_inode_alloc_dirid = 0;
301291
fs_info->disk_super = super;
@@ -309,7 +299,6 @@ struct btrfs_root *open_ctree_fd(int fp, struct btrfs_super_block *super)
309299
return NULL;
310300
}
311301
BUG_ON(ret < 0);
312-
313302
__setup_root(super, tree_root, fs_info, BTRFS_ROOT_TREE_OBJECTID, fp);
314303
tree_root->node = read_tree_block(tree_root, btrfs_super_root(super));
315304
BUG_ON(!tree_root->node);
@@ -318,10 +307,6 @@ struct btrfs_root *open_ctree_fd(int fp, struct btrfs_super_block *super)
318307
BTRFS_EXTENT_TREE_OBJECTID, extent_root, fp);
319308
BUG_ON(ret);
320309

321-
ret = find_and_setup_root(super, tree_root, fs_info,
322-
BTRFS_INODE_MAP_OBJECTID, inode_root, fp);
323-
BUG_ON(ret);
324-
325310
ret = find_and_setup_root(super, tree_root, fs_info,
326311
BTRFS_FS_TREE_OBJECTID, root, fp);
327312
BUG_ON(ret);
@@ -379,9 +364,6 @@ int close_ctree(struct btrfs_root *root, struct btrfs_super_block *s)
379364
if (root->fs_info->extent_root->node)
380365
btrfs_block_release(root->fs_info->extent_root,
381366
root->fs_info->extent_root->node);
382-
if (root->fs_info->inode_root->node)
383-
btrfs_block_release(root->fs_info->inode_root,
384-
root->fs_info->inode_root->node);
385367
if (root->fs_info->tree_root->node)
386368
btrfs_block_release(root->fs_info->tree_root,
387369
root->fs_info->tree_root->node);

inode-map.c

+3-52
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* walks the btree of allocated inodes and find a hole.
1111
*/
1212
int btrfs_find_free_objectid(struct btrfs_trans_handle *trans,
13-
struct btrfs_root *fs_root,
13+
struct btrfs_root *root,
1414
u64 dirid, u64 *objectid)
1515
{
1616
struct btrfs_path path;
@@ -21,18 +21,16 @@ int btrfs_find_free_objectid(struct btrfs_trans_handle *trans,
2121
u64 last_ino;
2222
int start_found;
2323
struct btrfs_leaf *l;
24-
struct btrfs_root *root = fs_root->fs_info->inode_root;
2524
struct btrfs_key search_key;
2625
u64 search_start = dirid;
2726

28-
if (fs_root->fs_info->last_inode_alloc_dirid == dirid)
29-
search_start = fs_root->fs_info->last_inode_alloc;
27+
if (root->fs_info->last_inode_alloc_dirid == dirid)
28+
search_start = root->fs_info->last_inode_alloc;
3029

3130
if (search_start < BTRFS_FIRST_FREE_OBJECTID)
3231
search_start = BTRFS_FIRST_FREE_OBJECTID;
3332
search_key.objectid = search_start;
3433
search_key.flags = 0;
35-
btrfs_set_key_type(&search_key, BTRFS_INODE_MAP_ITEM_KEY);
3634
search_key.offset = 0;
3735

3836
btrfs_init_path(&path);
@@ -89,50 +87,3 @@ int btrfs_find_free_objectid(struct btrfs_trans_handle *trans,
8987
btrfs_release_path(root, &path);
9088
return ret;
9189
}
92-
93-
int btrfs_insert_inode_map(struct btrfs_trans_handle *trans,
94-
struct btrfs_root *fs_root,
95-
u64 objectid, struct btrfs_key *location)
96-
{
97-
int ret = 0;
98-
struct btrfs_path path;
99-
struct btrfs_inode_map_item *inode_item;
100-
struct btrfs_key key;
101-
struct btrfs_root *inode_root = fs_root->fs_info->inode_root;
102-
103-
key.objectid = objectid;
104-
key.flags = 0;
105-
btrfs_set_key_type(&key, BTRFS_INODE_MAP_ITEM_KEY);
106-
key.offset = 0;
107-
btrfs_init_path(&path);
108-
ret = btrfs_insert_empty_item(trans, inode_root, &path, &key,
109-
sizeof(struct btrfs_inode_map_item));
110-
if (ret)
111-
goto out;
112-
113-
inode_item = btrfs_item_ptr(&path.nodes[0]->leaf, path.slots[0],
114-
struct btrfs_inode_map_item);
115-
btrfs_cpu_key_to_disk(&inode_item->key, location);
116-
out:
117-
btrfs_release_path(inode_root, &path);
118-
return ret;
119-
}
120-
121-
int btrfs_lookup_inode_map(struct btrfs_trans_handle *trans,
122-
struct btrfs_root *fs_root, struct btrfs_path *path,
123-
u64 objectid, int mod)
124-
{
125-
int ret;
126-
struct btrfs_key key;
127-
int ins_len = mod < 0 ? -1 : 0;
128-
int cow = mod != 0;
129-
struct btrfs_root *inode_root = fs_root->fs_info->inode_root;
130-
131-
key.objectid = objectid;
132-
key.flags = 0;
133-
key.offset = 0;
134-
btrfs_set_key_type(&key, BTRFS_INODE_MAP_ITEM_KEY);
135-
ret = btrfs_search_slot(trans, inode_root, &key, path, ins_len, cow);
136-
return ret;
137-
}
138-

mkfs.c

+9-45
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,6 @@ static int __make_root_dir(struct btrfs_trans_handle *trans,
4242
btrfs_set_key_type(&inode_map, BTRFS_INODE_ITEM_KEY);
4343
inode_map.offset = 0;
4444

45-
ret = btrfs_insert_inode_map(trans, root, objectid, &inode_map);
46-
if (ret)
47-
goto error;
48-
4945
memset(&inode_item, 0, sizeof(inode_item));
5046
btrfs_set_inode_generation(&inode_item, root->fs_info->generation);
5147
btrfs_set_inode_size(&inode_item, 3);
@@ -119,14 +115,13 @@ int mkfs(int fd, u64 num_blocks, u32 blocksize)
119115
int ret;
120116
u32 itemoff;
121117
u32 start_block = BTRFS_SUPER_INFO_OFFSET / blocksize;
122-
123118
btrfs_set_super_generation(&super, 1);
124119
btrfs_set_super_blocknr(&super, start_block);
125120
btrfs_set_super_root(&super, start_block + 1);
126121
strcpy((char *)(&super.magic), BTRFS_MAGIC);
127122
btrfs_set_super_blocksize(&super, blocksize);
128123
btrfs_set_super_total_blocks(&super, num_blocks);
129-
btrfs_set_super_blocks_used(&super, start_block + 5);
124+
btrfs_set_super_blocks_used(&super, start_block + 4);
130125
uuid_generate(super.fsid);
131126

132127
block = malloc(blocksize);
@@ -142,7 +137,7 @@ int mkfs(int fd, u64 num_blocks, u32 blocksize)
142137
btrfs_set_header_parentid(&empty_leaf->header,
143138
BTRFS_ROOT_TREE_OBJECTID);
144139
btrfs_set_header_blocknr(&empty_leaf->header, start_block + 1);
145-
btrfs_set_header_nritems(&empty_leaf->header, 3);
140+
btrfs_set_header_nritems(&empty_leaf->header, 2);
146141
btrfs_set_header_generation(&empty_leaf->header, 0);
147142
memcpy(empty_leaf->header.fsid, super.fsid,
148143
sizeof(empty_leaf->header.fsid));
@@ -173,16 +168,8 @@ int mkfs(int fd, u64 num_blocks, u32 blocksize)
173168
btrfs_set_root_blocknr(&root_item, start_block + 3);
174169
itemoff = itemoff - sizeof(root_item);
175170
btrfs_set_item_offset(&item, itemoff);
176-
btrfs_set_disk_key_objectid(&item.key, BTRFS_INODE_MAP_OBJECTID);
177-
memcpy(empty_leaf->items + 1, &item, sizeof(item));
178-
memcpy(btrfs_leaf_data(empty_leaf) + itemoff,
179-
&root_item, sizeof(root_item));
180-
181-
btrfs_set_root_blocknr(&root_item, start_block + 4);
182-
itemoff = itemoff - sizeof(root_item);
183-
btrfs_set_item_offset(&item, itemoff);
184171
btrfs_set_disk_key_objectid(&item.key, BTRFS_FS_TREE_OBJECTID);
185-
memcpy(empty_leaf->items + 2, &item, sizeof(item));
172+
memcpy(empty_leaf->items + 1, &item, sizeof(item));
186173
memcpy(btrfs_leaf_data(empty_leaf) + itemoff,
187174
&root_item, sizeof(root_item));
188175
ret = pwrite(fd, empty_leaf, blocksize, (start_block + 1) * blocksize);
@@ -191,7 +178,7 @@ int mkfs(int fd, u64 num_blocks, u32 blocksize)
191178
btrfs_set_header_parentid(&empty_leaf->header,
192179
BTRFS_EXTENT_TREE_OBJECTID);
193180
btrfs_set_header_blocknr(&empty_leaf->header, start_block + 2);
194-
btrfs_set_header_nritems(&empty_leaf->header, 5);
181+
btrfs_set_header_nritems(&empty_leaf->header, 4);
195182

196183
/* item1, reserve blocks 0-16 */
197184
btrfs_set_disk_key_objectid(&item.key, 0);
@@ -228,46 +215,24 @@ int mkfs(int fd, u64 num_blocks, u32 blocksize)
228215
memcpy(btrfs_leaf_data(empty_leaf) + btrfs_item_offset(&item),
229216
&extent_item, btrfs_item_size(&item));
230217

231-
/* item4, give block 19 to the inode map */
218+
/* item5, give block 19 to the FS root */
232219
btrfs_set_disk_key_objectid(&item.key, start_block + 3);
233220
btrfs_set_disk_key_offset(&item.key, 1);
234221
itemoff = itemoff - sizeof(struct btrfs_extent_item);
235222
btrfs_set_item_offset(&item, itemoff);
236-
btrfs_set_extent_owner(&extent_item, BTRFS_INODE_MAP_OBJECTID);
237-
memcpy(empty_leaf->items + 3, &item, sizeof(item));
238-
memcpy(btrfs_leaf_data(empty_leaf) + btrfs_item_offset(&item),
239-
&extent_item, btrfs_item_size(&item));
240-
ret = pwrite(fd, empty_leaf, blocksize, (start_block + 2) * blocksize);
241-
if (ret != blocksize)
242-
return -1;
243-
244-
/* item5, give block 20 to the FS root */
245-
btrfs_set_disk_key_objectid(&item.key, start_block + 4);
246-
btrfs_set_disk_key_offset(&item.key, 1);
247-
itemoff = itemoff - sizeof(struct btrfs_extent_item);
248-
btrfs_set_item_offset(&item, itemoff);
249223
btrfs_set_extent_owner(&extent_item, BTRFS_FS_TREE_OBJECTID);
250-
memcpy(empty_leaf->items + 4, &item, sizeof(item));
224+
memcpy(empty_leaf->items + 3, &item, sizeof(item));
251225
memcpy(btrfs_leaf_data(empty_leaf) + btrfs_item_offset(&item),
252226
&extent_item, btrfs_item_size(&item));
253227
ret = pwrite(fd, empty_leaf, blocksize, (start_block + 2) * blocksize);
254228
if (ret != blocksize)
255229
return -1;
256230

257-
/* create the inode map */
258-
btrfs_set_header_parentid(&empty_leaf->header,
259-
BTRFS_INODE_MAP_OBJECTID);
260-
btrfs_set_header_blocknr(&empty_leaf->header, start_block + 3);
261-
btrfs_set_header_nritems(&empty_leaf->header, 0);
262-
ret = pwrite(fd, empty_leaf, blocksize, (start_block + 3) * blocksize);
263-
if (ret != blocksize)
264-
return -1;
265-
266231
/* finally create the FS root */
267232
btrfs_set_header_parentid(&empty_leaf->header, BTRFS_FS_TREE_OBJECTID);
268-
btrfs_set_header_blocknr(&empty_leaf->header, start_block + 4);
233+
btrfs_set_header_blocknr(&empty_leaf->header, start_block + 3);
269234
btrfs_set_header_nritems(&empty_leaf->header, 0);
270-
ret = pwrite(fd, empty_leaf, blocksize, (start_block + 4) * blocksize);
235+
ret = pwrite(fd, empty_leaf, blocksize, (start_block + 3) * blocksize);
271236
if (ret != blocksize)
272237
return -1;
273238
return 0;
@@ -285,8 +250,7 @@ u64 device_size(int fd, struct stat *st)
285250
if (ioctl(fd, BLKGETSIZE64, &size) >= 0) {
286251
return size;
287252
}
288-
return 0;
289-
}
253+
return 0; }
290254

291255
int main(int ac, char **av)
292256
{

0 commit comments

Comments
 (0)