xfs
[Top] [All Lists]

page_buf leak...

To: linux-xfs@xxxxxxxxxxx
Subject: page_buf leak...
From: Daniel Moore <dxm@xxxxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 02 May 2000 10:26:26 +1000
Sender: owner-linux-xfs@xxxxxxxxxxx
Problem:

   - make a clean fs
   - mount, unmount at least twice

128k slabs get alloced and not freed (see /proc/slabinfo) eventually
causing an allocation failure.

When the page_bufs in question are passed to _pagebuf_free_object,
their pointers are wiped by pagebuf_mapout_locked and the now NULL
pointer is passed to kfree (kfree doesn't care).

pagebuf_mapout_locked clears the pointers of any page_buf with
PBF_MAPPED set, but only returns the pointers of page_bufs with
_PBF_ADDR_ALLOCATED set.

The page_bufs in question have PBF_MAPPED set but not _PBF_ADDR_ALLOCATED
and hence their pointers get cleared and a NULL pointer is returned.

My fix is to change _pagebuf_free_object:

=>                 /* release any virtual mapping */ ;
=>                 if (pb->pb_flags & PBF_MAPPED)
=>                         vaddr = pagebuf_mapout_locked(pb); 

to

=>              /* release any virtual mapping */ ;
=>              if (pb->pb_flags & _PBF_ADDR_ALLOCATED)
=>                      vaddr = pagebuf_mapout_locked(pb); 

It fixes my problem but it might not be the "right thing" to do. 
Comments?

-----------------------------------------------------
 Daniel Moore                  dxm@xxxxxxx
 R&D Software Engineer         Phone: +61-3-98348209
 SGI Performance Tools Group   Fax:   +61-3-98132378
-----------------------------------------------------


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