Tugger the SLUGger!SLUG Mailing List Archives

[SLUG] vmscan.c killing processes


I've managed to get network swapping going, but my netstation still kills
my bzflag application.

I think the relevant section of code is inside vmscan.c, following :

        flush_cache_page(vma, address);
        if (vma->vm_ops && vma->vm_ops->swapout) {
               pid_t pid = tsk->pid;
               pte_clear(page_table);
               flush_tlb_page(vma, address);
               vma->vm_mm->rss--;

               if (vma->vm_ops->swapout(vma, page_map))
                     kill_proc(pid, SIGBUS, 1);
               __free_page(page_map);
                                                                                               return 1;
                                                                                        }

This seems to be something related to handling really dirty pages,
writing it back to backing store.

To be fair, the bzflag uses about 10M of memory in starting up; there's
ample memory (about 12M) available in the netstation when bzflag starts
up, though a lot of it is network swap.

Kernel operation may, however, be dependent on having a lot of "real,
free" memory, a continuous block, too great a density of dirty pages,
or something.

What does :
               if (vma->vm_ops->swapout(vma, page_map))
                     kill_proc(pid, SIGBUS, 1);
                                    
do, and why ?

Are there any ways around this functionality ?

Perhaps I should go to the kernel list if this one is a bit out there :)

Thanks,

-- 
John August