0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef RNBD_SRV_H
0010 #define RNBD_SRV_H
0011
0012 #include <linux/types.h>
0013 #include <linux/idr.h>
0014 #include <linux/kref.h>
0015
0016 #include <rtrs.h>
0017 #include "rnbd-proto.h"
0018 #include "rnbd-log.h"
0019
0020 struct rnbd_srv_session {
0021
0022 struct list_head list;
0023 struct rtrs_srv_sess *rtrs;
0024 char sessname[NAME_MAX];
0025 int queue_depth;
0026
0027 struct xarray index_idr;
0028 struct mutex lock;
0029 u8 ver;
0030 };
0031
0032 struct rnbd_srv_dev {
0033
0034 struct list_head list;
0035 struct kobject dev_kobj;
0036 struct kobject *dev_sessions_kobj;
0037 struct kref kref;
0038 char id[NAME_MAX];
0039
0040 struct list_head sess_dev_list;
0041 struct mutex lock;
0042 int open_write_cnt;
0043 };
0044
0045
0046 struct rnbd_srv_sess_dev {
0047
0048 struct list_head dev_list;
0049 struct rnbd_dev *rnbd_dev;
0050 struct rnbd_srv_session *sess;
0051 struct rnbd_srv_dev *dev;
0052 struct kobject kobj;
0053 u32 device_id;
0054 bool keep_id;
0055 fmode_t open_flags;
0056 struct kref kref;
0057 struct completion *destroy_comp;
0058 char pathname[NAME_MAX];
0059 enum rnbd_access_mode access_mode;
0060 };
0061
0062 void rnbd_srv_sess_dev_force_close(struct rnbd_srv_sess_dev *sess_dev,
0063 struct kobj_attribute *attr);
0064
0065
0066 int rnbd_srv_create_dev_sysfs(struct rnbd_srv_dev *dev,
0067 struct block_device *bdev);
0068 void rnbd_srv_destroy_dev_sysfs(struct rnbd_srv_dev *dev);
0069 int rnbd_srv_create_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev);
0070 void rnbd_srv_destroy_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev);
0071 int rnbd_srv_create_sysfs_files(void);
0072 void rnbd_srv_destroy_sysfs_files(void);
0073 void rnbd_destroy_sess_dev(struct rnbd_srv_sess_dev *sess_dev, bool keep_id);
0074
0075 #endif