diff options
Diffstat (limited to 'fs/gfs2/glops.c')
| -rw-r--r-- | fs/gfs2/glops.c | 16 | 
1 files changed, 9 insertions, 7 deletions
| diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index 78554acc0605..38e3749d476c 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c | |||
| @@ -87,7 +87,7 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl) | |||
| 87 | 87 | ||
| 88 | static void rgrp_go_sync(struct gfs2_glock *gl) | 88 | static void rgrp_go_sync(struct gfs2_glock *gl) | 
| 89 | { | 89 | { | 
| 90 | struct address_space *metamapping = gl->gl_aspace->i_mapping; | 90 | struct address_space *metamapping = gfs2_glock2aspace(gl); | 
| 91 | int error; | 91 | int error; | 
| 92 | 92 | ||
| 93 | if (!test_and_clear_bit(GLF_DIRTY, &gl->gl_flags)) | 93 | if (!test_and_clear_bit(GLF_DIRTY, &gl->gl_flags)) | 
| @@ -113,7 +113,7 @@ static void rgrp_go_sync(struct gfs2_glock *gl) | |||
| 113 | 113 | ||
| 114 | static void rgrp_go_inval(struct gfs2_glock *gl, int flags) | 114 | static void rgrp_go_inval(struct gfs2_glock *gl, int flags) | 
| 115 | { | 115 | { | 
| 116 | struct address_space *mapping = gl->gl_aspace->i_mapping; | 116 | struct address_space *mapping = gfs2_glock2aspace(gl); | 
| 117 | 117 | ||
| 118 | BUG_ON(!(flags & DIO_METADATA)); | 118 | BUG_ON(!(flags & DIO_METADATA)); | 
| 119 | gfs2_assert_withdraw(gl->gl_sbd, !atomic_read(&gl->gl_ail_count)); | 119 | gfs2_assert_withdraw(gl->gl_sbd, !atomic_read(&gl->gl_ail_count)); | 
| @@ -134,7 +134,7 @@ static void rgrp_go_inval(struct gfs2_glock *gl, int flags) | |||
| 134 | static void inode_go_sync(struct gfs2_glock *gl) | 134 | static void inode_go_sync(struct gfs2_glock *gl) | 
| 135 | { | 135 | { | 
| 136 | struct gfs2_inode *ip = gl->gl_object; | 136 | struct gfs2_inode *ip = gl->gl_object; | 
| 137 | struct address_space *metamapping = gl->gl_aspace->i_mapping; | 137 | struct address_space *metamapping = gfs2_glock2aspace(gl); | 
| 138 | int error; | 138 | int error; | 
| 139 | 139 | ||
| 140 | if (ip && !S_ISREG(ip->i_inode.i_mode)) | 140 | if (ip && !S_ISREG(ip->i_inode.i_mode)) | 
| @@ -183,7 +183,7 @@ static void inode_go_inval(struct gfs2_glock *gl, int flags) | |||
| 183 | gfs2_assert_withdraw(gl->gl_sbd, !atomic_read(&gl->gl_ail_count)); | 183 | gfs2_assert_withdraw(gl->gl_sbd, !atomic_read(&gl->gl_ail_count)); | 
| 184 | 184 | ||
| 185 | if (flags & DIO_METADATA) { | 185 | if (flags & DIO_METADATA) { | 
| 186 | struct address_space *mapping = gl->gl_aspace->i_mapping; | 186 | struct address_space *mapping = gfs2_glock2aspace(gl); | 
| 187 | truncate_inode_pages(mapping, 0); | 187 | truncate_inode_pages(mapping, 0); | 
| 188 | if (ip) { | 188 | if (ip) { | 
| 189 | set_bit(GIF_INVALID, &ip->i_flags); | 189 | set_bit(GIF_INVALID, &ip->i_flags); | 
| @@ -282,7 +282,8 @@ static int inode_go_dump(struct seq_file *seq, const struct gfs2_glock *gl) | |||
| 282 | 282 | ||
| 283 | static int rgrp_go_demote_ok(const struct gfs2_glock *gl) | 283 | static int rgrp_go_demote_ok(const struct gfs2_glock *gl) | 
| 284 | { | 284 | { | 
| 285 | return !gl->gl_aspace->i_mapping->nrpages; | 285 | const struct address_space *mapping = (const struct address_space *)(gl + 1); | 
| 286 | return !mapping->nrpages; | ||
| 286 | } | 287 | } | 
| 287 | 288 | ||
| 288 | /** | 289 | /** | 
| @@ -387,8 +388,7 @@ static void iopen_go_callback(struct gfs2_glock *gl) | |||
| 387 | struct gfs2_inode *ip = (struct gfs2_inode *)gl->gl_object; | 388 | struct gfs2_inode *ip = (struct gfs2_inode *)gl->gl_object; | 
| 388 | 389 | ||
| 389 | if (gl->gl_demote_state == LM_ST_UNLOCKED && | 390 | if (gl->gl_demote_state == LM_ST_UNLOCKED && | 
| 390 | gl->gl_state == LM_ST_SHARED && | 391 | gl->gl_state == LM_ST_SHARED && ip) { | 
| 391 | ip && test_bit(GIF_USER, &ip->i_flags)) { | ||
| 392 | gfs2_glock_hold(gl); | 392 | gfs2_glock_hold(gl); | 
| 393 | if (queue_work(gfs2_delete_workqueue, &gl->gl_delete) == 0) | 393 | if (queue_work(gfs2_delete_workqueue, &gl->gl_delete) == 0) | 
| 394 | gfs2_glock_put_nolock(gl); | 394 | gfs2_glock_put_nolock(gl); | 
| @@ -407,6 +407,7 @@ const struct gfs2_glock_operations gfs2_inode_glops = { | |||
| 407 | .go_dump = inode_go_dump, | 407 | .go_dump = inode_go_dump, | 
| 408 | .go_type = LM_TYPE_INODE, | 408 | .go_type = LM_TYPE_INODE, | 
| 409 | .go_min_hold_time = HZ / 5, | 409 | .go_min_hold_time = HZ / 5, | 
| 410 | .go_flags = GLOF_ASPACE, | ||
| 410 | }; | 411 | }; | 
| 411 | 412 | ||
| 412 | const struct gfs2_glock_operations gfs2_rgrp_glops = { | 413 | const struct gfs2_glock_operations gfs2_rgrp_glops = { | 
| @@ -418,6 +419,7 @@ const struct gfs2_glock_operations gfs2_rgrp_glops = { | |||
| 418 | .go_dump = gfs2_rgrp_dump, | 419 | .go_dump = gfs2_rgrp_dump, | 
| 419 | .go_type = LM_TYPE_RGRP, | 420 | .go_type = LM_TYPE_RGRP, | 
| 420 | .go_min_hold_time = HZ / 5, | 421 | .go_min_hold_time = HZ / 5, | 
| 422 | .go_flags = GLOF_ASPACE, | ||
| 421 | }; | 423 | }; | 
| 422 | 424 | ||
| 423 | const struct gfs2_glock_operations gfs2_trans_glops = { | 425 | const struct gfs2_glock_operations gfs2_trans_glops = { | 
