Message ID | 20200427141020.655-20-danil.kipnis@cloud.ionos.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | RTRS (former IBTRS) RDMA Transport Library and RNBD (former IBNBD) RDMA Network Block Device | expand |
On Mon, Apr 27, 2020 at 04:10:14PM +0200, Danil Kipnis wrote: > From: Jack Wang <jinpu.wang@cloud.ionos.com> > > This header describes main structs and functions used by rnbd-server > module, namely structs for managing sessions from different clients > and mapped (opened) devices. > > Signed-off-by: Danil Kipnis <danil.kipnis@cloud.ionos.com> > Signed-off-by: Jack Wang <jinpu.wang@cloud.ionos.com> > Reviewed-by: Bart Van Assche <bvanassche@acm.org> > drivers/block/rnbd/rnbd-srv.h | 79 +++++++++++++++++++++++++++++++++++ > 1 file changed, 79 insertions(+) > create mode 100644 drivers/block/rnbd/rnbd-srv.h > > diff --git a/drivers/block/rnbd/rnbd-srv.h b/drivers/block/rnbd/rnbd-srv.h > new file mode 100644 > index 000000000000..89218024325d > +++ b/drivers/block/rnbd/rnbd-srv.h > @@ -0,0 +1,79 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +/* > + * RDMA Network Block Driver > + * > + * Copyright (c) 2014 - 2018 ProfitBricks GmbH. All rights reserved. > + * Copyright (c) 2018 - 2019 1&1 IONOS Cloud GmbH. All rights reserved. > + * Copyright (c) 2019 - 2020 1&1 IONOS SE. All rights reserved. > + */ > +#ifndef RNBD_SRV_H > +#define RNBD_SRV_H > + > +#include <linux/types.h> > +#include <linux/idr.h> > +#include <linux/kref.h> > + > +#include "rtrs.h" > +#include "rnbd-proto.h" > +#include "rnbd-log.h" > + > +struct rnbd_srv_session { > + /* Entry inside global sess_list */ > + struct list_head list; > + struct rtrs_srv *rtrs; > + char sessname[NAME_MAX]; > + int queue_depth; > + struct bio_set sess_bio_set; > + > + spinlock_t index_lock ____cacheline_aligned; > + struct idr index_idr; No new users of idr, use xarray. Also no users of radix tree if there are any in here.. Jason
On Wed, Apr 29, 2020 at 7:20 PM Jason Gunthorpe <jgg@ziepe.ca> wrote: > > On Mon, Apr 27, 2020 at 04:10:14PM +0200, Danil Kipnis wrote: > > + struct idr index_idr; > > No new users of idr, use xarray. > > Also no users of radix tree if there are any in here.. We don't use radiy tree. Will look into xarray to replace idr. Thank you.
diff --git a/drivers/block/rnbd/rnbd-srv.h b/drivers/block/rnbd/rnbd-srv.h new file mode 100644 index 000000000000..89218024325d --- /dev/null +++ b/drivers/block/rnbd/rnbd-srv.h @@ -0,0 +1,79 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * RDMA Network Block Driver + * + * Copyright (c) 2014 - 2018 ProfitBricks GmbH. All rights reserved. + * Copyright (c) 2018 - 2019 1&1 IONOS Cloud GmbH. All rights reserved. + * Copyright (c) 2019 - 2020 1&1 IONOS SE. All rights reserved. + */ +#ifndef RNBD_SRV_H +#define RNBD_SRV_H + +#include <linux/types.h> +#include <linux/idr.h> +#include <linux/kref.h> + +#include "rtrs.h" +#include "rnbd-proto.h" +#include "rnbd-log.h" + +struct rnbd_srv_session { + /* Entry inside global sess_list */ + struct list_head list; + struct rtrs_srv *rtrs; + char sessname[NAME_MAX]; + int queue_depth; + struct bio_set sess_bio_set; + + spinlock_t index_lock ____cacheline_aligned; + struct idr index_idr; + /* List of struct rnbd_srv_sess_dev */ + struct list_head sess_dev_list; + struct mutex lock; + u8 ver; +}; + +struct rnbd_srv_dev { + /* Entry inside global dev_list */ + struct list_head list; + struct kobject dev_kobj; + struct kobject *dev_sessions_kobj; + struct kref kref; + char id[NAME_MAX]; + /* List of rnbd_srv_sess_dev structs */ + struct list_head sess_dev_list; + struct mutex lock; + int open_write_cnt; +}; + +/* Structure which binds N devices and N sessions */ +struct rnbd_srv_sess_dev { + /* Entry inside rnbd_srv_dev struct */ + struct list_head dev_list; + /* Entry inside rnbd_srv_session struct */ + struct list_head sess_list; + struct rnbd_dev *rnbd_dev; + struct rnbd_srv_session *sess; + struct rnbd_srv_dev *dev; + struct kobject kobj; + u32 device_id; + fmode_t open_flags; + struct kref kref; + struct completion *destroy_comp; + char pathname[NAME_MAX]; + enum rnbd_access_mode access_mode; +}; + +/* rnbd-srv-sysfs.c */ + +int rnbd_srv_create_dev_sysfs(struct rnbd_srv_dev *dev, + struct block_device *bdev, + const char *dir_name); +void rnbd_srv_destroy_dev_sysfs(struct rnbd_srv_dev *dev); +int rnbd_srv_create_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev); +void rnbd_srv_destroy_dev_session_sysfs(struct rnbd_srv_sess_dev *sess_dev); +int rnbd_srv_create_sysfs_files(void); +void rnbd_srv_destroy_sysfs_files(void); +void rnbd_destroy_sess_dev(struct rnbd_srv_sess_dev *sess_dev); + +#endif /* RNBD_SRV_H */