Thanks Jim! I think about your suggested code, and maybe i dont understand what your variables stand for, or .... ok, i think i dont understand ;) Thats the lines i dont understand. pos = begin + len; // pos is file offset of last byte in buffer if (pos < off) { len = 0; // We havn't hit offset yet, start over begin = pos; } How do you calc begin? begin = page+off ? If so, the if statement would never been true. Because, offset it's small , in my case up to 1024, and pos is a memory address, really big... do you has the complete function source? Ohh my god, its friday morning and my head is burning... :( -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/