diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-25 18:41:56 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-09-25 18:41:56 -0400 |
commit | 17763641ff8a189bc6fb1fcd5c2a9844ee0dd89c (patch) | |
tree | 097b1d8d1d28abf547a7b7182b20e059f89a3f76 | |
parent | cf0346161ccd3642defedeb4850a6c33406e56d6 (diff) | |
parent | 10201655b085df8e000822e496e5d4016a167a36 (diff) |
Merge tag 'gfs2-for-linus-4.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2
Pull gfs2 fix from Bob Peterson:
"GFS2: Fix an old regression in GFS2's debugfs interface
This fixes a regression introduced by commit 88ffbf3e037e ("GFS2: Use
resizable hash table for glocks"). The regression caused the glock dump
in debugfs to not report all the glocks, which makes debugging
extremely difficult"
* tag 'gfs2-for-linus-4.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2:
gfs2: Fix debugfs glocks dump
-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) | |||
1945 | { | 1945 | { |
1946 | struct gfs2_glock_iter *gi = seq->private; | 1946 | struct gfs2_glock_iter *gi = seq->private; |
1947 | loff_t n = *pos; | 1947 | loff_t n = *pos; |
1948 | int ret; | ||
1949 | |||
1950 | if (gi->last_pos <= *pos) | ||
1951 | n = (*pos - gi->last_pos); | ||
1952 | 1948 | ||
1953 | ret = rhashtable_walk_start(&gi->hti); | 1949 | rhashtable_walk_enter(&gl_hash_table, &gi->hti); |
1954 | if (ret) | 1950 | if (rhashtable_walk_start(&gi->hti) != 0) |
1955 | return NULL; | 1951 | return NULL; |
1956 | 1952 | ||
1957 | do { | 1953 | do { |
@@ -1959,6 +1955,7 @@ static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos) | |||
1959 | } while (gi->gl && n--); | 1955 | } while (gi->gl && n--); |
1960 | 1956 | ||
1961 | gi->last_pos = *pos; | 1957 | gi->last_pos = *pos; |
1958 | |||
1962 | return gi->gl; | 1959 | return gi->gl; |
1963 | } | 1960 | } |
1964 | 1961 | ||
@@ -1970,6 +1967,7 @@ static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr, | |||
1970 | (*pos)++; | 1967 | (*pos)++; |
1971 | gi->last_pos = *pos; | 1968 | gi->last_pos = *pos; |
1972 | gfs2_glock_iter_next(gi); | 1969 | gfs2_glock_iter_next(gi); |
1970 | |||
1973 | return gi->gl; | 1971 | return gi->gl; |
1974 | } | 1972 | } |
1975 | 1973 | ||
@@ -1980,6 +1978,7 @@ static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr) | |||
1980 | 1978 | ||
1981 | gi->gl = NULL; | 1979 | gi->gl = NULL; |
1982 | rhashtable_walk_stop(&gi->hti); | 1980 | rhashtable_walk_stop(&gi->hti); |
1981 | rhashtable_walk_exit(&gi->hti); | ||
1983 | } | 1982 | } |
1984 | 1983 | ||
1985 | static int gfs2_glock_seq_show(struct seq_file *seq, void *iter_ptr) | 1984 | 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, | |||
2042 | struct gfs2_glock_iter *gi = seq->private; | 2041 | struct gfs2_glock_iter *gi = seq->private; |
2043 | 2042 | ||
2044 | gi->sdp = inode->i_private; | 2043 | gi->sdp = inode->i_private; |
2045 | gi->last_pos = 0; | ||
2046 | seq->buf = kmalloc(GFS2_SEQ_GOODSIZE, GFP_KERNEL | __GFP_NOWARN); | 2044 | seq->buf = kmalloc(GFS2_SEQ_GOODSIZE, GFP_KERNEL | __GFP_NOWARN); |
2047 | if (seq->buf) | 2045 | if (seq->buf) |
2048 | seq->size = GFS2_SEQ_GOODSIZE; | 2046 | seq->size = GFS2_SEQ_GOODSIZE; |
2049 | gi->gl = NULL; | 2047 | gi->gl = NULL; |
2050 | rhashtable_walk_enter(&gl_hash_table, &gi->hti); | ||
2051 | } | 2048 | } |
2052 | return ret; | 2049 | return ret; |
2053 | } | 2050 | } |
@@ -2063,7 +2060,6 @@ static int gfs2_glocks_release(struct inode *inode, struct file *file) | |||
2063 | struct gfs2_glock_iter *gi = seq->private; | 2060 | struct gfs2_glock_iter *gi = seq->private; |
2064 | 2061 | ||
2065 | gi->gl = NULL; | 2062 | gi->gl = NULL; |
2066 | rhashtable_walk_exit(&gi->hti); | ||
2067 | return seq_release_private(inode, file); | 2063 | return seq_release_private(inode, file); |
2068 | } | 2064 | } |
2069 | 2065 | ||