lkml.org 
[lkml]   [1998]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: PATCH: Swap shared pages (was: How to read-protect a vm_area?)
    On Tue, 24 Feb 1998 15:31:37 +0000 (GMT), Stephane Casset
    <sept@renass3.u-strasbg.fr> said:

    >> The patch below, against 2.1.88, adds a bunch of new functionality to
    >> the swapper. The main changes are:

    > I tried it but got the following message :
    > ipc/ipc.o: In function `shm_swap_in':
    > ipc/ipc.o(.text+0x37e4): undefined reference to `read_swap_page'
    > ipc/ipc.o: In function `shm_swap':
    > ipc/ipc.o(.text+0x3b57): undefined reference to `write_swap_page'
    > make: *** [vmlinux] Error 1

    The diff below includes a patch against ipc/shm.c was missing from my
    first post, and another fix for spurious warnings about shared dirty
    pages.

    Cheers,
    Stephen.
    ----------------------------------------------------------------
    Index: ipc/shm.c
    ===================================================================
    RCS file: /home/rcs/CVS/kswap3/linux/ipc/shm.c,v
    retrieving revision 1.1
    retrieving revision 1.2
    diff -u -r1.1 -r1.2
    --- shm.c 1998/02/24 08:50:30 1.1
    +++ shm.c 1998/02/24 08:51:37 1.2
    @@ -689,7 +689,7 @@
    goto done;
    }
    if (!pte_none(pte)) {
    - read_swap_page(pte_val(pte), (char *) page);
    + rw_swap_page_nocache(READ, pte_val(pte), (char *)page);
    pte = __pte(shp->shm_pages[idx]);
    if (pte_present(pte)) {
    free_page (page); /* doesn't sleep */
    @@ -820,7 +820,7 @@
    if (atomic_read(&mem_map[MAP_NR(pte_page(page))].count) != 1)
    goto check_table;
    shp->shm_pages[idx] = swap_nr;
    - write_swap_page (swap_nr, (char *) pte_page(page));
    + rw_swap_page_nocache (WRITE, swap_nr, (char *) pte_page(page));
    free_page(pte_page(page));
    swap_successes++;
    shm_swp++;
    Index: mm/page_io.c
    ===================================================================
    RCS file: /home/rcs/CVS/kswap3/linux/mm/page_io.c,v
    retrieving revision 1.4
    diff -u -r1.4 page_io.c
    --- page_io.c 1998/02/23 22:14:27 1.4
    +++ page_io.c 1998/02/24 09:28:08
    @@ -201,7 +201,9 @@
    }
    page->inode = &swapper_inode;
    page->offset = entry;
    + atomic_inc(&page->count); /* Protect from shrink_mmap() */
    rw_swap_page(rw, entry, buffer, 1);
    + atomic_dec(&page->count);
    page->inode = 0;
    clear_bit(PG_swap_cache, &page->flags);
    }
    Index: mm/vmscan.c
    ===================================================================
    RCS file: /home/rcs/CVS/kswap3/linux/mm/vmscan.c,v
    retrieving revision 1.5
    diff -u -r1.5 vmscan.c
    --- vmscan.c 1998/02/23 22:14:28 1.5
    +++ vmscan.c 1998/02/24 09:22:47
    @@ -108,18 +108,16 @@
    *
    * -- Stephen Tweedie 1998 */

    - if (pte_write(pte)) {
    - /*
    - * We _will_ allow dirty cached mappings later on, once
    - * MAP_SHARED|MAP_ANONYMOUS is working, but for now
    - * catch this as a bug.
    - */
    - if (is_page_shared(page_map)) {
    - printk ("VM: Found a shared writable dirty page!\n");
    + if (PageSwapCache(page_map)) {
    + if (pte_write(pte)) {
    + printk ("VM: Found a writable swap-cached page!\n");
    return 0;
    }
    - if (PageSwapCache(page_map)) {
    - printk ("VM: Found a writable swap-cached page!\n");
    + /* We _will_ allow dirty cached mappings later
    + * on, once MAP_SHARED|MAP_ANONYMOUS is working,
    + * but for now catch this as a bug. */
    + if (is_page_shared(page_map)) {
    + printk ("VM: Found a shared writable dirty page!\n");
    return 0;
    }
    }
    ----------------------------------------------------------------
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.rutgers.edu

    \
     
     \ /
      Last update: 2005-03-22 13:41    [W:0.022 / U:30.396 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site