xfs
[Top] [All Lists]

[PATCH V2] free temporary cursor in xfs_dialloc

To: xfs-oss <xfs@xxxxxxxxxxx>
Subject: [PATCH V2] free temporary cursor in xfs_dialloc
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Tue, 13 Oct 2009 22:59:32 -0500
Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx>, Alex Elder <aelder@xxxxxxx>
In-reply-to: <4AD54BAF.2050206@xxxxxxxxxxx>
References: <4AD54BAF.2050206@xxxxxxxxxxx>
User-agent: Thunderbird 2.0.0.23 (Macintosh/20090812)
Commit bd169565993b39b9b4b102cdac8b13e0a259ce2f seems
to have a slight regression where this code path:

   if (!--searchdistance) {
       /*
        * Not in range - save last search
        * location and allocate a new inode
        */
       ...
       goto newino;
   }

doesn't free the temporary cursor (tcur) that got dup'd in
this function.

This leaks an item in the xfs_btree_cur zone, and it's caught
on module unload:

===========================================================
BUG xfs_btree_cur: Objects remaining on kmem_cache_close()
-----------------------------------------------------------

It seems like maybe a single free at the end of the function might
be cleaner, but for now put a del_cursor right in this code block
similar to the handling in the rest of the function.

Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxxx>

---

(V2 w/o whitespace mangling, ugh)

diff --git a/fs/xfs/xfs_ialloc.c b/fs/xfs/xfs_ialloc.c
index ab64f3e..0785797 100644
--- a/fs/xfs/xfs_ialloc.c
+++ b/fs/xfs/xfs_ialloc.c
@@ -880,6 +880,7 @@ nextag:
                                 * Not in range - save last search
                                 * location and allocate a new inode
                                 */
+                               xfs_btree_del_cursor(tcur, XFS_BTREE_NOERROR);
                                pag->pagl_leftrec = trec.ir_startino;
                                pag->pagl_rightrec = rec.ir_startino;
                                pag->pagl_pagino = pagino;

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