2005-10-05 14:57:10

by yogeshwar sonawane

[permalink] [raw]
Subject: what is the difference between __free_page() & page_cache_release()

hi,
I am writing a driver for 2.6 in which i am locking down some pages
into the physical memory by manually traversing the page tables. After
my work with those pages is finished, i free them using
__free_page(). For some cases it is running fine. But while running
some applications, i got the following error:

Bad page state at free_hot_cold_page (in process 'data_lat', page
0000010003d208e8)
flags:0x01000074 mapping:0000000000000000 mapcount:0 count:0
Backtrace:

Call Trace:<ffffffff801571f7>{bad_page+112}
<ffffffff801578cf>{free_hot_cold_page+130}
<ffffffffa01aa101>{:ccp3k:VipkUnmapAndUnlock+162}
<ffffffffa01aaba0>{:ccp3k:VipkCloseNic+638}
<ffffffffa01a812d>{:ccp3k:VipkClose+30} <ffffffff80173117>{__fput+99}
<ffffffff80171d55>{filp_close+103}
<ffffffff80137771>{put_files_struct+101}
<ffffffff80137f76>{do_exit+665} <ffffffff80138a2c>{sys_exit_group+0}
<ffffffff8011003e>{system_call+126}
Trying to fix it up, but a reboot is needed

Then i replaced __free_page() with page_cache_release(). It is working
fine now. But what is the difference between these two? whether this
is the correct/safe replacement for __free_page()?
Can anybody help me out in this scenario? My machine is intel
xeon(EM64T) dual processor with redhat enterprise linux 4(2.6.9-11)
running on it.

if anybody knows any link about it, let me share that.

Thanks,
Yogeshwar


2005-10-05 15:02:35

by Arjan van de Ven

[permalink] [raw]
Subject: Re: what is the difference between __free_page() & page_cache_release()

On Wed, 2005-10-05 at 20:27 +0530, yogeshwar sonawane wrote:
> hi,
> I am writing a driver for 2.6 in which i am locking down some pages
> into the physical memory by manually traversing the page tables. After
> my work with those pages is finished, i free them using
> __free_page(). For some cases it is running fine. But while running
> some applications, i got the following error:

you forgot to put in a url to your code