diff options
Diffstat (limited to 'fs/nilfs2/gcinode.c')
-rw-r--r-- | fs/nilfs2/gcinode.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/fs/nilfs2/gcinode.c b/fs/nilfs2/gcinode.c index 1c2a3e23f8b2..08a07a218d26 100644 --- a/fs/nilfs2/gcinode.c +++ b/fs/nilfs2/gcinode.c | |||
@@ -48,9 +48,6 @@ | |||
48 | #include "dat.h" | 48 | #include "dat.h" |
49 | #include "ifile.h" | 49 | #include "ifile.h" |
50 | 50 | ||
51 | static const struct address_space_operations def_gcinode_aops = { | ||
52 | }; | ||
53 | |||
54 | /* | 51 | /* |
55 | * nilfs_gccache_submit_read_data() - add data buffer and submit read request | 52 | * nilfs_gccache_submit_read_data() - add data buffer and submit read request |
56 | * @inode - gc inode | 53 | * @inode - gc inode |
@@ -87,9 +84,9 @@ int nilfs_gccache_submit_read_data(struct inode *inode, sector_t blkoff, | |||
87 | goto out; | 84 | goto out; |
88 | 85 | ||
89 | if (pbn == 0) { | 86 | if (pbn == 0) { |
90 | struct inode *dat_inode = NILFS_I_NILFS(inode)->ns_dat; | 87 | struct the_nilfs *nilfs = inode->i_sb->s_fs_info; |
91 | /* use original dat, not gc dat. */ | 88 | |
92 | err = nilfs_dat_translate(dat_inode, vbn, &pbn); | 89 | err = nilfs_dat_translate(nilfs->ns_dat, vbn, &pbn); |
93 | if (unlikely(err)) { /* -EIO, -ENOMEM, -ENOENT */ | 90 | if (unlikely(err)) { /* -EIO, -ENOMEM, -ENOENT */ |
94 | brelse(bh); | 91 | brelse(bh); |
95 | goto failed; | 92 | goto failed; |
@@ -103,7 +100,7 @@ int nilfs_gccache_submit_read_data(struct inode *inode, sector_t blkoff, | |||
103 | } | 100 | } |
104 | 101 | ||
105 | if (!buffer_mapped(bh)) { | 102 | if (!buffer_mapped(bh)) { |
106 | bh->b_bdev = NILFS_I_NILFS(inode)->ns_bdev; | 103 | bh->b_bdev = inode->i_sb->s_bdev; |
107 | set_buffer_mapped(bh); | 104 | set_buffer_mapped(bh); |
108 | } | 105 | } |
109 | bh->b_blocknr = pbn; | 106 | bh->b_blocknr = pbn; |
@@ -160,15 +157,11 @@ int nilfs_gccache_wait_and_mark_dirty(struct buffer_head *bh) | |||
160 | if (buffer_dirty(bh)) | 157 | if (buffer_dirty(bh)) |
161 | return -EEXIST; | 158 | return -EEXIST; |
162 | 159 | ||
163 | if (buffer_nilfs_node(bh)) { | 160 | if (buffer_nilfs_node(bh) && nilfs_btree_broken_node_block(bh)) { |
164 | if (nilfs_btree_broken_node_block(bh)) { | 161 | clear_buffer_uptodate(bh); |
165 | clear_buffer_uptodate(bh); | 162 | return -EIO; |
166 | return -EIO; | ||
167 | } | ||
168 | nilfs_btnode_mark_dirty(bh); | ||
169 | } else { | ||
170 | nilfs_mark_buffer_dirty(bh); | ||
171 | } | 163 | } |
164 | mark_buffer_dirty(bh); | ||
172 | return 0; | 165 | return 0; |
173 | } | 166 | } |
174 | 167 | ||
@@ -178,7 +171,7 @@ int nilfs_init_gcinode(struct inode *inode) | |||
178 | 171 | ||
179 | inode->i_mode = S_IFREG; | 172 | inode->i_mode = S_IFREG; |
180 | mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS); | 173 | mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS); |
181 | inode->i_mapping->a_ops = &def_gcinode_aops; | 174 | inode->i_mapping->a_ops = &empty_aops; |
182 | inode->i_mapping->backing_dev_info = inode->i_sb->s_bdi; | 175 | inode->i_mapping->backing_dev_info = inode->i_sb->s_bdi; |
183 | 176 | ||
184 | ii->i_flags = 0; | 177 | ii->i_flags = 0; |