lkml.org 
[lkml]   [2001]   [Apr]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] Move __GFP_IO check in shrink_icache_memory to prune_icache()

Linus,

With the prune_icache() modifications which were integrated in pre5 there
is no more need to avoid non __GFP_IO allocations to go down to
prune_icache().

The following patch moves the __GFP_IO check down to prune_icache(),
allowing !__GFP_IO allocations to free clean unused inodes.


diff --exclude-from=/home/marcelo/exclude -Nur linux.orig/fs/dquot.c linux/fs/dquot.c
--- linux.orig/fs/dquot.c Mon Apr 23 19:15:23 2001
+++ linux/fs/dquot.c Mon Apr 23 19:18:14 2001
@@ -554,7 +554,7 @@
if (shrink) {
printk(KERN_DEBUG "get_empty_dquot: pruning dcache and icache\n");
prune_dcache(128);
- prune_icache(128);
+ prune_icache(128, GFP_USER);
shrink--;
goto repeat;
}
diff --exclude-from=/home/marcelo/exclude -Nur linux.orig/fs/inode.c linux/fs/inode.c
--- linux.orig/fs/inode.c Mon Apr 23 19:15:23 2001
+++ linux/fs/inode.c Mon Apr 23 19:18:04 2001
@@ -540,7 +540,7 @@
!inode_has_buffers(inode))
#define INODE(entry) (list_entry(entry, struct inode, i_list))

-void prune_icache(int goal)
+void prune_icache(int goal, int gfp_mask)
{
LIST_HEAD(list);
struct list_head *entry, *freeable = &list;
@@ -577,6 +577,16 @@

dispose_list(freeable);

+ /*
+ * Nasty deadlock avoidance..
+ *
+ * We may hold various FS locks, and we don't
+ * want to recurse into the FS that called us
+ * in clear_inode() and friends..
+ */
+ if (!(gfp_mask & __GFP_IO))
+ return;
+
/*
* If we freed enough clean inodes, avoid writing
* dirty ones. Also giveup if we already tried to
@@ -596,20 +606,10 @@
{
int count = 0;

- /*
- * Nasty deadlock avoidance..
- *
- * We may hold various FS locks, and we don't
- * want to recurse into the FS that called us
- * in clear_inode() and friends..
- */
- if (!(gfp_mask & __GFP_IO))
- return;
-
if (priority)
count = inodes_stat.nr_unused / priority;

- prune_icache(count);
+ prune_icache(count, gfp_mask);
kmem_cache_shrink(inode_cachep);
}

diff --exclude-from=/home/marcelo/exclude -Nur linux.orig/include/linux/dcache.h linux/include/linux/dcache.h
--- linux.orig/include/linux/dcache.h Mon Apr 23 19:15:23 2001
+++ linux/include/linux/dcache.h Mon Apr 23 19:18:31 2001
@@ -176,7 +176,7 @@

/* icache memory management (defined in linux/fs/inode.c) */
extern void shrink_icache_memory(int, int);
-extern void prune_icache(int);
+extern void prune_icache(int, int);

/* only used at mount-time */
extern struct dentry * d_alloc_root(struct inode *);

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

\
 
 \ /
  Last update: 2005-03-22 13:27    [W:1.314 / U:0.060 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site