lkml.org 
[lkml]   [2007]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[GFS2] bz 236008: Kernel gpf doing cat /debugfs/gfs2/xxx (lock dump) [24/34]
    From
    Date
    >From 7a0079d9e3fe8826475a08785f3d348c4b509774 Mon Sep 17 00:00:00 2001
    From: Robert Peterson <rpeterso@redhat.com>
    Date: Tue, 17 Apr 2007 11:37:11 -0500
    Subject: [PATCH] [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: Robert Peterson <rpeterso@redhat.com>
    Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>

    diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
    index d2e3094..b075f93 100644
    --- a/fs/gfs2/glock.c
    +++ b/fs/gfs2/glock.c
    @@ -1765,15 +1765,20 @@ static void gfs2_print_symbol(struct glock_iter *gi, const char *fmt,
    {
    /* when sprint_symbol becomes available in the new kernel, replace this */
    /* function with:
    - char buffer[KSYM_SYMBOL_LEN];
    + char buffer[KSYM_SYMBOL_LEN];

    - sprint_symbol(buffer, address);
    - print_dbg(gi, fmt, buffer);
    + sprint_symbol(buffer, address);
    + print_dbg(gi, fmt, buffer);
    */
    - if (gi)
    - print_dbg(gi, fmt, address);
    - else
    - print_symbol(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;
    }

    --
    1.5.1.2


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-05-01 12:25    [W:4.274 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site