Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 38640
b: refs/heads/master
c: d0dc80d
h: refs/heads/master
v: v3
  • Loading branch information
Steven Whitehouse committed Mar 29, 2006
1 parent 75ef684 commit 6163677
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 54 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 484adff8a06cb5d952832f5487ae863f54c0fb69
refs/heads/master: d0dc80dbafb5c10ad2084831a61bbf945484a139
34 changes: 9 additions & 25 deletions trunk/fs/gfs2/glock.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <linux/sort.h>
#include <linux/jhash.h>
#include <linux/kref.h>
#include <linux/kallsyms.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h>
#include <asm/uaccess.h>
Expand Down Expand Up @@ -357,6 +358,7 @@ void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, int flags,
{
INIT_LIST_HEAD(&gh->gh_list);
gh->gh_gl = gl;
gh->gh_ip = (unsigned long)__builtin_return_address(0);
gh->gh_owner = (flags & GL_NEVER_RECURSE) ? NULL : current;
gh->gh_state = state;
gh->gh_flags = flags;
Expand Down Expand Up @@ -388,6 +390,7 @@ void gfs2_holder_reinit(unsigned int state, int flags, struct gfs2_holder *gh)
gh->gh_flags |= GL_LOCAL_EXCL;

gh->gh_iflags &= 1 << HIF_ALLOCED;
gh->gh_ip = (unsigned long)__builtin_return_address(0);
}

/**
Expand All @@ -400,6 +403,7 @@ void gfs2_holder_uninit(struct gfs2_holder *gh)
{
gfs2_glock_put(gh->gh_gl);
gh->gh_gl = NULL;
gh->gh_ip = 0;
}

/**
Expand Down Expand Up @@ -427,7 +431,7 @@ struct gfs2_holder *gfs2_holder_get(struct gfs2_glock *gl, unsigned int state,

gfs2_holder_init(gl, state, flags, gh);
set_bit(HIF_ALLOCED, &gh->gh_iflags);

gh->gh_ip = (unsigned long)__builtin_return_address(0);
return gh;
}

Expand Down Expand Up @@ -1238,6 +1242,9 @@ static int recurse_check(struct gfs2_holder *existing, struct gfs2_holder *new,
return 0;

fail:
print_symbol(KERN_WARNING "GFS2: Existing holder from %s\n",
existing->gh_ip);
print_symbol(KERN_WARNING "GFS2: New holder from %s\n", new->gh_ip);
set_bit(HIF_ABORTED, &new->gh_iflags);
return -EINVAL;
}
Expand Down Expand Up @@ -1543,30 +1550,6 @@ int gfs2_glock_be_greedy(struct gfs2_glock *gl, unsigned int time)
return 0;
}

/**
* gfs2_glock_nq_init - intialize a holder and enqueue it on a glock
* @gl: the glock
* @state: the state we're requesting
* @flags: the modifier flags
* @gh: the holder structure
*
* Returns: 0, GLR_*, or errno
*/

int gfs2_glock_nq_init(struct gfs2_glock *gl, unsigned int state, int flags,
struct gfs2_holder *gh)
{
int error;

gfs2_holder_init(gl, state, flags, gh);

error = gfs2_glock_nq(gh);
if (error)
gfs2_holder_uninit(gh);

return error;
}

/**
* gfs2_glock_dq_uninit - dequeue a holder from a glock and initialize it
* @gh: the holder structure
Expand Down Expand Up @@ -2334,6 +2317,7 @@ static int dump_holder(char *str, struct gfs2_holder *gh)
if (test_bit(x, &gh->gh_iflags))
printk(" %u", x);
printk(" \n");
print_symbol(KERN_INFO " initialized at: %s\n", gh->gh_ip);

error = 0;

Expand Down
27 changes: 25 additions & 2 deletions trunk/fs/gfs2/glock.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,6 @@ void gfs2_glock_force_drop(struct gfs2_glock *gl);

int gfs2_glock_be_greedy(struct gfs2_glock *gl, unsigned int time);

int gfs2_glock_nq_init(struct gfs2_glock *gl, unsigned int state, int flags,
struct gfs2_holder *gh);
void gfs2_glock_dq_uninit(struct gfs2_holder *gh);
int gfs2_glock_nq_num(struct gfs2_sbd *sdp,
uint64_t number, struct gfs2_glock_operations *glops,
Expand All @@ -121,6 +119,31 @@ void gfs2_glock_prefetch_num(struct gfs2_sbd *sdp, uint64_t number,
struct gfs2_glock_operations *glops,
unsigned int state, int flags);

/**
* gfs2_glock_nq_init - intialize a holder and enqueue it on a glock
* @gl: the glock
* @state: the state we're requesting
* @flags: the modifier flags
* @gh: the holder structure
*
* Returns: 0, GLR_*, or errno
*/

static inline int gfs2_glock_nq_init(struct gfs2_glock *gl,
unsigned int state, int flags,
struct gfs2_holder *gh)
{
int error;

gfs2_holder_init(gl, state, flags, gh);

error = gfs2_glock_nq(gh);
if (error)
gfs2_holder_uninit(gh);

return error;
}

/* Lock Value Block functions */

int gfs2_lvb_hold(struct gfs2_glock *gl);
Expand Down
4 changes: 2 additions & 2 deletions trunk/fs/gfs2/incore.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ struct gfs2_holder {
int gh_error;
unsigned long gh_iflags;
struct completion gh_wait;
unsigned long gh_ip;
};

enum {
Expand Down Expand Up @@ -353,8 +354,7 @@ struct gfs2_log_buf {
};

struct gfs2_trans {
char *tr_file;
unsigned int tr_line;
unsigned long tr_ip;

unsigned int tr_blocks;
unsigned int tr_revokes;
Expand Down
32 changes: 14 additions & 18 deletions trunk/fs/gfs2/trans.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <linux/completion.h>
#include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <linux/kallsyms.h>
#include <asm/semaphore.h>

#include "gfs2.h"
Expand All @@ -25,24 +26,20 @@
#include "trans.h"
#include "util.h"

int gfs2_trans_begin_i(struct gfs2_sbd *sdp, unsigned int blocks,
unsigned int revokes, char *file, unsigned int line)
int gfs2_trans_begin(struct gfs2_sbd *sdp, unsigned int blocks,
unsigned int revokes)
{
struct gfs2_trans *tr;
int error;

if (gfs2_assert_warn(sdp, !current->journal_info) ||
gfs2_assert_warn(sdp, blocks || revokes)) {
fs_warn(sdp, "(%s, %u)\n", file, line);
return -EINVAL;
}
BUG_ON(current->journal_info);
BUG_ON(blocks == 0 && revokes == 0);

tr = kzalloc(sizeof(struct gfs2_trans), GFP_NOFS);
if (!tr)
return -ENOMEM;

tr->tr_file = file;
tr->tr_line = line;
tr->tr_ip = (unsigned long)__builtin_return_address(0);
tr->tr_blocks = blocks;
tr->tr_revokes = revokes;
tr->tr_reserved = 1;
Expand Down Expand Up @@ -104,16 +101,15 @@ void gfs2_trans_end(struct gfs2_sbd *sdp)
return;
}

if (gfs2_assert_withdraw(sdp, tr->tr_num_buf <= tr->tr_blocks))
fs_err(sdp, "tr_num_buf = %u, tr_blocks = %u "
"tr_file = %s, tr_line = %u\n",
tr->tr_num_buf, tr->tr_blocks,
tr->tr_file, tr->tr_line);
if (gfs2_assert_withdraw(sdp, tr->tr_num_buf <= tr->tr_blocks)) {
fs_err(sdp, "tr_num_buf = %u, tr_blocks = %u ",
tr->tr_num_buf, tr->tr_blocks);
print_symbol(KERN_WARNING "GFS2: Transaction created at: %s\n", tr->tr_ip);
}
if (gfs2_assert_withdraw(sdp, tr->tr_num_revoke <= tr->tr_revokes))
fs_err(sdp, "tr_num_revoke = %u, tr_revokes = %u "
"tr_file = %s, tr_line = %u\n",
tr->tr_num_revoke, tr->tr_revokes,
tr->tr_file, tr->tr_line);
fs_err(sdp, "tr_num_revoke = %u, tr_revokes = %u ",
tr->tr_num_revoke, tr->tr_revokes);
print_symbol(KERN_WARNING "GFS2: Transaction created at: %s\n", tr->tr_ip);

gfs2_log_commit(sdp, tr);

Expand Down
8 changes: 2 additions & 6 deletions trunk/fs/gfs2/trans.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,8 @@
#define RES_STATFS 1
#define RES_QUOTA 2

#define gfs2_trans_begin(sdp, blocks, revokes) \
gfs2_trans_begin_i((sdp), (blocks), (revokes), __FILE__, __LINE__)

int gfs2_trans_begin_i(struct gfs2_sbd *sdp,
unsigned int blocks, unsigned int revokes,
char *file, unsigned int line);
int gfs2_trans_begin(struct gfs2_sbd *sdp,
unsigned int blocks, unsigned int revokes);

void gfs2_trans_end(struct gfs2_sbd *sdp);

Expand Down

0 comments on commit 6163677

Please sign in to comment.