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 /* List of struct rnbd_srv_sess_dev */ 29 struct list_head sess_dev_list; 30 struct mutex lock; 31 u8 ver; 32 }; 33 34 struct 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 */ 48 struct 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 66 void rnbd_srv_sess_dev_force_close(struct rnbd_srv_sess_dev *sess_dev, 67 struct kobj_attribute *attr); 68 /* rnbd-srv-sysfs.c */ 69 70 int rnbd_srv_create_dev_sysfs(struct rnbd_srv_dev *dev, 71 struct block_device *bdev, 72 const char *dir_name); 73 void rnbd_srv_destroy_dev_sysfs(struct rnbd_srv_dev *dev); 74 int rnbd_srv_create_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev); 75 void rnbd_srv_destroy_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev); 76 int rnbd_srv_create_sysfs_files(void); 77 void rnbd_srv_destroy_sysfs_files(void); 78 void rnbd_destroy_sess_dev(struct rnbd_srv_sess_dev *sess_dev, bool keep_id); 79 80 #endif /* RNBD_SRV_H */ 81