]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/ocf/src/utils/utils_async_lock.h
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / spdk / ocf / src / utils / utils_async_lock.h
CommitLineData
f67539c2
TL
1/*
2 * Copyright(c) 2019 Intel Corporation
3 * SPDX-License-Identifier: BSD-3-Clause-Clear
4 */
5
6#ifndef __UTILS_ASYNC_LOCK_H__
7#define __UTILS_ASYNC_LOCK_H__
8
9#include "ocf_env.h"
10
11struct ocf_async_lock {
12 struct list_head waiters;
13 env_spinlock waiters_lock;
14 uint32_t rd;
15 uint32_t wr;
16 uint32_t waiter_priv_size;
17};
18
19typedef struct ocf_async_lock *ocf_async_lock_t;
20
21typedef struct ocf_async_lock_waiter *ocf_async_lock_waiter_t;
22
23typedef void (*ocf_async_lock_end_t)(ocf_async_lock_waiter_t waiter, int error);
24
25int ocf_async_lock_init(ocf_async_lock_t lock, uint32_t waiter_priv_size);
26
27void ocf_async_lock_deinit(ocf_async_lock_t lock);
28
29ocf_async_lock_waiter_t ocf_async_lock_new_waiter(ocf_async_lock_t lock,
30 ocf_async_lock_end_t cmpl);
31
32ocf_async_lock_t ocf_async_lock_waiter_get_lock(ocf_async_lock_waiter_t waiter);
33
34void *ocf_async_lock_waiter_get_priv(ocf_async_lock_waiter_t waiter);
35
36void ocf_async_lock(ocf_async_lock_waiter_t waiter);
37
38int ocf_async_trylock(struct ocf_async_lock *lock);
39
40void ocf_async_unlock(struct ocf_async_lock *lock);
41
42void ocf_async_read_lock(ocf_async_lock_waiter_t waiter);
43
44int ocf_async_read_trylock(struct ocf_async_lock *lock);
45
46void ocf_async_read_unlock(struct ocf_async_lock *lock);
47
48bool ocf_async_is_locked(struct ocf_async_lock *lock);
49
50#endif /* __UTILS_ASYNC_LOCK_H__ */