diff options
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/glops.c | 5 | ||||
-rw-r--r-- | fs/gfs2/incore.h | 2 | ||||
-rw-r--r-- | fs/gfs2/inode.c | 4 | ||||
-rw-r--r-- | fs/gfs2/ops_inode.c | 2 |
4 files changed, 7 insertions, 6 deletions
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index aad45b7a927d..9c2033714b08 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c | |||
@@ -305,8 +305,9 @@ static void inode_go_inval(struct gfs2_glock *gl, int flags) | |||
305 | int data = (flags & DIO_DATA); | 305 | int data = (flags & DIO_DATA); |
306 | 306 | ||
307 | if (meta) { | 307 | if (meta) { |
308 | struct gfs2_inode *ip = gl->gl_object; | ||
308 | gfs2_meta_inval(gl); | 309 | gfs2_meta_inval(gl); |
309 | gl->gl_vn++; | 310 | set_bit(GIF_INVALID, &ip->i_flags); |
310 | } | 311 | } |
311 | if (data) | 312 | if (data) |
312 | gfs2_page_inval(gl); | 313 | gfs2_page_inval(gl); |
@@ -351,7 +352,7 @@ static int inode_go_lock(struct gfs2_holder *gh) | |||
351 | if (!ip) | 352 | if (!ip) |
352 | return 0; | 353 | return 0; |
353 | 354 | ||
354 | if (ip->i_vn != gl->gl_vn) { | 355 | if (test_bit(GIF_INVALID, &ip->i_flags)) { |
355 | error = gfs2_inode_refresh(ip); | 356 | error = gfs2_inode_refresh(ip); |
356 | if (error) | 357 | if (error) |
357 | return error; | 358 | return error; |
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index c0a8c3b6a852..227a74dc5ec0 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h | |||
@@ -217,6 +217,7 @@ struct gfs2_alloc { | |||
217 | }; | 217 | }; |
218 | 218 | ||
219 | enum { | 219 | enum { |
220 | GIF_INVALID = 0, | ||
220 | GIF_QD_LOCKED = 1, | 221 | GIF_QD_LOCKED = 1, |
221 | GIF_PAGED = 2, | 222 | GIF_PAGED = 2, |
222 | GIF_SW_PAGED = 3, | 223 | GIF_SW_PAGED = 3, |
@@ -228,7 +229,6 @@ struct gfs2_inode { | |||
228 | 229 | ||
229 | unsigned long i_flags; /* GIF_... */ | 230 | unsigned long i_flags; /* GIF_... */ |
230 | 231 | ||
231 | u64 i_vn; | ||
232 | struct gfs2_dinode_host i_di; /* To be replaced by ref to block */ | 232 | struct gfs2_dinode_host i_di; /* To be replaced by ref to block */ |
233 | 233 | ||
234 | struct gfs2_glock *i_gl; /* Move into i_gh? */ | 234 | struct gfs2_glock *i_gl; /* Move into i_gh? */ |
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index f6177fc68320..e467780837e6 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c | |||
@@ -145,7 +145,7 @@ struct inode *gfs2_inode_lookup(struct super_block *sb, struct gfs2_inum_host *i | |||
145 | if (unlikely(error)) | 145 | if (unlikely(error)) |
146 | goto fail_put; | 146 | goto fail_put; |
147 | 147 | ||
148 | ip->i_vn = ip->i_gl->gl_vn - 1; | 148 | set_bit(GIF_INVALID, &ip->i_flags); |
149 | error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh); | 149 | error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh); |
150 | if (unlikely(error)) | 150 | if (unlikely(error)) |
151 | goto fail_iopen; | 151 | goto fail_iopen; |
@@ -242,7 +242,7 @@ int gfs2_inode_refresh(struct gfs2_inode *ip) | |||
242 | 242 | ||
243 | error = gfs2_dinode_in(ip, dibh->b_data); | 243 | error = gfs2_dinode_in(ip, dibh->b_data); |
244 | brelse(dibh); | 244 | brelse(dibh); |
245 | ip->i_vn = ip->i_gl->gl_vn; | 245 | clear_bit(GIF_INVALID, &ip->i_flags); |
246 | 246 | ||
247 | return error; | 247 | return error; |
248 | } | 248 | } |
diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c index 0e4eade47bf2..b247f25effbf 100644 --- a/fs/gfs2/ops_inode.c +++ b/fs/gfs2/ops_inode.c | |||
@@ -844,7 +844,7 @@ static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd) | |||
844 | struct gfs2_holder i_gh; | 844 | struct gfs2_holder i_gh; |
845 | int error; | 845 | int error; |
846 | 846 | ||
847 | if (ip->i_vn == ip->i_gl->gl_vn) | 847 | if (!test_bit(GIF_INVALID, &ip->i_flags)) |
848 | return generic_permission(inode, mask, gfs2_check_acl); | 848 | return generic_permission(inode, mask, gfs2_check_acl); |
849 | 849 | ||
850 | error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh); | 850 | error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh); |