]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] remove swapper_inode
authorAndrew Morton <akpm@digeo.com>
Fri, 20 Jun 2003 15:14:42 +0000 (08:14 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Fri, 20 Jun 2003 15:14:42 +0000 (08:14 -0700)
By moving the special-casing for swapper_space out of __mark_inode_dirty()
and into __set_page_dirty_nobuffers() we can remove swapper_inode.

fs/fs-writeback.c
mm/page-writeback.c
mm/swap_state.c

index 8bbd871b03db94b520c7bc698c6853e3f737e55f..ffece5ab894c6969a0f84f7770597f06df059907 100644 (file)
@@ -49,9 +49,6 @@ void __mark_inode_dirty(struct inode *inode, int flags)
 {
        struct super_block *sb = inode->i_sb;
 
-       if (!sb)
-               return;         /* swapper_space */
-
        /*
         * Don't do this for I_DIRTY_PAGES - that doesn't actually
         * dirty the inode itself
@@ -90,9 +87,12 @@ void __mark_inode_dirty(struct inode *inode, int flags)
                 * Only add valid (hashed) inodes to the superblock's
                 * dirty list.  Add blockdev inodes as well.
                 */
-               if ((hlist_unhashed(&inode->i_hash) || (inode->i_state & (I_FREEING|I_CLEAR)))
-                   && !S_ISBLK(inode->i_mode))
-                       goto out;
+               if (!S_ISBLK(inode->i_mode)) {
+                       if (hlist_unhashed(&inode->i_hash))
+                               goto out;
+                       if (inode->i_state & (I_FREEING|I_CLEAR))
+                               goto out;
+               }
 
                /*
                 * If the inode was already on s_dirty or s_io, don't
index 9e54d17adaaa7245f5fc4b69484fc2176c382f3d..793cce9a80e2880acd10c3e4d1fe202753e8a3e7 100644 (file)
@@ -516,7 +516,9 @@ int __set_page_dirty_nobuffers(struct page *page)
                                list_add(&page->list, &mapping->dirty_pages);
                        }
                        spin_unlock(&mapping->page_lock);
-                       __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
+                       if (!PageSwapCache(page))
+                               __mark_inode_dirty(mapping->host,
+                                                       I_DIRTY_PAGES);
                }
        }
        return ret;
index 29198f06fcae17feeced987c5b75c5e62ef5224a..708141fb02151452586e6132412a0d3ec363e603 100644 (file)
 
 #include <asm/pgtable.h>
 
-/*
- * swapper_inode doesn't do anything much.  It is really only here to
- * avoid some special-casing in other parts of the kernel.
- */
-static struct inode swapper_inode = {
-       .i_mapping      = &swapper_space,
-};
-
 static struct backing_dev_info swap_backing_dev_info = {
        .ra_pages       = 0,    /* No readahead */
        .memory_backed  = 1,    /* Does not contribute to dirty memory */
@@ -38,7 +30,6 @@ struct address_space swapper_space = {
        .dirty_pages    = LIST_HEAD_INIT(swapper_space.dirty_pages),
        .io_pages       = LIST_HEAD_INIT(swapper_space.io_pages),
        .locked_pages   = LIST_HEAD_INIT(swapper_space.locked_pages),
-       .host           = &swapper_inode,
        .a_ops          = &swap_aops,
        .backing_dev_info = &swap_backing_dev_info,
        .i_mmap         = LIST_HEAD_INIT(swapper_space.i_mmap),