rnbd-srv.h (2413B)
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 20struct 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 /* List of struct rnbd_srv_sess_dev */ 29 struct list_head sess_dev_list; 30 struct mutex lock; 31 u8 ver; 32}; 33 34struct rnbd_srv_dev { 35 /* Entry inside global dev_list */ 36 struct list_head list; 37 struct kobject dev_kobj; 38 struct kobject *dev_sessions_kobj; 39 struct kref kref; 40 char id[NAME_MAX]; 41 /* List of rnbd_srv_sess_dev structs */ 42 struct list_head sess_dev_list; 43 struct mutex lock; 44 int open_write_cnt; 45}; 46 47/* Structure which binds N devices and N sessions */ 48struct rnbd_srv_sess_dev { 49 /* Entry inside rnbd_srv_dev struct */ 50 struct list_head dev_list; 51 /* Entry inside rnbd_srv_session struct */ 52 struct list_head sess_list; 53 struct rnbd_dev *rnbd_dev; 54 struct rnbd_srv_session *sess; 55 struct rnbd_srv_dev *dev; 56 struct kobject kobj; 57 u32 device_id; 58 bool keep_id; 59 fmode_t open_flags; 60 struct kref kref; 61 struct completion *destroy_comp; 62 char pathname[NAME_MAX]; 63 enum rnbd_access_mode access_mode; 64}; 65 66void rnbd_srv_sess_dev_force_close(struct rnbd_srv_sess_dev *sess_dev, 67 struct kobj_attribute *attr); 68/* rnbd-srv-sysfs.c */ 69 70int rnbd_srv_create_dev_sysfs(struct rnbd_srv_dev *dev, 71 struct block_device *bdev, 72 const char *dir_name); 73void rnbd_srv_destroy_dev_sysfs(struct rnbd_srv_dev *dev); 74int rnbd_srv_create_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev); 75void rnbd_srv_destroy_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev); 76int rnbd_srv_create_sysfs_files(void); 77void rnbd_srv_destroy_sysfs_files(void); 78void rnbd_destroy_sess_dev(struct rnbd_srv_sess_dev *sess_dev, bool keep_id); 79 80#endif /* RNBD_SRV_H */