|
@@ -87,7 +87,7 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl)
|
|
|
|
|
|
static void rgrp_go_sync(struct gfs2_glock *gl)
|
|
static void rgrp_go_sync(struct gfs2_glock *gl)
|
|
{
|
|
{
|
|
- struct address_space *metamapping = gl->gl_aspace->i_mapping;
|
|
|
|
|
|
+ struct address_space *metamapping = gfs2_glock2aspace(gl);
|
|
int error;
|
|
int error;
|
|
|
|
|
|
if (!test_and_clear_bit(GLF_DIRTY, &gl->gl_flags))
|
|
if (!test_and_clear_bit(GLF_DIRTY, &gl->gl_flags))
|
|
@@ -113,7 +113,7 @@ static void rgrp_go_sync(struct gfs2_glock *gl)
|
|
|
|
|
|
static void rgrp_go_inval(struct gfs2_glock *gl, int flags)
|
|
static void rgrp_go_inval(struct gfs2_glock *gl, int flags)
|
|
{
|
|
{
|
|
- struct address_space *mapping = gl->gl_aspace->i_mapping;
|
|
|
|
|
|
+ struct address_space *mapping = gfs2_glock2aspace(gl);
|
|
|
|
|
|
BUG_ON(!(flags & DIO_METADATA));
|
|
BUG_ON(!(flags & DIO_METADATA));
|
|
gfs2_assert_withdraw(gl->gl_sbd, !atomic_read(&gl->gl_ail_count));
|
|
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)
|
|
static void inode_go_sync(struct gfs2_glock *gl)
|
|
static void inode_go_sync(struct gfs2_glock *gl)
|
|
{
|
|
{
|
|
struct gfs2_inode *ip = gl->gl_object;
|
|
struct gfs2_inode *ip = gl->gl_object;
|
|
- struct address_space *metamapping = gl->gl_aspace->i_mapping;
|
|
|
|
|
|
+ struct address_space *metamapping = gfs2_glock2aspace(gl);
|
|
int error;
|
|
int error;
|
|
|
|
|
|
if (ip && !S_ISREG(ip->i_inode.i_mode))
|
|
if (ip && !S_ISREG(ip->i_inode.i_mode))
|
|
@@ -183,7 +183,7 @@ static void inode_go_inval(struct gfs2_glock *gl, int flags)
|
|
gfs2_assert_withdraw(gl->gl_sbd, !atomic_read(&gl->gl_ail_count));
|
|
gfs2_assert_withdraw(gl->gl_sbd, !atomic_read(&gl->gl_ail_count));
|
|
|
|
|
|
if (flags & DIO_METADATA) {
|
|
if (flags & DIO_METADATA) {
|
|
- struct address_space *mapping = gl->gl_aspace->i_mapping;
|
|
|
|
|
|
+ struct address_space *mapping = gfs2_glock2aspace(gl);
|
|
truncate_inode_pages(mapping, 0);
|
|
truncate_inode_pages(mapping, 0);
|
|
if (ip) {
|
|
if (ip) {
|
|
set_bit(GIF_INVALID, &ip->i_flags);
|
|
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)
|
|
|
|
|
|
static int rgrp_go_demote_ok(const struct gfs2_glock *gl)
|
|
static int rgrp_go_demote_ok(const struct gfs2_glock *gl)
|
|
{
|
|
{
|
|
- return !gl->gl_aspace->i_mapping->nrpages;
|
|
|
|
|
|
+ const struct address_space *mapping = (const struct address_space *)(gl + 1);
|
|
|
|
+ return !mapping->nrpages;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -387,8 +388,7 @@ static void iopen_go_callback(struct gfs2_glock *gl)
|
|
struct gfs2_inode *ip = (struct gfs2_inode *)gl->gl_object;
|
|
struct gfs2_inode *ip = (struct gfs2_inode *)gl->gl_object;
|
|
|
|
|
|
if (gl->gl_demote_state == LM_ST_UNLOCKED &&
|
|
if (gl->gl_demote_state == LM_ST_UNLOCKED &&
|
|
- gl->gl_state == LM_ST_SHARED &&
|
|
|
|
- ip && test_bit(GIF_USER, &ip->i_flags)) {
|
|
|
|
|
|
+ gl->gl_state == LM_ST_SHARED && ip) {
|
|
gfs2_glock_hold(gl);
|
|
gfs2_glock_hold(gl);
|
|
if (queue_work(gfs2_delete_workqueue, &gl->gl_delete) == 0)
|
|
if (queue_work(gfs2_delete_workqueue, &gl->gl_delete) == 0)
|
|
gfs2_glock_put_nolock(gl);
|
|
gfs2_glock_put_nolock(gl);
|
|
@@ -407,6 +407,7 @@ const struct gfs2_glock_operations gfs2_inode_glops = {
|
|
.go_dump = inode_go_dump,
|
|
.go_dump = inode_go_dump,
|
|
.go_type = LM_TYPE_INODE,
|
|
.go_type = LM_TYPE_INODE,
|
|
.go_min_hold_time = HZ / 5,
|
|
.go_min_hold_time = HZ / 5,
|
|
|
|
+ .go_flags = GLOF_ASPACE,
|
|
};
|
|
};
|
|
|
|
|
|
const struct gfs2_glock_operations gfs2_rgrp_glops = {
|
|
const struct gfs2_glock_operations gfs2_rgrp_glops = {
|
|
@@ -418,6 +419,7 @@ const struct gfs2_glock_operations gfs2_rgrp_glops = {
|
|
.go_dump = gfs2_rgrp_dump,
|
|
.go_dump = gfs2_rgrp_dump,
|
|
.go_type = LM_TYPE_RGRP,
|
|
.go_type = LM_TYPE_RGRP,
|
|
.go_min_hold_time = HZ / 5,
|
|
.go_min_hold_time = HZ / 5,
|
|
|
|
+ .go_flags = GLOF_ASPACE,
|
|
};
|
|
};
|
|
|
|
|
|
const struct gfs2_glock_operations gfs2_trans_glops = {
|
|
const struct gfs2_glock_operations gfs2_trans_glops = {
|