| .. | .. |
|---|
| 58 | 58 | static int nilfs_btree_get_new_block(const struct nilfs_bmap *btree, |
|---|
| 59 | 59 | __u64 ptr, struct buffer_head **bhp) |
|---|
| 60 | 60 | { |
|---|
| 61 | | - struct address_space *btnc = &NILFS_BMAP_I(btree)->i_btnode_cache; |
|---|
| 61 | + struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode; |
|---|
| 62 | + struct address_space *btnc = btnc_inode->i_mapping; |
|---|
| 62 | 63 | struct buffer_head *bh; |
|---|
| 63 | 64 | |
|---|
| 64 | 65 | bh = nilfs_btnode_create_block(btnc, ptr); |
|---|
| .. | .. |
|---|
| 351 | 352 | (flags & NILFS_BTREE_NODE_ROOT) || |
|---|
| 352 | 353 | nchildren < 0 || |
|---|
| 353 | 354 | nchildren > NILFS_BTREE_NODE_NCHILDREN_MAX(size))) { |
|---|
| 354 | | - nilfs_msg(inode->i_sb, KERN_CRIT, |
|---|
| 355 | | - "bad btree node (ino=%lu, blocknr=%llu): level = %d, flags = 0x%x, nchildren = %d", |
|---|
| 356 | | - inode->i_ino, (unsigned long long)blocknr, level, |
|---|
| 357 | | - flags, nchildren); |
|---|
| 355 | + nilfs_crit(inode->i_sb, |
|---|
| 356 | + "bad btree node (ino=%lu, blocknr=%llu): level = %d, flags = 0x%x, nchildren = %d", |
|---|
| 357 | + inode->i_ino, (unsigned long long)blocknr, level, |
|---|
| 358 | + flags, nchildren); |
|---|
| 358 | 359 | ret = 1; |
|---|
| 359 | 360 | } |
|---|
| 360 | 361 | return ret; |
|---|
| .. | .. |
|---|
| 381 | 382 | level >= NILFS_BTREE_LEVEL_MAX || |
|---|
| 382 | 383 | nchildren < 0 || |
|---|
| 383 | 384 | nchildren > NILFS_BTREE_ROOT_NCHILDREN_MAX)) { |
|---|
| 384 | | - nilfs_msg(inode->i_sb, KERN_CRIT, |
|---|
| 385 | | - "bad btree root (ino=%lu): level = %d, flags = 0x%x, nchildren = %d", |
|---|
| 386 | | - inode->i_ino, level, flags, nchildren); |
|---|
| 385 | + nilfs_crit(inode->i_sb, |
|---|
| 386 | + "bad btree root (ino=%lu): level = %d, flags = 0x%x, nchildren = %d", |
|---|
| 387 | + inode->i_ino, level, flags, nchildren); |
|---|
| 387 | 388 | ret = 1; |
|---|
| 388 | 389 | } |
|---|
| 389 | 390 | return ret; |
|---|
| .. | .. |
|---|
| 450 | 451 | { |
|---|
| 451 | 452 | if (unlikely(nilfs_btree_node_get_level(node) != level)) { |
|---|
| 452 | 453 | dump_stack(); |
|---|
| 453 | | - nilfs_msg(btree->b_inode->i_sb, KERN_CRIT, |
|---|
| 454 | | - "btree level mismatch (ino=%lu): %d != %d", |
|---|
| 455 | | - btree->b_inode->i_ino, |
|---|
| 456 | | - nilfs_btree_node_get_level(node), level); |
|---|
| 454 | + nilfs_crit(btree->b_inode->i_sb, |
|---|
| 455 | + "btree level mismatch (ino=%lu): %d != %d", |
|---|
| 456 | + btree->b_inode->i_ino, |
|---|
| 457 | + nilfs_btree_node_get_level(node), level); |
|---|
| 457 | 458 | return 1; |
|---|
| 458 | 459 | } |
|---|
| 459 | 460 | return 0; |
|---|
| .. | .. |
|---|
| 470 | 471 | struct buffer_head **bhp, |
|---|
| 471 | 472 | const struct nilfs_btree_readahead_info *ra) |
|---|
| 472 | 473 | { |
|---|
| 473 | | - struct address_space *btnc = &NILFS_BMAP_I(btree)->i_btnode_cache; |
|---|
| 474 | + struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode; |
|---|
| 475 | + struct address_space *btnc = btnc_inode->i_mapping; |
|---|
| 474 | 476 | struct buffer_head *bh, *ra_bh; |
|---|
| 475 | 477 | sector_t submit_ptr = 0; |
|---|
| 476 | 478 | int ret; |
|---|
| .. | .. |
|---|
| 508 | 510 | |
|---|
| 509 | 511 | out_no_wait: |
|---|
| 510 | 512 | if (!buffer_uptodate(bh)) { |
|---|
| 511 | | - nilfs_msg(btree->b_inode->i_sb, KERN_ERR, |
|---|
| 513 | + nilfs_err(btree->b_inode->i_sb, |
|---|
| 512 | 514 | "I/O error reading b-tree node block (ino=%lu, blocknr=%llu)", |
|---|
| 513 | 515 | btree->b_inode->i_ino, (unsigned long long)ptr); |
|---|
| 514 | 516 | brelse(bh); |
|---|
| .. | .. |
|---|
| 1742 | 1744 | dat = nilfs_bmap_get_dat(btree); |
|---|
| 1743 | 1745 | } |
|---|
| 1744 | 1746 | |
|---|
| 1747 | + ret = nilfs_attach_btree_node_cache(&NILFS_BMAP_I(btree)->vfs_inode); |
|---|
| 1748 | + if (ret < 0) |
|---|
| 1749 | + return ret; |
|---|
| 1750 | + |
|---|
| 1745 | 1751 | ret = nilfs_bmap_prepare_alloc_ptr(btree, dreq, dat); |
|---|
| 1746 | 1752 | if (ret < 0) |
|---|
| 1747 | 1753 | return ret; |
|---|
| .. | .. |
|---|
| 1914 | 1920 | path[level].bp_ctxt.newkey = path[level].bp_newreq.bpr_ptr; |
|---|
| 1915 | 1921 | path[level].bp_ctxt.bh = path[level].bp_bh; |
|---|
| 1916 | 1922 | ret = nilfs_btnode_prepare_change_key( |
|---|
| 1917 | | - &NILFS_BMAP_I(btree)->i_btnode_cache, |
|---|
| 1923 | + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping, |
|---|
| 1918 | 1924 | &path[level].bp_ctxt); |
|---|
| 1919 | 1925 | if (ret < 0) { |
|---|
| 1920 | 1926 | nilfs_dat_abort_update(dat, |
|---|
| .. | .. |
|---|
| 1940 | 1946 | |
|---|
| 1941 | 1947 | if (buffer_nilfs_node(path[level].bp_bh)) { |
|---|
| 1942 | 1948 | nilfs_btnode_commit_change_key( |
|---|
| 1943 | | - &NILFS_BMAP_I(btree)->i_btnode_cache, |
|---|
| 1949 | + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping, |
|---|
| 1944 | 1950 | &path[level].bp_ctxt); |
|---|
| 1945 | 1951 | path[level].bp_bh = path[level].bp_ctxt.bh; |
|---|
| 1946 | 1952 | } |
|---|
| .. | .. |
|---|
| 1959 | 1965 | &path[level].bp_newreq.bpr_req); |
|---|
| 1960 | 1966 | if (buffer_nilfs_node(path[level].bp_bh)) |
|---|
| 1961 | 1967 | nilfs_btnode_abort_change_key( |
|---|
| 1962 | | - &NILFS_BMAP_I(btree)->i_btnode_cache, |
|---|
| 1968 | + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping, |
|---|
| 1963 | 1969 | &path[level].bp_ctxt); |
|---|
| 1964 | 1970 | } |
|---|
| 1965 | 1971 | |
|---|
| .. | .. |
|---|
| 2074 | 2080 | ret = nilfs_btree_do_lookup(btree, path, key, NULL, level + 1, 0); |
|---|
| 2075 | 2081 | if (ret < 0) { |
|---|
| 2076 | 2082 | if (unlikely(ret == -ENOENT)) |
|---|
| 2077 | | - nilfs_msg(btree->b_inode->i_sb, KERN_CRIT, |
|---|
| 2078 | | - "writing node/leaf block does not appear in b-tree (ino=%lu) at key=%llu, level=%d", |
|---|
| 2079 | | - btree->b_inode->i_ino, |
|---|
| 2080 | | - (unsigned long long)key, level); |
|---|
| 2083 | + nilfs_crit(btree->b_inode->i_sb, |
|---|
| 2084 | + "writing node/leaf block does not appear in b-tree (ino=%lu) at key=%llu, level=%d", |
|---|
| 2085 | + btree->b_inode->i_ino, |
|---|
| 2086 | + (unsigned long long)key, level); |
|---|
| 2081 | 2087 | goto out; |
|---|
| 2082 | 2088 | } |
|---|
| 2083 | 2089 | |
|---|
| .. | .. |
|---|
| 2114 | 2120 | if (level < NILFS_BTREE_LEVEL_NODE_MIN || |
|---|
| 2115 | 2121 | level >= NILFS_BTREE_LEVEL_MAX) { |
|---|
| 2116 | 2122 | dump_stack(); |
|---|
| 2117 | | - nilfs_msg(btree->b_inode->i_sb, KERN_WARNING, |
|---|
| 2118 | | - "invalid btree level: %d (key=%llu, ino=%lu, blocknr=%llu)", |
|---|
| 2119 | | - level, (unsigned long long)key, |
|---|
| 2120 | | - btree->b_inode->i_ino, |
|---|
| 2121 | | - (unsigned long long)bh->b_blocknr); |
|---|
| 2123 | + nilfs_warn(btree->b_inode->i_sb, |
|---|
| 2124 | + "invalid btree level: %d (key=%llu, ino=%lu, blocknr=%llu)", |
|---|
| 2125 | + level, (unsigned long long)key, |
|---|
| 2126 | + btree->b_inode->i_ino, |
|---|
| 2127 | + (unsigned long long)bh->b_blocknr); |
|---|
| 2122 | 2128 | return; |
|---|
| 2123 | 2129 | } |
|---|
| 2124 | 2130 | |
|---|
| .. | .. |
|---|
| 2135 | 2141 | static void nilfs_btree_lookup_dirty_buffers(struct nilfs_bmap *btree, |
|---|
| 2136 | 2142 | struct list_head *listp) |
|---|
| 2137 | 2143 | { |
|---|
| 2138 | | - struct address_space *btcache = &NILFS_BMAP_I(btree)->i_btnode_cache; |
|---|
| 2144 | + struct inode *btnc_inode = NILFS_BMAP_I(btree)->i_assoc_inode; |
|---|
| 2145 | + struct address_space *btcache = btnc_inode->i_mapping; |
|---|
| 2139 | 2146 | struct list_head lists[NILFS_BTREE_LEVEL_MAX]; |
|---|
| 2140 | 2147 | struct pagevec pvec; |
|---|
| 2141 | 2148 | struct buffer_head *bh, *head; |
|---|
| .. | .. |
|---|
| 2189 | 2196 | path[level].bp_ctxt.newkey = blocknr; |
|---|
| 2190 | 2197 | path[level].bp_ctxt.bh = *bh; |
|---|
| 2191 | 2198 | ret = nilfs_btnode_prepare_change_key( |
|---|
| 2192 | | - &NILFS_BMAP_I(btree)->i_btnode_cache, |
|---|
| 2199 | + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping, |
|---|
| 2193 | 2200 | &path[level].bp_ctxt); |
|---|
| 2194 | 2201 | if (ret < 0) |
|---|
| 2195 | 2202 | return ret; |
|---|
| 2196 | 2203 | nilfs_btnode_commit_change_key( |
|---|
| 2197 | | - &NILFS_BMAP_I(btree)->i_btnode_cache, |
|---|
| 2204 | + NILFS_BMAP_I(btree)->i_assoc_inode->i_mapping, |
|---|
| 2198 | 2205 | &path[level].bp_ctxt); |
|---|
| 2199 | 2206 | *bh = path[level].bp_ctxt.bh; |
|---|
| 2200 | 2207 | } |
|---|
| .. | .. |
|---|
| 2399 | 2406 | |
|---|
| 2400 | 2407 | if (nilfs_btree_root_broken(nilfs_btree_get_root(bmap), bmap->b_inode)) |
|---|
| 2401 | 2408 | ret = -EIO; |
|---|
| 2409 | + else |
|---|
| 2410 | + ret = nilfs_attach_btree_node_cache( |
|---|
| 2411 | + &NILFS_BMAP_I(bmap)->vfs_inode); |
|---|
| 2412 | + |
|---|
| 2402 | 2413 | return ret; |
|---|
| 2403 | 2414 | } |
|---|
| 2404 | 2415 | |
|---|