Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/block/rnbd/rnbd-srv.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* RDMA Network Block Driver
4
*
5
* Copyright (c) 2014 - 2018 ProfitBricks GmbH. All rights reserved.
6
* Copyright (c) 2018 - 2019 1&1 IONOS Cloud GmbH. All rights reserved.
7
* Copyright (c) 2019 - 2020 1&1 IONOS SE. All rights reserved.
8
*/
9
#ifndef RNBD_SRV_H
10
#define RNBD_SRV_H
11
12
#include <linux/types.h>
13
#include <linux/idr.h>
14
#include <linux/kref.h>
15
16
#include <rtrs.h>
17
#include "rnbd-proto.h"
18
#include "rnbd-log.h"
19
20
struct rnbd_srv_session {
21
/* Entry inside global sess_list */
22
struct list_head list;
23
struct rtrs_srv_sess *rtrs;
24
char sessname[NAME_MAX];
25
int queue_depth;
26
27
struct xarray index_idr;
28
struct mutex lock;
29
u8 ver;
30
};
31
32
struct rnbd_srv_dev {
33
/* Entry inside global dev_list */
34
struct list_head list;
35
struct kobject dev_kobj;
36
struct kobject *dev_sessions_kobj;
37
struct kref kref;
38
char name[NAME_MAX];
39
/* List of rnbd_srv_sess_dev structs */
40
struct list_head sess_dev_list;
41
struct mutex lock;
42
int open_write_cnt;
43
};
44
45
/* Structure which binds N devices and N sessions */
46
struct rnbd_srv_sess_dev {
47
/* Entry inside rnbd_srv_dev struct */
48
struct list_head dev_list;
49
struct file *bdev_file;
50
struct rnbd_srv_session *sess;
51
struct rnbd_srv_dev *dev;
52
struct kobject kobj;
53
u32 device_id;
54
bool keep_id;
55
bool readonly;
56
struct kref kref;
57
struct completion *destroy_comp;
58
char pathname[NAME_MAX];
59
enum rnbd_access_mode access_mode;
60
};
61
62
void rnbd_srv_sess_dev_force_close(struct rnbd_srv_sess_dev *sess_dev,
63
struct kobj_attribute *attr);
64
/* rnbd-srv-sysfs.c */
65
66
int rnbd_srv_create_dev_sysfs(struct rnbd_srv_dev *dev,
67
struct block_device *bdev);
68
void rnbd_srv_destroy_dev_sysfs(struct rnbd_srv_dev *dev);
69
int rnbd_srv_create_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev);
70
void rnbd_srv_destroy_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev);
71
int rnbd_srv_create_sysfs_files(void);
72
void rnbd_srv_destroy_sysfs_files(void);
73
void rnbd_destroy_sess_dev(struct rnbd_srv_sess_dev *sess_dev, bool keep_id);
74
75
#endif /* RNBD_SRV_H */
76
77