summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.ninka.net>2003-08-20 20:47:23 -0700
committerDavid S. Miller <davem@nuts.ninka.net>2003-08-20 20:47:23 -0700
commit658dcd3b0d4340b434353cb8a2b4125bfabb923d (patch)
tree3cfecdde3caab3ae145587a24be28d4ebafb2736 /kernel
parent5f6e4c742685e7c32dcc3ce3e28c87a9a8741029 (diff)
parentbe974925bc048c419f66e49b3744d98208e54831 (diff)
Merge nuts.ninka.net:/home/davem/src/BK/network-2.5
into nuts.ninka.net:/home/davem/src/BK/net-2.5
Diffstat (limited to 'kernel')
-rw-r--r--kernel/fork.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index b65c19fe2dce..690b8d77a04b 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -398,6 +398,23 @@ void mmput(struct mm_struct *mm)
}
}
+/*
+ * Checks if the use count of an mm is non-zero and if so
+ * returns a reference to it after bumping up the use count.
+ * If the use count is zero, it means this mm is going away,
+ * so return NULL.
+ */
+struct mm_struct *mmgrab(struct mm_struct *mm)
+{
+ spin_lock(&mmlist_lock);
+ if (!atomic_read(&mm->mm_users))
+ mm = NULL;
+ else
+ atomic_inc(&mm->mm_users);
+ spin_unlock(&mmlist_lock);
+ return mm;
+}
+
/* Please note the differences between mmput and mm_release.
* mmput is called whenever we stop holding onto a mm_struct,
* error success whatever.