| .. | .. |
|---|
| 73 | 73 | struct the_nilfs *nilfs = inode->i_sb->s_fs_info; |
|---|
| 74 | 74 | |
|---|
| 75 | 75 | err = nilfs_dat_translate(nilfs->ns_dat, vbn, &pbn); |
|---|
| 76 | | - if (unlikely(err)) { /* -EIO, -ENOMEM, -ENOENT */ |
|---|
| 77 | | - brelse(bh); |
|---|
| 76 | + if (unlikely(err)) /* -EIO, -ENOMEM, -ENOENT */ |
|---|
| 78 | 77 | goto failed; |
|---|
| 79 | | - } |
|---|
| 80 | 78 | } |
|---|
| 81 | 79 | |
|---|
| 82 | 80 | lock_buffer(bh); |
|---|
| .. | .. |
|---|
| 102 | 100 | failed: |
|---|
| 103 | 101 | unlock_page(bh->b_page); |
|---|
| 104 | 102 | put_page(bh->b_page); |
|---|
| 103 | + if (unlikely(err)) |
|---|
| 104 | + brelse(bh); |
|---|
| 105 | 105 | return err; |
|---|
| 106 | 106 | } |
|---|
| 107 | 107 | |
|---|
| .. | .. |
|---|
| 126 | 126 | int nilfs_gccache_submit_read_node(struct inode *inode, sector_t pbn, |
|---|
| 127 | 127 | __u64 vbn, struct buffer_head **out_bh) |
|---|
| 128 | 128 | { |
|---|
| 129 | + struct inode *btnc_inode = NILFS_I(inode)->i_assoc_inode; |
|---|
| 129 | 130 | int ret; |
|---|
| 130 | 131 | |
|---|
| 131 | | - ret = nilfs_btnode_submit_block(&NILFS_I(inode)->i_btnode_cache, |
|---|
| 132 | + ret = nilfs_btnode_submit_block(btnc_inode->i_mapping, |
|---|
| 132 | 133 | vbn ? : pbn, pbn, REQ_OP_READ, 0, |
|---|
| 133 | 134 | out_bh, &pbn); |
|---|
| 134 | 135 | if (ret == -EEXIST) /* internal code (cache hit) */ |
|---|
| .. | .. |
|---|
| 142 | 143 | if (!buffer_uptodate(bh)) { |
|---|
| 143 | 144 | struct inode *inode = bh->b_page->mapping->host; |
|---|
| 144 | 145 | |
|---|
| 145 | | - nilfs_msg(inode->i_sb, KERN_ERR, |
|---|
| 146 | + nilfs_err(inode->i_sb, |
|---|
| 146 | 147 | "I/O error reading %s block for GC (ino=%lu, vblocknr=%llu)", |
|---|
| 147 | 148 | buffer_nilfs_node(bh) ? "node" : "data", |
|---|
| 148 | 149 | inode->i_ino, (unsigned long long)bh->b_blocknr); |
|---|
| .. | .. |
|---|
| 170 | 171 | ii->i_flags = 0; |
|---|
| 171 | 172 | nilfs_bmap_init_gc(ii->i_bmap); |
|---|
| 172 | 173 | |
|---|
| 173 | | - return 0; |
|---|
| 174 | + return nilfs_attach_btree_node_cache(inode); |
|---|
| 174 | 175 | } |
|---|
| 175 | 176 | |
|---|
| 176 | 177 | /** |
|---|
| .. | .. |
|---|
| 185 | 186 | ii = list_first_entry(head, struct nilfs_inode_info, i_dirty); |
|---|
| 186 | 187 | list_del_init(&ii->i_dirty); |
|---|
| 187 | 188 | truncate_inode_pages(&ii->vfs_inode.i_data, 0); |
|---|
| 188 | | - nilfs_btnode_cache_clear(&ii->i_btnode_cache); |
|---|
| 189 | + nilfs_btnode_cache_clear(ii->i_assoc_inode->i_mapping); |
|---|
| 189 | 190 | iput(&ii->vfs_inode); |
|---|
| 190 | 191 | } |
|---|
| 191 | 192 | } |
|---|