summaryrefslogtreecommitdiff
path: root/net/unix/garbage.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2010-12-06 09:36:17 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2010-12-06 09:36:17 +0100
commit0e44e059588e1d91f3a1974d2ce3348864d1d799 (patch)
tree1161c2508bd9eeab010ebc40ef87860fd85a35fd /net/unix/garbage.c
parent96886c4361f1ae3f6c775d7c9295e2d557101d0f (diff)
parente8a7e48bb248a1196484d3f8afa53bded2b24e71 (diff)
Merge commit 'v2.6.37-rc4' into imx-for-2.6.38
Done to resolve merge conflict: Conflicts: arch/arm/mach-mx25/devices-imx25.h Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'net/unix/garbage.c')
-rw-r--r--net/unix/garbage.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/net/unix/garbage.c b/net/unix/garbage.c
index c8df6fda0b1fc..f89f83bf828ee 100644
--- a/net/unix/garbage.c
+++ b/net/unix/garbage.c
@@ -96,7 +96,7 @@ static DECLARE_WAIT_QUEUE_HEAD(unix_gc_wait);
unsigned int unix_tot_inflight;
-static struct sock *unix_get_socket(struct file *filp)
+struct sock *unix_get_socket(struct file *filp)
{
struct sock *u_sock = NULL;
struct inode *inode = filp->f_path.dentry->d_inode;
@@ -259,9 +259,16 @@ static void inc_inflight_move_tail(struct unix_sock *u)
}
static bool gc_in_progress = false;
+#define UNIX_INFLIGHT_TRIGGER_GC 16000
void wait_for_unix_gc(void)
{
+ /*
+ * If number of inflight sockets is insane,
+ * force a garbage collect right now.
+ */
+ if (unix_tot_inflight > UNIX_INFLIGHT_TRIGGER_GC && !gc_in_progress)
+ unix_gc();
wait_event(unix_gc_wait, gc_in_progress == false);
}