summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2006-08-30 16:50:28 (GMT)
committerSteven Whitehouse <swhiteho@redhat.com>2006-08-30 16:50:28 (GMT)
commit899be4d3b7e00bf364d84c1c8cfe8bbbd1e3507b (patch)
treefd3af3ebb3c237a4c309c3f48902f9550864c39e /fs
parentd6a53727683bbf993c01ab49b45e0eac17e23df1 (diff)
downloadlinux-899be4d3b7e00bf364d84c1c8cfe8bbbd1e3507b.tar.xz
[GFS2] Add superblock into key for glock lookups
This adds the superblock as a key for glock lookups. Since the glocks are already stored in a per-superblock table, this has no effect at the moment. Later on this will change though. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/gfs2/glock.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index 679cb83..b8ccb27 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -200,6 +200,7 @@ static inline int queue_empty(struct gfs2_glock *gl, struct list_head *head)
*/
static struct gfs2_glock *search_bucket(struct gfs2_gl_hash_bucket *bucket,
+ const struct gfs2_sbd *sdp,
const struct lm_lockname *name)
{
struct gfs2_glock *gl;
@@ -209,6 +210,8 @@ static struct gfs2_glock *search_bucket(struct gfs2_gl_hash_bucket *bucket,
continue;
if (!lm_name_equal(&gl->gl_name, name))
continue;
+ if (gl->gl_sbd != sdp)
+ continue;
kref_get(&gl->gl_ref);
@@ -233,7 +236,7 @@ static struct gfs2_glock *gfs2_glock_find(struct gfs2_sbd *sdp,
struct gfs2_glock *gl;
read_lock(&bucket->hb_lock);
- gl = search_bucket(bucket, name);
+ gl = search_bucket(bucket, sdp, name);
read_unlock(&bucket->hb_lock);
return gl;
@@ -266,7 +269,7 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, uint64_t number,
bucket = &sdp->sd_gl_hash[gl_hash(&name)];
read_lock(&bucket->hb_lock);
- gl = search_bucket(bucket, &name);
+ gl = search_bucket(bucket, sdp, &name);
read_unlock(&bucket->hb_lock);
if (gl || !create) {
@@ -311,7 +314,7 @@ int gfs2_glock_get(struct gfs2_sbd *sdp, uint64_t number,
goto fail_aspace;
write_lock(&bucket->hb_lock);
- tmp = search_bucket(bucket, &name);
+ tmp = search_bucket(bucket, sdp, &name);
if (tmp) {
write_unlock(&bucket->hb_lock);
glock_free(gl);