diff options
Diffstat (limited to 'fs/gfs2/glock.c')
| -rw-r--r-- | fs/gfs2/glock.c | 14 | 
1 files changed, 5 insertions, 9 deletions
| diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 98e845b7841b..11066d8647d2 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -1945,13 +1945,9 @@ static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos)  {  	struct gfs2_glock_iter *gi = seq->private;  	loff_t n = *pos; -	int ret; - -	if (gi->last_pos <= *pos) -		n = (*pos - gi->last_pos); -	ret = rhashtable_walk_start(&gi->hti); -	if (ret) +	rhashtable_walk_enter(&gl_hash_table, &gi->hti); +	if (rhashtable_walk_start(&gi->hti) != 0)  		return NULL;  	do { @@ -1959,6 +1955,7 @@ static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos)  	} while (gi->gl && n--);  	gi->last_pos = *pos; +  	return gi->gl;  } @@ -1970,6 +1967,7 @@ static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr,  	(*pos)++;  	gi->last_pos = *pos;  	gfs2_glock_iter_next(gi); +  	return gi->gl;  } @@ -1980,6 +1978,7 @@ static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr)  	gi->gl = NULL;  	rhashtable_walk_stop(&gi->hti); +	rhashtable_walk_exit(&gi->hti);  }  static int gfs2_glock_seq_show(struct seq_file *seq, void *iter_ptr) @@ -2042,12 +2041,10 @@ static int __gfs2_glocks_open(struct inode *inode, struct file *file,  		struct gfs2_glock_iter *gi = seq->private;  		gi->sdp = inode->i_private; -		gi->last_pos = 0;  		seq->buf = kmalloc(GFS2_SEQ_GOODSIZE, GFP_KERNEL | __GFP_NOWARN);  		if (seq->buf)  			seq->size = GFS2_SEQ_GOODSIZE;  		gi->gl = NULL; -		rhashtable_walk_enter(&gl_hash_table, &gi->hti);  	}  	return ret;  } @@ -2063,7 +2060,6 @@ static int gfs2_glocks_release(struct inode *inode, struct file *file)  	struct gfs2_glock_iter *gi = seq->private;  	gi->gl = NULL; -	rhashtable_walk_exit(&gi->hti);  	return seq_release_private(inode, file);  } |