<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">

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   |   12 ++++++------
 mm/page-writeback.c |    4 +++-
 mm/swap_state.c     |    9 ---------
 3 files changed, 9 insertions(+), 16 deletions(-)

diff -puN fs/fs-writeback.c~remove-swapper_inode fs/fs-writeback.c
--- 25/fs/fs-writeback.c~remove-swapper_inode	2003-06-13 02:02:55.000000000 -0700
+++ 25-akpm/fs/fs-writeback.c	2003-06-13 02:02:55.000000000 -0700
@@ -49,9 +49,6 @@ void __mark_inode_dirty(struct inode *in
 {
 	struct super_block *sb = inode-&gt;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 *in
 		 * Only add valid (hashed) inodes to the superblock's
 		 * dirty list.  Add blockdev inodes as well.
 		 */
-		if ((hlist_unhashed(&amp;inode-&gt;i_hash) || (inode-&gt;i_state &amp; (I_FREEING|I_CLEAR)))
-		    &amp;&amp; !S_ISBLK(inode-&gt;i_mode))
-			goto out;
+		if (!S_ISBLK(inode-&gt;i_mode)) {
+			if (hlist_unhashed(&amp;inode-&gt;i_hash))
+				goto out;
+			if (inode-&gt;i_state &amp; (I_FREEING|I_CLEAR))
+				goto out;
+		}
 
 		/*
 		 * If the inode was already on s_dirty or s_io, don't
diff -puN mm/page-writeback.c~remove-swapper_inode mm/page-writeback.c
--- 25/mm/page-writeback.c~remove-swapper_inode	2003-06-13 02:02:55.000000000 -0700
+++ 25-akpm/mm/page-writeback.c	2003-06-13 02:02:55.000000000 -0700
@@ -524,7 +524,9 @@ int __set_page_dirty_nobuffers(struct pa
 				list_add(&amp;page-&gt;list, &amp;mapping-&gt;dirty_pages);
 			}
 			spin_unlock(&amp;mapping-&gt;page_lock);
-			__mark_inode_dirty(mapping-&gt;host, I_DIRTY_PAGES);
+			if (!PageSwapCache(page))
+				__mark_inode_dirty(mapping-&gt;host,
+							I_DIRTY_PAGES);
 		}
 	}
 	return ret;
diff -puN mm/swap_state.c~remove-swapper_inode mm/swap_state.c
--- 25/mm/swap_state.c~remove-swapper_inode	2003-06-13 02:02:55.000000000 -0700
+++ 25-akpm/mm/swap_state.c	2003-06-13 02:02:55.000000000 -0700
@@ -16,14 +16,6 @@
 
 #include &lt;asm/pgtable.h&gt;
 
-/*
- * 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	= &amp;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		= &amp;swapper_inode,
 	.a_ops		= &amp;swap_aops,
 	.backing_dev_info = &amp;swap_backing_dev_info,
 	.i_mmap		= LIST_HEAD_INIT(swapper_space.i_mmap),

_
</pre></body></html>