xfs
[Top] [All Lists]

Re: Oops with 2.4.16

To: Eric Sandeen <sandeen@xxxxxxx>
Subject: Re: Oops with 2.4.16
From: Pascal Haakmat <a.haakmat@xxxxxxxxx>
Date: Thu, 10 Jan 2002 22:57:11 +0100
Cc: linux-xfs@xxxxxxxxxxx
In-reply-to: <1010697908.2812.22.camel@stout.americas.sgi.com>; from sandeen@sgi.com on Thu, Jan 10, 2002 at 03:25:08PM -0600
References: <20020110221155.A912@awacs.dhs.org> <1010697908.2812.22.camel@stout.americas.sgi.com>
Sender: owner-linux-xfs@xxxxxxxxxxx
User-agent: Mutt/1.2.5i
10/01/02 15:25, Eric Sandeen wrote:

> Can you do a bit more work?
>
> Assuming your kernel has xfs built in, and you have a source tree that
> can rebuild this exact kernel, try:
> 
> cd /usr/src/linux
> rm fs/xfs/xfs_vfsops.o
> 
> then rebuild the kernel:
> 
> make CFLAGS_xfs_vfsops.o=-g vmlinux

[root@awacs linux]$ make CFLAGS_xfs_vfsops.o=-g vmlinux
. scripts/mkversion > .tmpversion
/bin/sh: invalid character 46 in exportstr for CFLAGS_xfs_vfsops.o
/bin/sh: invalid character 46 in exportstr for CFLAGS_xfs_vfsops.o
/bin/sh: invalid character 46 in exportstr for CFLAGS_xfs_vfsops.o
/bin/sh: invalid character 46 in exportstr for CFLAGS_xfs_vfsops.o
/bin/sh: invalid character 46 in exportstr for CFLAGS_xfs_vfsops.o
/bin/sh: invalid character 46 in exportstr for CFLAGS_xfs_vfsops.o
/bin/sh: invalid character 46 in exportstr for CFLAGS_xfs_vfsops.o
/bin/sh: invalid character 46 in exportstr for CFLAGS_xfs_vfsops.o
kgcc -D__KERNEL__ -I/usr/src/linux-2.4.16-xfs-ll/include  -Wall
-Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common
-fomit-frame-pointer -pi

[Hmm..]

> Then run objdump on /usr/src/vmlinux:
> 
> objdump -S --start-address=c01ccb00 --stop-address=c01ccbff vmlinux
>
> (you can expand/contract --start-address and stop-address, just need
> enough to contain your oops point (c01ccb41) and some surrounding code).

[root@awacs linux]$ objdump -S --start-address=c01ccb00 --stop-address=c01ccbff 
vmlinux 
objdump: --start-address: bad number: c01ccb00

[Just read Keith's post, apparently the numbers should be 0x...]

[root@awacs linux]$ objdump -S --start-address=0xc01ccb00 
--stop-address=0xc01ccbff vmlinux 

[Wow, what a nice tool!]

vmlinux:     file format elf32-i386

Disassembly of section .text:

c01ccb00 <xfs_syncsub+0x918>:

                if (mount_locked == B_FALSE) {
                        XFS_MOUNT_ILOCK(mp);
                        mount_locked = B_TRUE;
                        IPOINTER_REMOVE(ip, mp);
c01ccb00:       0c 89                   or     $0x89,%al
c01ccb02:       70 08                   jo     c01ccb0c <xfs_syncsub+0x924>
c01ccb04:       8b 4c 24 70             mov    0x70(%esp,1),%ecx
c01ccb08:       8b 91 14 01 00 00       mov    0x114(%ecx),%edx
c01ccb0e:       39 fa                   cmp    %edi,%edx
c01ccb10:       75 2f                   jne    c01ccb41 <xfs_syncsub+0x959>
c01ccb12:       89 b1 14 01 00 00       mov    %esi,0x114(%ecx)
c01ccb18:       89 f2                   mov    %esi,%edx
c01ccb1a:       eb 25                   jmp    c01ccb41 <xfs_syncsub+0x959>
c01ccb1c:       8d 74 26 00             lea    0x0(%esi,1),%esi
c01ccb20:       8b 5c 24 70             mov    0x70(%esp,1),%ebx
c01ccb24:       c7 83 14 01 00 00 00    movl   $0x0,0x114(%ebx)
c01ccb2b:       00 00 00 
c01ccb2e:       31 f6                   xor    %esi,%esi
                        continue;
c01ccb30:       31 d2                   xor    %edx,%edx
c01ccb32:       eb 0d                   jmp    c01ccb41 <xfs_syncsub+0x959>
                }

                ASSERT(ipointer_in == B_FALSE);
                ip = ip->i_mnext;
c01ccb34:       8b 4c 24 70             mov    0x70(%esp,1),%ecx
c01ccb38:       8b 76 08                mov    0x8(%esi),%esi
c01ccb3b:       8b 91 14 01 00 00       mov    0x114(%ecx),%edx

        } while (ip->i_mnext != mp->m_inodes);

[*ksymoops disassembly matches here*]

c01ccb41:       39 56 08                cmp    %edx,0x8(%esi)
c01ccb44:       74 10                   je     c01ccb56 <xfs_syncsub+0x96e>
c01ccb46:       8b 5c 24 38             mov    0x38(%esp,1),%ebx
c01ccb4a:       89 5c 24 3c             mov    %ebx,0x3c(%esp,1)
c01ccb4e:       85 f6                   test   %esi,%esi
c01ccb50:       0f 85 fa f7 ff ff       jne    c01cc350 <xfs_syncsub+0x168>

        XFS_MOUNT_IUNLOCK(mp);
c01ccb56:       8b 4c 24 20             mov    0x20(%esp,1),%ecx
c01ccb5a:       51                      push   %ecx
c01ccb5b:       e8 30 33 01 00          call   c01dfe90 <_mutex_unlock>

        ASSERT(ipointer_in == B_FALSE);

        /*
         * Get the Quota Manager to flush the dquots in a similar manner.
         */
        if (XFS_IS_QUOTA_ON(mp)) {
c01ccb60:       83 c4 04                add    $0x4,%esp
c01ccb63:       8b 5c 24 70             mov    0x70(%esp,1),%ebx
c01ccb67:       f7 83 50 02 00 00 80    testl  $0x180,0x250(%ebx)
c01ccb6e:       01 00 00 
c01ccb71:       74 3d                   je     c01ccbb0 <xfs_syncsub+0x9c8>
                if ((error = xfs_qm_sync(mp, flags))) {
c01ccb73:       0f bf 44 24 74          movswl 0x74(%esp,1),%eax
c01ccb78:       50                      push   %eax
c01ccb79:       53                      push   %ebx
c01ccb7a:       e8 01 d0 fa ff          call   c0179b80 <xfs_qm_sync>
c01ccb7f:       89 44 24 54             mov    %eax,0x54(%esp,1)
c01ccb83:       83 c4 08                add    $0x8,%esp
c01ccb86:       83 7c 24 4c 00          cmpl   $0x0,0x4c(%esp,1)
c01ccb8b:       74 23                   je     c01ccbb0 <xfs_syncsub+0x9c8>
                        /*
                         * If we got an IO error, we will be shutting down.
                         * So, there's nothing more for us to do here.
                         */
                        ASSERT(error != EIO || XFS_FORCED_SHUTDOWN(mp));
                        if (XFS_FORCED_SHUTDOWN(mp)) {
c01ccb8d:       f6 83 34 02 00 00 10    testb  $0x10,0x234(%ebx)
c01ccb94:       74 1a                   je     c01ccbb0 <xfs_syncsub+0x9c8>
                                kmem_free(ipointer, sizeof(xfs_iptr_t));
c01ccb96:       6a 18                   push   $0x18
c01ccb98:       57                      push   %edi
c01ccb99:       e8 16 2a 01 00          call   c01df5b4 <kmem_free>
                                return XFS_ERROR(error);
c01ccb9e:       8b 44 24 54             mov    0x54(%esp,1),%eax
c01ccba2:       83 c4 08                add    $0x8,%esp
c01ccba5:       e9 5d 02 00 00          jmp    c01cce07 <xfs_syncsub+0xc1f>
c01ccbaa:       8d b6 00 00 00 00       lea    0x0(%esi),%esi
                        }
                }
        }

        /*
         * Flushing out dirty data above probably generated more
         * log activity, so if this isn't vfs_sync() then flush
         * the log again.  If SYNC_WAIT is set then do it synchronously.
         */
        if (!(flags & SYNC_BDFLUSH)) {
c01ccbb0:       83 7c 24 28 00          cmpl   $0x0,0x28(%esp,1)
c01ccbb5:       75 24                   jne    c01ccbdb <xfs_syncsub+0x9f3>
                log_flags = XFS_LOG_FORCE;
c01ccbb7:       b8 02 00 00 00          mov    $0x2,%eax
                if (flags & SYNC_WAIT) {
c01ccbbc:       ba 03 00 00 00          mov    $0x3,%edx
c01ccbc1:       83 7c 24 24 00          cmpl   $0x0,0x24(%esp,1)
c01ccbc6:       0f 45 c2                cmovne %edx,%eax
                        log_flags |= XFS_LOG_SYNC;
                }
                xfs_log_force(mp, (xfs_lsn_t)0, log_flags);
c01ccbc9:       50                      push   %eax
c01ccbca:       6a 00                   push   $0x0
c01ccbcc:       6a 00                   push   $0x0
c01ccbce:       8b 4c 24 7c             mov    0x7c(%esp,1),%ecx
c01ccbd2:       51                      push   %ecx
c01ccbd3:       e8 08 f6 fe ff          call   c01bc1e0 <xfs_log_force>
        }
c01ccbd8:       83 c4 10                add    $0x10,%esp

        if (flags & SYNC_FSDATA) {
c01ccbdb:       8b 5c 24 74             mov    0x74(%esp,1),%ebx
c01ccbdf:       f6 c3 20                test   $0x20,%bl
c01ccbe2:       0f 84 db 00 00 00       je     c01cccc3 <xfs_syncsub+0xadb>
                /*
                 * If this is vfs_sync() then only sync the superblock
                 * if we can lock it without sleeping and it is not pinned.
                 */
                if (flags & SYNC_BDFLUSH) {
c01ccbe8:       83 7c 24 14 00          cmpl   $0x0,0x14(%esp,1)
c01ccbed:       74 71                   je     c01ccc60 <xfs_syncsub+0xa78>
                        bp = xfs_getsb(mp, XFS_BUF_TRYLOCK);
c01ccbef:       68 00 40 00 00          push   $0x4000
c01ccbf4:       8b 4c 24 74             mov    0x74(%esp,1),%ecx
c01ccbf8:       51                      push   %ecx
c01ccbf9:       e8 6a 82 ff ff          call   c01c4e68 <xfs_getsb>
c01ccbfe:       89 44 24 5c             mov    %eax,0x5c(%esp,1)
Disassembly of section .text.lock:
Disassembly of section .text.init:


<Prev in Thread] Current Thread [Next in Thread>