diff options
| -rw-r--r-- | fs/nilfs2/btree.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c index 18bb965c66b5..c0266f7f0b26 100644 --- a/fs/nilfs2/btree.c +++ b/fs/nilfs2/btree.c | |||
| @@ -473,7 +473,7 @@ static int nilfs_btree_do_lookup(const struct nilfs_bmap *btree, | |||
| 473 | { | 473 | { |
| 474 | struct nilfs_btree_node *node; | 474 | struct nilfs_btree_node *node; |
| 475 | __u64 ptr; | 475 | __u64 ptr; |
| 476 | int level, index, found, ret; | 476 | int level, index, found, ncmax, ret; |
| 477 | 477 | ||
| 478 | node = nilfs_btree_get_root(btree); | 478 | node = nilfs_btree_get_root(btree); |
| 479 | level = nilfs_btree_node_get_level(node); | 479 | level = nilfs_btree_node_get_level(node); |
| @@ -485,6 +485,8 @@ static int nilfs_btree_do_lookup(const struct nilfs_bmap *btree, | |||
| 485 | path[level].bp_bh = NULL; | 485 | path[level].bp_bh = NULL; |
| 486 | path[level].bp_index = index; | 486 | path[level].bp_index = index; |
| 487 | 487 | ||
| 488 | ncmax = NILFS_BTREE_NODE_NCHILDREN_MAX(nilfs_btree_node_size(btree)); | ||
| 489 | |||
| 488 | for (level--; level >= minlevel; level--) { | 490 | for (level--; level >= minlevel; level--) { |
| 489 | ret = nilfs_btree_get_block(btree, ptr, &path[level].bp_bh); | 491 | ret = nilfs_btree_get_block(btree, ptr, &path[level].bp_bh); |
| 490 | if (ret < 0) | 492 | if (ret < 0) |
| @@ -496,9 +498,9 @@ static int nilfs_btree_do_lookup(const struct nilfs_bmap *btree, | |||
| 496 | found = nilfs_btree_node_lookup(node, key, &index); | 498 | found = nilfs_btree_node_lookup(node, key, &index); |
| 497 | else | 499 | else |
| 498 | index = 0; | 500 | index = 0; |
| 499 | if (index < nilfs_btree_node_nchildren_max(node, btree)) | 501 | if (index < ncmax) { |
| 500 | ptr = nilfs_btree_node_get_ptr(btree, node, index); | 502 | ptr = nilfs_btree_node_get_ptr(btree, node, index); |
| 501 | else { | 503 | } else { |
| 502 | WARN_ON(found || level != NILFS_BTREE_LEVEL_NODE_MIN); | 504 | WARN_ON(found || level != NILFS_BTREE_LEVEL_NODE_MIN); |
| 503 | /* insert */ | 505 | /* insert */ |
| 504 | ptr = NILFS_BMAP_INVALID_PTR; | 506 | ptr = NILFS_BMAP_INVALID_PTR; |
| @@ -921,7 +923,7 @@ static int nilfs_btree_prepare_insert(struct nilfs_bmap *btree, | |||
| 921 | struct buffer_head *bh; | 923 | struct buffer_head *bh; |
| 922 | struct nilfs_btree_node *node, *parent, *sib; | 924 | struct nilfs_btree_node *node, *parent, *sib; |
| 923 | __u64 sibptr; | 925 | __u64 sibptr; |
| 924 | int pindex, level, ret; | 926 | int pindex, level, ncmax, ret; |
| 925 | struct inode *dat = NULL; | 927 | struct inode *dat = NULL; |
| 926 | 928 | ||
| 927 | stats->bs_nblocks = 0; | 929 | stats->bs_nblocks = 0; |
| @@ -938,12 +940,13 @@ static int nilfs_btree_prepare_insert(struct nilfs_bmap *btree, | |||
| 938 | if (ret < 0) | 940 | if (ret < 0) |
| 939 | goto err_out_data; | 941 | goto err_out_data; |
| 940 | 942 | ||
| 943 | ncmax = NILFS_BTREE_NODE_NCHILDREN_MAX(nilfs_btree_node_size(btree)); | ||
| 944 | |||
| 941 | for (level = NILFS_BTREE_LEVEL_NODE_MIN; | 945 | for (level = NILFS_BTREE_LEVEL_NODE_MIN; |
| 942 | level < nilfs_btree_height(btree) - 1; | 946 | level < nilfs_btree_height(btree) - 1; |
| 943 | level++) { | 947 | level++) { |
| 944 | node = nilfs_btree_get_nonroot_node(path, level); | 948 | node = nilfs_btree_get_nonroot_node(path, level); |
| 945 | if (nilfs_btree_node_get_nchildren(node) < | 949 | if (nilfs_btree_node_get_nchildren(node) < ncmax) { |
| 946 | nilfs_btree_node_nchildren_max(node, btree)) { | ||
| 947 | path[level].bp_op = nilfs_btree_do_insert; | 950 | path[level].bp_op = nilfs_btree_do_insert; |
| 948 | stats->bs_nblocks++; | 951 | stats->bs_nblocks++; |
| 949 | goto out; | 952 | goto out; |
| @@ -960,8 +963,7 @@ static int nilfs_btree_prepare_insert(struct nilfs_bmap *btree, | |||
| 960 | if (ret < 0) | 963 | if (ret < 0) |
| 961 | goto err_out_child_node; | 964 | goto err_out_child_node; |
| 962 | sib = (struct nilfs_btree_node *)bh->b_data; | 965 | sib = (struct nilfs_btree_node *)bh->b_data; |
| 963 | if (nilfs_btree_node_get_nchildren(sib) < | 966 | if (nilfs_btree_node_get_nchildren(sib) < ncmax) { |
| 964 | nilfs_btree_node_nchildren_max(sib, btree)) { | ||
| 965 | path[level].bp_sib_bh = bh; | 967 | path[level].bp_sib_bh = bh; |
| 966 | path[level].bp_op = nilfs_btree_carry_left; | 968 | path[level].bp_op = nilfs_btree_carry_left; |
| 967 | stats->bs_nblocks++; | 969 | stats->bs_nblocks++; |
| @@ -979,8 +981,7 @@ static int nilfs_btree_prepare_insert(struct nilfs_bmap *btree, | |||
| 979 | if (ret < 0) | 981 | if (ret < 0) |
| 980 | goto err_out_child_node; | 982 | goto err_out_child_node; |
| 981 | sib = (struct nilfs_btree_node *)bh->b_data; | 983 | sib = (struct nilfs_btree_node *)bh->b_data; |
| 982 | if (nilfs_btree_node_get_nchildren(sib) < | 984 | if (nilfs_btree_node_get_nchildren(sib) < ncmax) { |
| 983 | nilfs_btree_node_nchildren_max(sib, btree)) { | ||
| 984 | path[level].bp_sib_bh = bh; | 985 | path[level].bp_sib_bh = bh; |
| 985 | path[level].bp_op = nilfs_btree_carry_right; | 986 | path[level].bp_op = nilfs_btree_carry_right; |
| 986 | stats->bs_nblocks++; | 987 | stats->bs_nblocks++; |
| @@ -1014,7 +1015,7 @@ static int nilfs_btree_prepare_insert(struct nilfs_bmap *btree, | |||
| 1014 | /* root */ | 1015 | /* root */ |
| 1015 | node = nilfs_btree_get_root(btree); | 1016 | node = nilfs_btree_get_root(btree); |
| 1016 | if (nilfs_btree_node_get_nchildren(node) < | 1017 | if (nilfs_btree_node_get_nchildren(node) < |
| 1017 | nilfs_btree_node_nchildren_max(node, btree)) { | 1018 | NILFS_BTREE_ROOT_NCHILDREN_MAX) { |
| 1018 | path[level].bp_op = nilfs_btree_do_insert; | 1019 | path[level].bp_op = nilfs_btree_do_insert; |
| 1019 | stats->bs_nblocks++; | 1020 | stats->bs_nblocks++; |
| 1020 | goto out; | 1021 | goto out; |
| @@ -1281,10 +1282,12 @@ static int nilfs_btree_prepare_delete(struct nilfs_bmap *btree, | |||
| 1281 | struct buffer_head *bh; | 1282 | struct buffer_head *bh; |
| 1282 | struct nilfs_btree_node *node, *parent, *sib; | 1283 | struct nilfs_btree_node *node, *parent, *sib; |
| 1283 | __u64 sibptr; | 1284 | __u64 sibptr; |
| 1284 | int pindex, level, ret; | 1285 | int pindex, level, ncmin, ret; |
| 1285 | 1286 | ||
| 1286 | ret = 0; | 1287 | ret = 0; |
| 1287 | stats->bs_nblocks = 0; | 1288 | stats->bs_nblocks = 0; |
| 1289 | ncmin = NILFS_BTREE_NODE_NCHILDREN_MIN(nilfs_btree_node_size(btree)); | ||
| 1290 | |||
| 1288 | for (level = NILFS_BTREE_LEVEL_NODE_MIN; | 1291 | for (level = NILFS_BTREE_LEVEL_NODE_MIN; |
| 1289 | level < nilfs_btree_height(btree) - 1; | 1292 | level < nilfs_btree_height(btree) - 1; |
| 1290 | level++) { | 1293 | level++) { |
| @@ -1297,8 +1300,7 @@ static int nilfs_btree_prepare_delete(struct nilfs_bmap *btree, | |||
| 1297 | if (ret < 0) | 1300 | if (ret < 0) |
| 1298 | goto err_out_child_node; | 1301 | goto err_out_child_node; |
| 1299 | 1302 | ||
| 1300 | if (nilfs_btree_node_get_nchildren(node) > | 1303 | if (nilfs_btree_node_get_nchildren(node) > ncmin) { |
| 1301 | nilfs_btree_node_nchildren_min(node, btree)) { | ||
| 1302 | path[level].bp_op = nilfs_btree_do_delete; | 1304 | path[level].bp_op = nilfs_btree_do_delete; |
| 1303 | stats->bs_nblocks++; | 1305 | stats->bs_nblocks++; |
| 1304 | goto out; | 1306 | goto out; |
| @@ -1315,8 +1317,7 @@ static int nilfs_btree_prepare_delete(struct nilfs_bmap *btree, | |||
| 1315 | if (ret < 0) | 1317 | if (ret < 0) |
| 1316 | goto err_out_curr_node; | 1318 | goto err_out_curr_node; |
| 1317 | sib = (struct nilfs_btree_node *)bh->b_data; | 1319 | sib = (struct nilfs_btree_node *)bh->b_data; |
| 1318 | if (nilfs_btree_node_get_nchildren(sib) > | 1320 | if (nilfs_btree_node_get_nchildren(sib) > ncmin) { |
| 1319 | nilfs_btree_node_nchildren_min(sib, btree)) { | ||
| 1320 | path[level].bp_sib_bh = bh; | 1321 | path[level].bp_sib_bh = bh; |
| 1321 | path[level].bp_op = nilfs_btree_borrow_left; | 1322 | path[level].bp_op = nilfs_btree_borrow_left; |
| 1322 | stats->bs_nblocks++; | 1323 | stats->bs_nblocks++; |
| @@ -1336,8 +1337,7 @@ static int nilfs_btree_prepare_delete(struct nilfs_bmap *btree, | |||
| 1336 | if (ret < 0) | 1337 | if (ret < 0) |
| 1337 | goto err_out_curr_node; | 1338 | goto err_out_curr_node; |
| 1338 | sib = (struct nilfs_btree_node *)bh->b_data; | 1339 | sib = (struct nilfs_btree_node *)bh->b_data; |
| 1339 | if (nilfs_btree_node_get_nchildren(sib) > | 1340 | if (nilfs_btree_node_get_nchildren(sib) > ncmin) { |
| 1340 | nilfs_btree_node_nchildren_min(sib, btree)) { | ||
| 1341 | path[level].bp_sib_bh = bh; | 1341 | path[level].bp_sib_bh = bh; |
| 1342 | path[level].bp_op = nilfs_btree_borrow_right; | 1342 | path[level].bp_op = nilfs_btree_borrow_right; |
| 1343 | stats->bs_nblocks++; | 1343 | stats->bs_nblocks++; |
