.. | .. |
---|
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 | } |
---|