diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c index 862bdf23120e..d7fa4d914638 100644 --- a/fs/nilfs2/btree.c +++ b/fs/nilfs2/btree.c @@ -1231,6 +1231,17 @@ static void nilfs_btree_commit_insert(struct nilfs_bmap *btree, nilfs_bmap_set_dirty(btree); } +static int nilfs_btree_check_insert(const struct nilfs_bmap *btree, __u64 key) +{ + struct nilfs_btree_node *node; + int level; + + node = nilfs_btree_get_root(btree); + level = nilfs_btree_node_get_level(node); + return (level < NILFS_BTREE_LEVEL_NODE_MIN || + nilfs_btree_node_get_nchildren(node) <= 0) ? -ENOENT : 0; +} + static int nilfs_btree_insert(struct nilfs_bmap *btree, __u64 key, __u64 ptr) { struct nilfs_btree_path *path; @@ -2385,7 +2396,7 @@ static const struct nilfs_bmap_operations nilfs_btree_ops = { .bop_seek_key = nilfs_btree_seek_key, .bop_last_key = nilfs_btree_last_key, - .bop_check_insert = NULL, + .bop_check_insert = nilfs_btree_check_insert, .bop_check_delete = nilfs_btree_check_delete, .bop_gather_data = nilfs_btree_gather_data, };