diff options
Diffstat (limited to 'fs/nilfs2/btree.c')
-rw-r--r-- | fs/nilfs2/btree.c | 100 |
1 files changed, 46 insertions, 54 deletions
diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c index f5a0ec64e1aa..20e3fd0f4d4f 100644 --- a/fs/nilfs2/btree.c +++ b/fs/nilfs2/btree.c | |||
@@ -917,8 +917,8 @@ static int nilfs_btree_prepare_insert(struct nilfs_btree *btree, | |||
917 | path[level].bp_newreq.bpr_ptr = | 917 | path[level].bp_newreq.bpr_ptr = |
918 | btree->bt_ops->btop_find_target(btree, path, key); | 918 | btree->bt_ops->btop_find_target(btree, path, key); |
919 | 919 | ||
920 | ret = btree->bt_bmap.b_pops->bpop_prepare_alloc_ptr( | 920 | ret = nilfs_bmap_prepare_alloc_ptr(&btree->bt_bmap, |
921 | &btree->bt_bmap, &path[level].bp_newreq); | 921 | &path[level].bp_newreq); |
922 | if (ret < 0) | 922 | if (ret < 0) |
923 | goto err_out_data; | 923 | goto err_out_data; |
924 | 924 | ||
@@ -976,8 +976,8 @@ static int nilfs_btree_prepare_insert(struct nilfs_btree *btree, | |||
976 | /* split */ | 976 | /* split */ |
977 | path[level].bp_newreq.bpr_ptr = | 977 | path[level].bp_newreq.bpr_ptr = |
978 | path[level - 1].bp_newreq.bpr_ptr + 1; | 978 | path[level - 1].bp_newreq.bpr_ptr + 1; |
979 | ret = btree->bt_bmap.b_pops->bpop_prepare_alloc_ptr( | 979 | ret = nilfs_bmap_prepare_alloc_ptr(&btree->bt_bmap, |
980 | &btree->bt_bmap, &path[level].bp_newreq); | 980 | &path[level].bp_newreq); |
981 | if (ret < 0) | 981 | if (ret < 0) |
982 | goto err_out_child_node; | 982 | goto err_out_child_node; |
983 | ret = nilfs_btree_get_new_block(btree, | 983 | ret = nilfs_btree_get_new_block(btree, |
@@ -1008,8 +1008,8 @@ static int nilfs_btree_prepare_insert(struct nilfs_btree *btree, | |||
1008 | 1008 | ||
1009 | /* grow */ | 1009 | /* grow */ |
1010 | path[level].bp_newreq.bpr_ptr = path[level - 1].bp_newreq.bpr_ptr + 1; | 1010 | path[level].bp_newreq.bpr_ptr = path[level - 1].bp_newreq.bpr_ptr + 1; |
1011 | ret = btree->bt_bmap.b_pops->bpop_prepare_alloc_ptr( | 1011 | ret = nilfs_bmap_prepare_alloc_ptr(&btree->bt_bmap, |
1012 | &btree->bt_bmap, &path[level].bp_newreq); | 1012 | &path[level].bp_newreq); |
1013 | if (ret < 0) | 1013 | if (ret < 0) |
1014 | goto err_out_child_node; | 1014 | goto err_out_child_node; |
1015 | ret = nilfs_btree_get_new_block(btree, path[level].bp_newreq.bpr_ptr, | 1015 | ret = nilfs_btree_get_new_block(btree, path[level].bp_newreq.bpr_ptr, |
@@ -1037,18 +1037,16 @@ static int nilfs_btree_prepare_insert(struct nilfs_btree *btree, | |||
1037 | 1037 | ||
1038 | /* error */ | 1038 | /* error */ |
1039 | err_out_curr_node: | 1039 | err_out_curr_node: |
1040 | btree->bt_bmap.b_pops->bpop_abort_alloc_ptr(&btree->bt_bmap, | 1040 | nilfs_bmap_abort_alloc_ptr(&btree->bt_bmap, &path[level].bp_newreq); |
1041 | &path[level].bp_newreq); | ||
1042 | err_out_child_node: | 1041 | err_out_child_node: |
1043 | for (level--; level > NILFS_BTREE_LEVEL_DATA; level--) { | 1042 | for (level--; level > NILFS_BTREE_LEVEL_DATA; level--) { |
1044 | nilfs_btnode_delete(path[level].bp_sib_bh); | 1043 | nilfs_btnode_delete(path[level].bp_sib_bh); |
1045 | btree->bt_bmap.b_pops->bpop_abort_alloc_ptr( | 1044 | nilfs_bmap_abort_alloc_ptr(&btree->bt_bmap, |
1046 | &btree->bt_bmap, &path[level].bp_newreq); | 1045 | &path[level].bp_newreq); |
1047 | 1046 | ||
1048 | } | 1047 | } |
1049 | 1048 | ||
1050 | btree->bt_bmap.b_pops->bpop_abort_alloc_ptr(&btree->bt_bmap, | 1049 | nilfs_bmap_abort_alloc_ptr(&btree->bt_bmap, &path[level].bp_newreq); |
1051 | &path[level].bp_newreq); | ||
1052 | err_out_data: | 1050 | err_out_data: |
1053 | *levelp = level; | 1051 | *levelp = level; |
1054 | stats->bs_nblocks = 0; | 1052 | stats->bs_nblocks = 0; |
@@ -1067,8 +1065,8 @@ static void nilfs_btree_commit_insert(struct nilfs_btree *btree, | |||
1067 | btree->bt_ops->btop_set_target(btree, key, ptr); | 1065 | btree->bt_ops->btop_set_target(btree, key, ptr); |
1068 | 1066 | ||
1069 | for (level = NILFS_BTREE_LEVEL_NODE_MIN; level <= maxlevel; level++) { | 1067 | for (level = NILFS_BTREE_LEVEL_NODE_MIN; level <= maxlevel; level++) { |
1070 | btree->bt_bmap.b_pops->bpop_commit_alloc_ptr( | 1068 | nilfs_bmap_commit_alloc_ptr(&btree->bt_bmap, |
1071 | &btree->bt_bmap, &path[level - 1].bp_newreq); | 1069 | &path[level - 1].bp_newreq); |
1072 | path[level].bp_op(btree, path, level, &key, &ptr); | 1070 | path[level].bp_op(btree, path, level, &key, &ptr); |
1073 | } | 1071 | } |
1074 | 1072 | ||
@@ -1312,12 +1310,10 @@ static int nilfs_btree_prepare_delete(struct nilfs_btree *btree, | |||
1312 | path[level].bp_oldreq.bpr_ptr = | 1310 | path[level].bp_oldreq.bpr_ptr = |
1313 | nilfs_btree_node_get_ptr(btree, node, | 1311 | nilfs_btree_node_get_ptr(btree, node, |
1314 | path[level].bp_index); | 1312 | path[level].bp_index); |
1315 | if (btree->bt_bmap.b_pops->bpop_prepare_end_ptr != NULL) { | 1313 | ret = nilfs_bmap_prepare_end_ptr(&btree->bt_bmap, |
1316 | ret = btree->bt_bmap.b_pops->bpop_prepare_end_ptr( | 1314 | &path[level].bp_oldreq); |
1317 | &btree->bt_bmap, &path[level].bp_oldreq); | 1315 | if (ret < 0) |
1318 | if (ret < 0) | 1316 | goto err_out_child_node; |
1319 | goto err_out_child_node; | ||
1320 | } | ||
1321 | 1317 | ||
1322 | if (nilfs_btree_node_get_nchildren(btree, node) > | 1318 | if (nilfs_btree_node_get_nchildren(btree, node) > |
1323 | nilfs_btree_node_nchildren_min(btree, node)) { | 1319 | nilfs_btree_node_nchildren_min(btree, node)) { |
@@ -1391,12 +1387,12 @@ static int nilfs_btree_prepare_delete(struct nilfs_btree *btree, | |||
1391 | node = nilfs_btree_get_root(btree); | 1387 | node = nilfs_btree_get_root(btree); |
1392 | path[level].bp_oldreq.bpr_ptr = | 1388 | path[level].bp_oldreq.bpr_ptr = |
1393 | nilfs_btree_node_get_ptr(btree, node, path[level].bp_index); | 1389 | nilfs_btree_node_get_ptr(btree, node, path[level].bp_index); |
1394 | if (btree->bt_bmap.b_pops->bpop_prepare_end_ptr != NULL) { | 1390 | |
1395 | ret = btree->bt_bmap.b_pops->bpop_prepare_end_ptr( | 1391 | ret = nilfs_bmap_prepare_end_ptr(&btree->bt_bmap, |
1396 | &btree->bt_bmap, &path[level].bp_oldreq); | 1392 | &path[level].bp_oldreq); |
1397 | if (ret < 0) | 1393 | if (ret < 0) |
1398 | goto err_out_child_node; | 1394 | goto err_out_child_node; |
1399 | } | 1395 | |
1400 | /* child of the root node is deleted */ | 1396 | /* child of the root node is deleted */ |
1401 | path[level].bp_op = nilfs_btree_do_delete; | 1397 | path[level].bp_op = nilfs_btree_do_delete; |
1402 | stats->bs_nblocks++; | 1398 | stats->bs_nblocks++; |
@@ -1408,15 +1404,12 @@ static int nilfs_btree_prepare_delete(struct nilfs_btree *btree, | |||
1408 | 1404 | ||
1409 | /* error */ | 1405 | /* error */ |
1410 | err_out_curr_node: | 1406 | err_out_curr_node: |
1411 | if (btree->bt_bmap.b_pops->bpop_abort_end_ptr != NULL) | 1407 | nilfs_bmap_abort_end_ptr(&btree->bt_bmap, &path[level].bp_oldreq); |
1412 | btree->bt_bmap.b_pops->bpop_abort_end_ptr( | ||
1413 | &btree->bt_bmap, &path[level].bp_oldreq); | ||
1414 | err_out_child_node: | 1408 | err_out_child_node: |
1415 | for (level--; level >= NILFS_BTREE_LEVEL_NODE_MIN; level--) { | 1409 | for (level--; level >= NILFS_BTREE_LEVEL_NODE_MIN; level--) { |
1416 | brelse(path[level].bp_sib_bh); | 1410 | brelse(path[level].bp_sib_bh); |
1417 | if (btree->bt_bmap.b_pops->bpop_abort_end_ptr != NULL) | 1411 | nilfs_bmap_abort_end_ptr(&btree->bt_bmap, |
1418 | btree->bt_bmap.b_pops->bpop_abort_end_ptr( | 1412 | &path[level].bp_oldreq); |
1419 | &btree->bt_bmap, &path[level].bp_oldreq); | ||
1420 | } | 1413 | } |
1421 | *levelp = level; | 1414 | *levelp = level; |
1422 | stats->bs_nblocks = 0; | 1415 | stats->bs_nblocks = 0; |
@@ -1430,9 +1423,8 @@ static void nilfs_btree_commit_delete(struct nilfs_btree *btree, | |||
1430 | int level; | 1423 | int level; |
1431 | 1424 | ||
1432 | for (level = NILFS_BTREE_LEVEL_NODE_MIN; level <= maxlevel; level++) { | 1425 | for (level = NILFS_BTREE_LEVEL_NODE_MIN; level <= maxlevel; level++) { |
1433 | if (btree->bt_bmap.b_pops->bpop_commit_end_ptr != NULL) | 1426 | nilfs_bmap_commit_end_ptr(&btree->bt_bmap, |
1434 | btree->bt_bmap.b_pops->bpop_commit_end_ptr( | 1427 | &path[level].bp_oldreq); |
1435 | &btree->bt_bmap, &path[level].bp_oldreq); | ||
1436 | path[level].bp_op(btree, path, level, NULL, NULL); | 1428 | path[level].bp_op(btree, path, level, NULL, NULL); |
1437 | } | 1429 | } |
1438 | 1430 | ||
@@ -1597,7 +1589,7 @@ nilfs_btree_prepare_convert_and_insert(struct nilfs_bmap *bmap, __u64 key, | |||
1597 | if (btree->bt_ops->btop_find_target != NULL) | 1589 | if (btree->bt_ops->btop_find_target != NULL) |
1598 | dreq->bpr_ptr | 1590 | dreq->bpr_ptr |
1599 | = btree->bt_ops->btop_find_target(btree, NULL, key); | 1591 | = btree->bt_ops->btop_find_target(btree, NULL, key); |
1600 | ret = bmap->b_pops->bpop_prepare_alloc_ptr(bmap, dreq); | 1592 | ret = nilfs_bmap_prepare_alloc_ptr(bmap, dreq); |
1601 | if (ret < 0) | 1593 | if (ret < 0) |
1602 | return ret; | 1594 | return ret; |
1603 | 1595 | ||
@@ -1605,7 +1597,7 @@ nilfs_btree_prepare_convert_and_insert(struct nilfs_bmap *bmap, __u64 key, | |||
1605 | stats->bs_nblocks++; | 1597 | stats->bs_nblocks++; |
1606 | if (nreq != NULL) { | 1598 | if (nreq != NULL) { |
1607 | nreq->bpr_ptr = dreq->bpr_ptr + 1; | 1599 | nreq->bpr_ptr = dreq->bpr_ptr + 1; |
1608 | ret = bmap->b_pops->bpop_prepare_alloc_ptr(bmap, nreq); | 1600 | ret = nilfs_bmap_prepare_alloc_ptr(bmap, nreq); |
1609 | if (ret < 0) | 1601 | if (ret < 0) |
1610 | goto err_out_dreq; | 1602 | goto err_out_dreq; |
1611 | 1603 | ||
@@ -1622,9 +1614,9 @@ nilfs_btree_prepare_convert_and_insert(struct nilfs_bmap *bmap, __u64 key, | |||
1622 | 1614 | ||
1623 | /* error */ | 1615 | /* error */ |
1624 | err_out_nreq: | 1616 | err_out_nreq: |
1625 | bmap->b_pops->bpop_abort_alloc_ptr(bmap, nreq); | 1617 | nilfs_bmap_abort_alloc_ptr(bmap, nreq); |
1626 | err_out_dreq: | 1618 | err_out_dreq: |
1627 | bmap->b_pops->bpop_abort_alloc_ptr(bmap, dreq); | 1619 | nilfs_bmap_abort_alloc_ptr(bmap, dreq); |
1628 | stats->bs_nblocks = 0; | 1620 | stats->bs_nblocks = 0; |
1629 | return ret; | 1621 | return ret; |
1630 | 1622 | ||
@@ -1654,8 +1646,8 @@ nilfs_btree_commit_convert_and_insert(struct nilfs_bmap *bmap, | |||
1654 | btree = (struct nilfs_btree *)bmap; | 1646 | btree = (struct nilfs_btree *)bmap; |
1655 | nilfs_btree_init(bmap); | 1647 | nilfs_btree_init(bmap); |
1656 | if (nreq != NULL) { | 1648 | if (nreq != NULL) { |
1657 | bmap->b_pops->bpop_commit_alloc_ptr(bmap, dreq); | 1649 | nilfs_bmap_commit_alloc_ptr(bmap, dreq); |
1658 | bmap->b_pops->bpop_commit_alloc_ptr(bmap, nreq); | 1650 | nilfs_bmap_commit_alloc_ptr(bmap, nreq); |
1659 | 1651 | ||
1660 | /* create child node at level 1 */ | 1652 | /* create child node at level 1 */ |
1661 | lock_buffer(bh); | 1653 | lock_buffer(bh); |
@@ -1677,7 +1669,7 @@ nilfs_btree_commit_convert_and_insert(struct nilfs_bmap *bmap, | |||
1677 | nilfs_btree_node_init(btree, node, NILFS_BTREE_NODE_ROOT, | 1669 | nilfs_btree_node_init(btree, node, NILFS_BTREE_NODE_ROOT, |
1678 | 2, 1, &keys[0], &tmpptr); | 1670 | 2, 1, &keys[0], &tmpptr); |
1679 | } else { | 1671 | } else { |
1680 | bmap->b_pops->bpop_commit_alloc_ptr(bmap, dreq); | 1672 | nilfs_bmap_commit_alloc_ptr(bmap, dreq); |
1681 | 1673 | ||
1682 | /* create root node at level 1 */ | 1674 | /* create root node at level 1 */ |
1683 | node = nilfs_btree_get_root(btree); | 1675 | node = nilfs_btree_get_root(btree); |
@@ -1758,9 +1750,9 @@ static int nilfs_btree_prepare_update_v(struct nilfs_btree *btree, | |||
1758 | nilfs_btree_node_get_ptr(btree, parent, | 1750 | nilfs_btree_node_get_ptr(btree, parent, |
1759 | path[level + 1].bp_index); | 1751 | path[level + 1].bp_index); |
1760 | path[level].bp_newreq.bpr_ptr = path[level].bp_oldreq.bpr_ptr + 1; | 1752 | path[level].bp_newreq.bpr_ptr = path[level].bp_oldreq.bpr_ptr + 1; |
1761 | ret = nilfs_bmap_prepare_update(&btree->bt_bmap, | 1753 | ret = nilfs_bmap_prepare_update_v(&btree->bt_bmap, |
1762 | &path[level].bp_oldreq, | 1754 | &path[level].bp_oldreq, |
1763 | &path[level].bp_newreq); | 1755 | &path[level].bp_newreq); |
1764 | if (ret < 0) | 1756 | if (ret < 0) |
1765 | return ret; | 1757 | return ret; |
1766 | 1758 | ||
@@ -1772,9 +1764,9 @@ static int nilfs_btree_prepare_update_v(struct nilfs_btree *btree, | |||
1772 | &NILFS_BMAP_I(&btree->bt_bmap)->i_btnode_cache, | 1764 | &NILFS_BMAP_I(&btree->bt_bmap)->i_btnode_cache, |
1773 | &path[level].bp_ctxt); | 1765 | &path[level].bp_ctxt); |
1774 | if (ret < 0) { | 1766 | if (ret < 0) { |
1775 | nilfs_bmap_abort_update(&btree->bt_bmap, | 1767 | nilfs_bmap_abort_update_v(&btree->bt_bmap, |
1776 | &path[level].bp_oldreq, | 1768 | &path[level].bp_oldreq, |
1777 | &path[level].bp_newreq); | 1769 | &path[level].bp_newreq); |
1778 | return ret; | 1770 | return ret; |
1779 | } | 1771 | } |
1780 | } | 1772 | } |
@@ -1788,9 +1780,9 @@ static void nilfs_btree_commit_update_v(struct nilfs_btree *btree, | |||
1788 | { | 1780 | { |
1789 | struct nilfs_btree_node *parent; | 1781 | struct nilfs_btree_node *parent; |
1790 | 1782 | ||
1791 | nilfs_bmap_commit_update(&btree->bt_bmap, | 1783 | nilfs_bmap_commit_update_v(&btree->bt_bmap, |
1792 | &path[level].bp_oldreq, | 1784 | &path[level].bp_oldreq, |
1793 | &path[level].bp_newreq); | 1785 | &path[level].bp_newreq); |
1794 | 1786 | ||
1795 | if (buffer_nilfs_node(path[level].bp_bh)) { | 1787 | if (buffer_nilfs_node(path[level].bp_bh)) { |
1796 | nilfs_btnode_commit_change_key( | 1788 | nilfs_btnode_commit_change_key( |
@@ -1809,9 +1801,9 @@ static void nilfs_btree_abort_update_v(struct nilfs_btree *btree, | |||
1809 | struct nilfs_btree_path *path, | 1801 | struct nilfs_btree_path *path, |
1810 | int level) | 1802 | int level) |
1811 | { | 1803 | { |
1812 | nilfs_bmap_abort_update(&btree->bt_bmap, | 1804 | nilfs_bmap_abort_update_v(&btree->bt_bmap, |
1813 | &path[level].bp_oldreq, | 1805 | &path[level].bp_oldreq, |
1814 | &path[level].bp_newreq); | 1806 | &path[level].bp_newreq); |
1815 | if (buffer_nilfs_node(path[level].bp_bh)) | 1807 | if (buffer_nilfs_node(path[level].bp_bh)) |
1816 | nilfs_btnode_abort_change_key( | 1808 | nilfs_btnode_abort_change_key( |
1817 | &NILFS_BMAP_I(&btree->bt_bmap)->i_btnode_cache, | 1809 | &NILFS_BMAP_I(&btree->bt_bmap)->i_btnode_cache, |