what is the difference between __free_page() & page_cache_release()

From: yogeshwar sonawane
Date: Wed Oct 05 2005 - 09:57:26 EST


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
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/