Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 38851
b: refs/heads/master
c: b639789
h: refs/heads/master
i:
  38849: 6ba41cf
  38847: 96bcc28
v: v3
  • Loading branch information
Steven Whitehouse committed Sep 12, 2006
1 parent 2d629f6 commit 4d1cb26
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 15 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: 24264434603cc102d71fb2a1b3b7e282a781f449
refs/heads/master: b6397893a5ed81970e803d61ee2f1a0e79f87438
28 changes: 16 additions & 12 deletions trunk/fs/gfs2/glock.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ struct greedy {
};

struct gfs2_gl_hash_bucket {
struct list_head hb_list;
struct hlist_head hb_list;
};

typedef void (*glock_examiner) (struct gfs2_glock * gl);
Expand All @@ -49,7 +49,7 @@ static int gfs2_dump_lockstate(struct gfs2_sbd *sdp);
static int dump_glock(struct gfs2_glock *gl);
static int dump_inode(struct gfs2_inode *ip);

#define GFS2_GL_HASH_SHIFT 13
#define GFS2_GL_HASH_SHIFT 15
#define GFS2_GL_HASH_SIZE (1 << GFS2_GL_HASH_SHIFT)
#define GFS2_GL_HASH_MASK (GFS2_GL_HASH_SIZE - 1)

Expand Down Expand Up @@ -210,7 +210,7 @@ int gfs2_glock_put(struct gfs2_glock *gl)

write_lock(gl_lock_addr(gl->gl_hash));
if (kref_put(&gl->gl_ref, kill_glock)) {
list_del_init(&gl->gl_list);
hlist_del(&gl->gl_list);
write_unlock(gl_lock_addr(gl->gl_hash));
BUG_ON(spin_is_locked(&gl->gl_spin));
glock_free(gl);
Expand Down Expand Up @@ -259,8 +259,9 @@ static struct gfs2_glock *search_bucket(unsigned int hash,
const struct lm_lockname *name)
{
struct gfs2_glock *gl;
struct hlist_node *h;

list_for_each_entry(gl, &gl_hash_table[hash].hb_list, gl_list) {
hlist_for_each_entry(gl, h, &gl_hash_table[hash].hb_list, gl_list) {
if (!lm_name_equal(&gl->gl_name, name))
continue;
if (gl->gl_sbd != sdp)
Expand Down Expand Up @@ -368,7 +369,7 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
glock_free(gl);
gl = tmp;
} else {
list_add_tail(&gl->gl_list, &gl_hash_table[hash].hb_list);
hlist_add_head(&gl->gl_list, &gl_hash_table[hash].hb_list);
write_unlock(gl_lock_addr(hash));
}

Expand Down Expand Up @@ -1895,15 +1896,15 @@ static int examine_bucket(glock_examiner examiner, struct gfs2_sbd *sdp,
{
struct gfs2_glock *gl, *prev = NULL;
int has_entries = 0;
struct list_head *head = &gl_hash_table[hash].hb_list;
struct hlist_head *head = &gl_hash_table[hash].hb_list;

read_lock(gl_lock_addr(hash));
/* Can't use list_for_each_entry - don't want prefetch here */
if (list_empty(head))
/* Can't use hlist_for_each_entry - don't want prefetch here */
if (hlist_empty(head))
goto out;
has_entries = 1;
gl = list_entry(head->next, struct gfs2_glock, gl_list);
while(&gl->gl_list != head) {
gl = list_entry(head->first, struct gfs2_glock, gl_list);
while(1) {
if (gl->gl_sbd == sdp) {
gfs2_glock_hold(gl);
read_unlock(gl_lock_addr(hash));
Expand All @@ -1913,6 +1914,8 @@ static int examine_bucket(glock_examiner examiner, struct gfs2_sbd *sdp,
examiner(gl);
read_lock(gl_lock_addr(hash));
}
if (gl->gl_list.next == NULL)
break;
gl = list_entry(gl->gl_list.next, struct gfs2_glock, gl_list);
}
out:
Expand Down Expand Up @@ -2195,14 +2198,15 @@ static int dump_glock(struct gfs2_glock *gl)
static int gfs2_dump_lockstate(struct gfs2_sbd *sdp)
{
struct gfs2_glock *gl;
struct hlist_node *h;
unsigned int x;
int error = 0;

for (x = 0; x < GFS2_GL_HASH_SIZE; x++) {

read_lock(gl_lock_addr(x));

list_for_each_entry(gl, &gl_hash_table[x].hb_list, gl_list) {
hlist_for_each_entry(gl, h, &gl_hash_table[x].hb_list, gl_list) {
if (gl->gl_sbd != sdp)
continue;

Expand All @@ -2225,7 +2229,7 @@ int __init gfs2_glock_init(void)
{
unsigned i;
for(i = 0; i < GFS2_GL_HASH_SIZE; i++) {
INIT_LIST_HEAD(&gl_hash_table[i].hb_list);
INIT_HLIST_HEAD(&gl_hash_table[i].hb_list);
}
#ifdef GL_HASH_LOCK_SZ
for(i = 0; i < GL_HASH_LOCK_SZ; i++) {
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/gfs2/incore.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ enum {
};

struct gfs2_glock {
struct list_head gl_list;
struct hlist_node gl_list;
unsigned long gl_flags; /* GLF_... */
struct lm_lockname gl_name;
struct kref gl_ref;
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/gfs2/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ static void gfs2_init_glock_once(void *foo, kmem_cache_t *cachep, unsigned long
struct gfs2_glock *gl = foo;
if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
SLAB_CTOR_CONSTRUCTOR) {
INIT_LIST_HEAD(&gl->gl_list);
INIT_HLIST_NODE(&gl->gl_list);
spin_lock_init(&gl->gl_spin);
INIT_LIST_HEAD(&gl->gl_holders);
INIT_LIST_HEAD(&gl->gl_waiters1);
Expand Down

0 comments on commit 4d1cb26

Please sign in to comment.