Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 316739
b: refs/heads/master
c: ba1ddcb
h: refs/heads/master
i:
  316737: 4d3ebe9
  316735: 3c3867f
v: v3
  • Loading branch information
Steven Whitehouse committed Jun 8, 2012
1 parent 7d3b51f commit de0df90
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 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: df5d2f5560a9c33129391a136ed9f0ac26abe69b
refs/heads/master: ba1ddcb6ca0c46edd275790d1e4e2cfd6219ce19
29 changes: 22 additions & 7 deletions trunk/fs/gfs2/glock.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,12 @@
#include "trace_gfs2.h"

struct gfs2_glock_iter {
int hash; /* hash bucket index */
struct gfs2_sbd *sdp; /* incore superblock */
struct gfs2_glock *gl; /* current glock struct */
char string[512]; /* scratch space */
int hash; /* hash bucket index */
unsigned nhash; /* Index within current bucket */
struct gfs2_sbd *sdp; /* incore superblock */
struct gfs2_glock *gl; /* current glock struct */
loff_t last_pos; /* last position */
char string[512]; /* scratch space */
};

typedef void (*glock_examiner) (struct gfs2_glock * gl);
Expand Down Expand Up @@ -950,7 +952,7 @@ void gfs2_print_dbg(struct seq_file *seq, const char *fmt, ...)
if (seq) {
struct gfs2_glock_iter *gi = seq->private;
vsprintf(gi->string, fmt, args);
seq_printf(seq, gi->string);
seq_puts(seq, gi->string);
} else {
vaf.fmt = fmt;
vaf.va = &args;
Expand Down Expand Up @@ -1854,8 +1856,14 @@ static int gfs2_glock_iter_next(struct gfs2_glock_iter *gi)
gl = gi->gl;
if (gl) {
gi->gl = glock_hash_next(gl);
gi->nhash++;
} else {
if (gi->hash >= GFS2_GL_HASH_SIZE) {
rcu_read_unlock();
return 1;
}
gi->gl = glock_hash_chain(gi->hash);
gi->nhash = 0;
}
while (gi->gl == NULL) {
gi->hash++;
Expand All @@ -1864,6 +1872,7 @@ static int gfs2_glock_iter_next(struct gfs2_glock_iter *gi)
return 1;
}
gi->gl = glock_hash_chain(gi->hash);
gi->nhash = 0;
}
/* Skip entries for other sb and dead entries */
} while (gi->sdp != gi->gl->gl_sbd || atomic_read(&gi->gl->gl_ref) == 0);
Expand All @@ -1876,14 +1885,20 @@ static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos)
struct gfs2_glock_iter *gi = seq->private;
loff_t n = *pos;

gi->hash = 0;
if (gi->last_pos <= *pos)
n = gi->nhash + (*pos - gi->last_pos);
else
gi->hash = 0;

gi->nhash = 0;
rcu_read_lock();

do {
if (gfs2_glock_iter_next(gi))
return NULL;
} while (n--);

gi->last_pos = *pos;
return gi->gl;
}

Expand All @@ -1893,7 +1908,7 @@ static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr,
struct gfs2_glock_iter *gi = seq->private;

(*pos)++;

gi->last_pos = *pos;
if (gfs2_glock_iter_next(gi))
return NULL;

Expand Down

0 comments on commit de0df90

Please sign in to comment.