Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a0079d9 authored by Robert Peterson's avatar Robert Peterson Committed by Steven Whitehouse
Browse files

[GFS2] bz 236008: Kernel gpf doing cat /debugfs/gfs2/xxx (lock dump)



This is for Bugzilla Bug 236008: Kernel gpf doing cat /debugfs/gfs2/xxx
(lock dump) seen at the "gfs2 summit".  This also fixes the bug that caused
garbage to be printed by the "initialized at" field.  I apologize for the
kludge, but that code will all be ripped out anyway when the official
sprint_symbol function becomes available in the Linux kernel.  I also
changed some formatting so that spaces are replaced by proper tabs.

Signed-off-by: default avatarRobert Peterson <rpeterso@redhat.com>
Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent 8fa1de38
Loading
Loading
Loading
Loading
+21 −8
Original line number Diff line number Diff line
@@ -1770,8 +1770,13 @@ static void gfs2_print_symbol(struct glock_iter *gi, const char *fmt,
	sprint_symbol(buffer, address);
	print_dbg(gi, fmt, buffer);
*/
        if (gi)
                print_dbg(gi, fmt, address);
	char buffer[256];

	if (gi) {
		memset(buffer, 0, sizeof(buffer));
		sprintf(buffer, "%p", address);
		print_dbg(gi, fmt, buffer);
	}
	else
		print_symbol(fmt, address);
}
@@ -1993,14 +1998,19 @@ int __init gfs2_glock_init(void)

static int gfs2_glock_iter_next(struct glock_iter *gi)
{
	read_lock(gl_lock_addr(gi->hash));
	while (1) {
		if (!gi->hb_list) {  /* If we don't have a hash bucket yet */
			gi->hb_list = &gl_hash_table[gi->hash].hb_list;
			if (hlist_empty(gi->hb_list)) {
				read_unlock(gl_lock_addr(gi->hash));
				gi->hash++;
				read_lock(gl_lock_addr(gi->hash));
				gi->hb_list = NULL;
				if (gi->hash >= GFS2_GL_HASH_SIZE)
				if (gi->hash >= GFS2_GL_HASH_SIZE) {
					read_unlock(gl_lock_addr(gi->hash));
					return 1;
				}
				else
					continue;
			}
@@ -2011,7 +2021,9 @@ static int gfs2_glock_iter_next(struct glock_iter *gi)
			}
		} else {
			if (gi->gl->gl_list.next == NULL) {
				read_unlock(gl_lock_addr(gi->hash));
				gi->hash++;
				read_lock(gl_lock_addr(gi->hash));
				gi->hb_list = NULL;
				continue;
			}
@@ -2021,6 +2033,7 @@ static int gfs2_glock_iter_next(struct glock_iter *gi)
		if (gi->gl)
			break;
	}
	read_unlock(gl_lock_addr(gi->hash));
	return 0;
}