/*
* Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
- * Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
*
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
#include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <linux/kallsyms.h>
-#include <asm/semaphore.h>
#include "gfs2.h"
#include "lm_interface.h"
tr->tr_revokes = revokes;
tr->tr_reserved = 1;
if (blocks)
- tr->tr_reserved += 1 + blocks;
+ tr->tr_reserved += 6 + blocks;
if (revokes)
tr->tr_reserved += gfs2_struct2blk(sdp, revokes,
sizeof(uint64_t));
INIT_LIST_HEAD(&tr->tr_list_buf);
- gfs2_holder_init(sdp->sd_trans_gl, LM_ST_SHARED,
- GL_NEVER_RECURSE, &tr->tr_t_gh);
+ gfs2_holder_init(sdp->sd_trans_gl, LM_ST_SHARED, 0, &tr->tr_t_gh);
error = gfs2_glock_nq(&tr->tr_t_gh);
if (error)
void gfs2_trans_end(struct gfs2_sbd *sdp)
{
- struct gfs2_trans *tr;
+ struct gfs2_trans *tr = current->journal_info;
- tr = current->journal_info;
+ BUG_ON(!tr);
current->journal_info = NULL;
- if (gfs2_assert_warn(sdp, tr))
- return;
-
if (!tr->tr_touched) {
gfs2_log_release(sdp, tr->tr_reserved);
-
gfs2_glock_dq(&tr->tr_t_gh);
gfs2_holder_uninit(&tr->tr_t_gh);
-
kfree(tr);
return;
}
}
gfs2_log_commit(sdp, tr);
-
gfs2_glock_dq(&tr->tr_t_gh);
gfs2_holder_uninit(&tr->tr_t_gh);
-
kfree(tr);
if (sdp->sd_vfs->s_flags & MS_SYNCHRONOUS)
- gfs2_log_flush(sdp);
+ gfs2_log_flush(sdp, NULL);
}
void gfs2_trans_add_gl(struct gfs2_glock *gl)