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