]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - c_src/include/linux/key.h
move Rust sources to top level, C sources into c_src
[bcachefs-tools-debian] / c_src / include / linux / key.h
diff --git a/c_src/include/linux/key.h b/c_src/include/linux/key.h
new file mode 100644 (file)
index 0000000..cc6859a
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef _LINUX_KEY_H
+#define _LINUX_KEY_H
+
+#include <linux/types.h>
+#include <linux/atomic.h>
+#include <keyutils.h>
+
+struct user_key_payload {
+       size_t          datalen;        /* length of this data */
+       char            data[0];        /* actual data */
+};
+
+struct key {
+       atomic_t                usage;          /* number of references */
+       key_serial_t            serial;         /* key serial number */
+       struct rw_semaphore     sem;            /* change vs change sem */
+       struct user_key_payload payload;
+};
+
+static inline const struct user_key_payload *user_key_payload(const struct key *key)
+{
+       return &key->payload;
+}
+
+static inline void key_put(struct key *key)
+{
+       if (atomic_dec_and_test(&key->usage))
+               free(key);
+}
+
+static inline struct key *__key_get(struct key *key)
+{
+       atomic_inc(&key->usage);
+       return key;
+}
+
+static inline struct key *key_get(struct key *key)
+{
+       return key ? __key_get(key) : key;
+}
+
+#endif /* _LINUX_KEY_H */