Helding the Kernel lock while doing IO???

From: Juan J. Quintela (quintela@fi.udc.es)
Date: Fri May 05 2000 - 21:30:47 EDT

  • Next message: Andre Hedrick: "Re: IDE Controllers"

    Hi
            In the function m/memory.c()::do_swap_page():

                    lock_kernel();
                    swapin_readahead(entry);
                    page = read_swap_cache(entry);
                    unlock_kernel();

    read_swap_cache is called synchronously, then we can have to wait
    until we read the page to liberate the lock kernel. It is intended?
    I am losing some detail?

    I have changed that in the two places that happened.

    Thanks in advance for any response.

    Later, Juan.

    diff -u -urN --exclude=CVS --exclude=*~ --exclude=.#* --exclude=TAGS pre7-6/ipc/shm.c testing2/ipc/shm.c
    --- pre7-6/ipc/shm.c Fri May 5 23:58:56 2000
    +++ testing2/ipc/shm.c Sat May 6 02:39:17 2000
    @@ -1379,10 +1379,11 @@
                             if (!page) {
                                     lock_kernel();
                                     swapin_readahead(entry);
    - page = read_swap_cache(entry);
    + page = read_swap_cache_async(entry, 0);
                                     unlock_kernel();
                                     if (!page)
                                             goto oom;
    + wait_on_page(page);
                             }
                             delete_from_swap_cache(page);
                             page = replace_with_highmem(page);
    diff -u -urN --exclude=CVS --exclude=*~ --exclude=.#* --exclude=TAGS pre7-6/mm/memory.c testing2/mm/memory.c
    --- pre7-6/mm/memory.c Fri May 5 23:58:56 2000
    +++ testing2/mm/memory.c Sat May 6 02:02:53 2000
    @@ -1038,11 +1038,10 @@
             if (!page) {
                     lock_kernel();
                     swapin_readahead(entry);
    - page = read_swap_cache(entry);
    + page = read_swap_cache_async(entry, 0);
                     unlock_kernel();
                     if (!page)
                             return -1;
    -
                     flush_page_to_ram(page);
                     flush_icache_page(vma, page);
             }

    -- 
    In theory, practice and theory are the same, but in practice they 
    are different -- Larry McVoy
    

    - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



    This archive was generated by hypermail 2b29 : Fri May 05 2000 - 22:33:57 EDT