xfs
[Top] [All Lists]

ADD 800992 - pagebuf_init call to kmem_cache_create BUG()

To: dxm@xxxxxxxxxxxx
Subject: ADD 800992 - pagebuf_init call to kmem_cache_create BUG()
From: pv@xxxxxxxxxxxxx (dxm@xxxxxxxxxxxx)
Date: Thu, 14 Sep 2000 22:23:36 -0700 (PDT)
Cc: linux-xfs@xxxxxxxxxxx
Reply-to: sgi.bugs.xfs@xxxxxxxxxxxxxxxxx
Sender: owner-linux-xfs@xxxxxxxxxxx
Webexec: webpvupdate,pvincident
Webpv: clouds.melbourne.sgi.com
View Incident: 
http://co-op.engr.sgi.com/BugWorks/code/bwxquery.cgi?search=Search&wlong=1&view_type=Bug&wi=800992

 Status : open                         Priority : 2                         
 Assigned Engineer : dxm               Submitter : dxm                      
*Modified User : dxm                  *Modified User Domain : engr          
*Description :
On my test box, I'd been playing with xfs, then
umounted, rmmoded and insmoded the modules. When
pagebuf was insmoded, this kernel BUG() was tripped.

I'll see if I can get some more info on this one.

kmem_cache_destroy: Can't free all objects c116d764
kernel BUG at slab.c:806!

Entering kdb (0xc215e000) Panic: invalid operand

.....


==========================
ADDITIONAL INFORMATION (ADD)
From: dxm@engr (BugWorks)
Date: Sep 14 2000 10:23:35PM
==========================

Ok, so it turns out that I never noticed this before because
it's only an issue if CONFIG_XFS_VNODE_TRACING is enabled
_and_ you fail a mount.

On a failed unmount, linvfs_read_super does not do a
ktrace_free on the buffer it allocates with ktrace_alloc.
The ktrace_free is normally done by linvfs_put_super but
this is not called since the mount failed.

This patch also stops a leaked inode on mount fail and
gotos the right place if the pagebuf daemons fail to start.

Could someone rv for me? Steve? Ta. (beta worthy?)



--- /usr/tmp/p_rdiff_a0PybF/xfs_super.c Fri Sep 15 16:19:57 2000
+++ /build1/people/dxm/isms/slinx-xfs/linux/fs/xfs/linux/xfs_super.c    Fri Sep 
15 16:14:29 2000
@@ -174,7 +174,7 @@
 
        /* first mount pagebuf delayed write daemon not running yet */
        if (pagebuf_daemon_start() < 0) {
-               goto fail_vnrele;
+               goto fail_daemon;
        }
 
        /*  Setup the uap structure  */
@@ -299,6 +299,15 @@
 fail_vfsop:
        vfs_deallocate(vfsp);
 
+#ifdef  CONFIG_XFS_VNODE_TRACING
+       ktrace_free(cvp->v_trace);
+
+       cvp->v_trace = NULL;
+#endif  /* CONFIG_XFS_VNODE_TRACING */
+
+       kfree(cvp->v_inode);
+        
+fail_daemon:
        MOD_DEC_USE_COUNT;
 
        return(NULL);

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