parlib: UTH_EXT_BLK_JUSTICE -> _MISC
[akaros.git] / kern / include / kref.h
index 1817a6d..7888b7f 100644 (file)
@@ -10,8 +10,7 @@
  *
  * See our Documentation/kref.txt for more info. */
 
-#ifndef ROS_KERN_KREF_H
-#define ROS_KERN_KREF_H
+#pragma once
 
 #include <atomic.h>
 #include <assert.h>
@@ -39,9 +38,9 @@ static void kref_init(struct kref *kref, void (*release)(struct kref *kref),
        kref->release = release;
 }
 
-static struct kref *kref_get(struct kref *kref, unsigned int inc)
+/* Will blindly incref */
+static struct kref *__kref_get(struct kref *kref, unsigned int inc)
 {
-       assert(atomic_read(&kref->refcount));
        atomic_add(&kref->refcount, inc);
        return kref;
 }
@@ -51,7 +50,16 @@ static struct kref *kref_get_not_zero(struct kref *kref, unsigned int inc)
 {
        if (atomic_add_not_zero(&kref->refcount, inc))
                return kref;
-       else return 0;
+       else
+               return 0;
+}
+
+/* Will panic on zero */
+static struct kref *kref_get(struct kref *kref, unsigned int inc)
+{
+       kref = kref_get_not_zero(kref, inc);
+       assert(kref);
+       return kref;
 }
 
 /* Returns True if we hit 0 and executed 'release', False otherwise */
@@ -71,5 +79,3 @@ static void fake_release(struct kref *kref)
 {
        panic("Cleaning up this object is not supported!\n");
 }
-
-#endif /* ROS_KERN_KREF_H */