From: Roman Pen <roman.penyaev@profitbricks.com> To: linux-block@vger.kernel.org, linux-rdma@vger.kernel.org Cc: Jens Axboe <axboe@kernel.dk>, Christoph Hellwig <hch@infradead.org>, Sagi Grimberg <sagi@grimberg.me>, Bart Van Assche <bart.vanassche@sandisk.com>, Or Gerlitz <ogerlitz@mellanox.com>, Roman Pen <roman.penyaev@profitbricks.com>, Danil Kipnis <danil.kipnis@profitbricks.com>, Jack Wang <jinpu.wang@profitbricks.com> Subject: [PATCH 21/24] ibnbd: server: sysfs interface functions Date: Fri, 2 Feb 2018 15:09:01 +0100 [thread overview] Message-ID: <20180202140904.2017-22-roman.penyaev@profitbricks.com> (raw) In-Reply-To: <20180202140904.2017-1-roman.penyaev@profitbricks.com> This is the sysfs interface to IBNBD mapped devices on server side: /sys/kernel/ibnbd_server/devices/<device_name>/ |- block_dev | *** link pointing to the corresponding block device sysfs entry | |- sessions/<session-name>/ | *** sessions directory | |- read_only | *** is devices mapped as read only | |- mapping_path *** relative device path provided by the client during mapping Signed-off-by: Roman Pen <roman.penyaev@profitbricks.com> Signed-off-by: Danil Kipnis <danil.kipnis@profitbricks.com> Cc: Jack Wang <jinpu.wang@profitbricks.com> --- drivers/block/ibnbd/ibnbd-srv-sysfs.c | 264 ++++++++++++++++++++++++++++++++++ 1 file changed, 264 insertions(+) diff --git a/drivers/block/ibnbd/ibnbd-srv-sysfs.c b/drivers/block/ibnbd/ibnbd-srv-sysfs.c new file mode 100644 index 000000000000..a0efd6a2accb --- /dev/null +++ b/drivers/block/ibnbd/ibnbd-srv-sysfs.c @@ -0,0 +1,264 @@ +/* + * InfiniBand Network Block Driver + * + * Copyright (c) 2014 - 2017 ProfitBricks GmbH. All rights reserved. + * Authors: Fabian Holler <mail@fholler.de> + * Jack Wang <jinpu.wang@profitbricks.com> + * Kleber Souza <kleber.souza@profitbricks.com> + * Danil Kipnis <danil.kipnis@profitbricks.com> + * Roman Penyaev <roman.penyaev@profitbricks.com> + * Milind Dumbare <Milind.dumbare@gmail.com> + * + * Copyright (c) 2017 - 2018 ProfitBricks GmbH. All rights reserved. + * Authors: Danil Kipnis <danil.kipnis@profitbricks.com> + * Roman Penyaev <roman.penyaev@profitbricks.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + */ + +#undef pr_fmt +#define pr_fmt(fmt) KBUILD_MODNAME " L" __stringify(__LINE__) ": " fmt + +#include <uapi/linux/limits.h> +#include <linux/kobject.h> +#include <linux/sysfs.h> +#include <linux/stat.h> +#include <linux/genhd.h> +#include <linux/list.h> +#include <linux/moduleparam.h> + +#include "ibnbd-srv.h" + +static struct kobject *ibnbd_srv_kobj; +static struct kobject *ibnbd_srv_devices_kobj; + +static struct attribute *ibnbd_srv_default_dev_attrs[] = { + NULL, +}; + +static struct attribute_group ibnbd_srv_default_dev_attr_group = { + .attrs = ibnbd_srv_default_dev_attrs, +}; + +static ssize_t ibnbd_srv_attr_show(struct kobject *kobj, struct attribute *attr, + char *page) +{ + struct kobj_attribute *kattr; + int ret = -EIO; + + kattr = container_of(attr, struct kobj_attribute, attr); + if (kattr->show) + ret = kattr->show(kobj, kattr, page); + return ret; +} + +static ssize_t ibnbd_srv_attr_store(struct kobject *kobj, + struct attribute *attr, + const char *page, size_t length) +{ + struct kobj_attribute *kattr; + int ret = -EIO; + + kattr = container_of(attr, struct kobj_attribute, attr); + if (kattr->store) + ret = kattr->store(kobj, kattr, page, length); + return ret; +} + +static const struct sysfs_ops ibnbd_srv_sysfs_ops = { + .show = ibnbd_srv_attr_show, + .store = ibnbd_srv_attr_store, +}; + +static struct kobj_type ibnbd_srv_dev_ktype = { + .sysfs_ops = &ibnbd_srv_sysfs_ops, +}; + +static struct kobj_type ibnbd_srv_dev_sessions_ktype = { + .sysfs_ops = &ibnbd_srv_sysfs_ops, +}; + +int ibnbd_srv_create_dev_sysfs(struct ibnbd_srv_dev *dev, + struct block_device *bdev, + const char *dir_name) +{ + struct kobject *bdev_kobj; + int ret; + + ret = kobject_init_and_add(&dev->dev_kobj, &ibnbd_srv_dev_ktype, + ibnbd_srv_devices_kobj, dir_name); + if (ret) + return ret; + + ret = kobject_init_and_add(&dev->dev_sessions_kobj, + &ibnbd_srv_dev_sessions_ktype, + &dev->dev_kobj, "sessions"); + if (ret) + goto err; + + ret = sysfs_create_group(&dev->dev_kobj, + &ibnbd_srv_default_dev_attr_group); + if (ret) + goto err2; + + bdev_kobj = &disk_to_dev(bdev->bd_disk)->kobj; + ret = sysfs_create_link(&dev->dev_kobj, bdev_kobj, "block_dev"); + if (ret) + goto err3; + + return 0; + +err3: + sysfs_remove_group(&dev->dev_kobj, + &ibnbd_srv_default_dev_attr_group); +err2: + kobject_del(&dev->dev_sessions_kobj); + kobject_put(&dev->dev_sessions_kobj); +err: + kobject_del(&dev->dev_kobj); + kobject_put(&dev->dev_kobj); + return ret; +} + +void ibnbd_srv_destroy_dev_sysfs(struct ibnbd_srv_dev *dev) +{ + sysfs_remove_link(&dev->dev_kobj, "block_dev"); + sysfs_remove_group(&dev->dev_kobj, &ibnbd_srv_default_dev_attr_group); + kobject_del(&dev->dev_sessions_kobj); + kobject_put(&dev->dev_sessions_kobj); + kobject_del(&dev->dev_kobj); + kobject_put(&dev->dev_kobj); +} + +static ssize_t ibnbd_srv_dev_session_ro_show(struct kobject *kobj, + struct kobj_attribute *attr, + char *page) +{ + struct ibnbd_srv_sess_dev *sess_dev; + + sess_dev = container_of(kobj, struct ibnbd_srv_sess_dev, kobj); + + return scnprintf(page, PAGE_SIZE, "%s\n", + (sess_dev->open_flags & FMODE_WRITE) ? "0" : "1"); +} + +static struct kobj_attribute ibnbd_srv_dev_session_ro_attr = + __ATTR(read_only, 0444, + ibnbd_srv_dev_session_ro_show, + NULL); + +static ssize_t +ibnbd_srv_dev_session_mapping_path_show(struct kobject *kobj, + struct kobj_attribute *attr, char *page) +{ + struct ibnbd_srv_sess_dev *sess_dev; + + sess_dev = container_of(kobj, struct ibnbd_srv_sess_dev, kobj); + + return scnprintf(page, PAGE_SIZE, "%s\n", sess_dev->pathname); +} + +static struct kobj_attribute ibnbd_srv_dev_session_mapping_path_attr = + __ATTR(mapping_path, 0444, + ibnbd_srv_dev_session_mapping_path_show, + NULL); + +static struct attribute *ibnbd_srv_default_dev_sessions_attrs[] = { + &ibnbd_srv_dev_session_ro_attr.attr, + &ibnbd_srv_dev_session_mapping_path_attr.attr, + NULL, +}; + +static struct attribute_group ibnbd_srv_default_dev_session_attr_group = { + .attrs = ibnbd_srv_default_dev_sessions_attrs, +}; + +void ibnbd_srv_destroy_dev_session_sysfs(struct ibnbd_srv_sess_dev *sess_dev) +{ + DECLARE_COMPLETION_ONSTACK(sysfs_compl); + + sysfs_remove_group(&sess_dev->kobj, + &ibnbd_srv_default_dev_session_attr_group); + + sess_dev->sysfs_release_compl = &sysfs_compl; + kobject_del(&sess_dev->kobj); + kobject_put(&sess_dev->kobj); + wait_for_completion(&sysfs_compl); +} + +static void ibnbd_srv_sess_dev_release(struct kobject *kobj) +{ + struct ibnbd_srv_sess_dev *sess_dev; + + sess_dev = container_of(kobj, struct ibnbd_srv_sess_dev, kobj); + if (sess_dev->sysfs_release_compl) + complete_all(sess_dev->sysfs_release_compl); +} + +static struct kobj_type ibnbd_srv_sess_dev_ktype = { + .sysfs_ops = &ibnbd_srv_sysfs_ops, + .release = ibnbd_srv_sess_dev_release, +}; + +int ibnbd_srv_create_dev_session_sysfs(struct ibnbd_srv_sess_dev *sess_dev) +{ + int ret; + + ret = kobject_init_and_add(&sess_dev->kobj, &ibnbd_srv_sess_dev_ktype, + &sess_dev->dev->dev_sessions_kobj, "%s", + sess_dev->sess->sessname); + if (ret) + return ret; + + ret = sysfs_create_group(&sess_dev->kobj, + &ibnbd_srv_default_dev_session_attr_group); + if (ret) + goto err; + + return 0; + +err: + kobject_del(&sess_dev->kobj); + kobject_put(&sess_dev->kobj); + + return ret; +} + +int ibnbd_srv_create_sysfs_files(void) +{ + int err; + + ibnbd_srv_kobj = kobject_create_and_add(KBUILD_MODNAME, kernel_kobj); + if (!ibnbd_srv_kobj) + return -ENOMEM; + + ibnbd_srv_devices_kobj = kobject_create_and_add("devices", + ibnbd_srv_kobj); + if (!ibnbd_srv_devices_kobj) { + err = -ENOMEM; + goto err; + } + + return 0; + +err: + kobject_put(ibnbd_srv_kobj); + return err; +} + +void ibnbd_srv_destroy_sysfs_files(void) +{ + kobject_put(ibnbd_srv_devices_kobj); + kobject_put(ibnbd_srv_kobj); +} -- 2.13.1
WARNING: multiple messages have this Message-ID (diff)
From: Roman Pen <roman.penyaev-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> To: linux-block-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Jens Axboe <axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>, Christoph Hellwig <hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>, Sagi Grimberg <sagi-NQWnxTmZq1alnMjI0IkVqw@public.gmane.org>, Bart Van Assche <bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>, Or Gerlitz <ogerlitz-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>, Roman Pen <roman.penyaev-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>, Danil Kipnis <danil.kipnis-EIkl63zCoXaH+58JC4qpiA@public.gmane.org>, Jack Wang <jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> Subject: [PATCH 21/24] ibnbd: server: sysfs interface functions Date: Fri, 2 Feb 2018 15:09:01 +0100 [thread overview] Message-ID: <20180202140904.2017-22-roman.penyaev@profitbricks.com> (raw) In-Reply-To: <20180202140904.2017-1-roman.penyaev-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> This is the sysfs interface to IBNBD mapped devices on server side: /sys/kernel/ibnbd_server/devices/<device_name>/ |- block_dev | *** link pointing to the corresponding block device sysfs entry | |- sessions/<session-name>/ | *** sessions directory | |- read_only | *** is devices mapped as read only | |- mapping_path *** relative device path provided by the client during mapping Signed-off-by: Roman Pen <roman.penyaev-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> Signed-off-by: Danil Kipnis <danil.kipnis-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> Cc: Jack Wang <jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> --- drivers/block/ibnbd/ibnbd-srv-sysfs.c | 264 ++++++++++++++++++++++++++++++++++ 1 file changed, 264 insertions(+) diff --git a/drivers/block/ibnbd/ibnbd-srv-sysfs.c b/drivers/block/ibnbd/ibnbd-srv-sysfs.c new file mode 100644 index 000000000000..a0efd6a2accb --- /dev/null +++ b/drivers/block/ibnbd/ibnbd-srv-sysfs.c @@ -0,0 +1,264 @@ +/* + * InfiniBand Network Block Driver + * + * Copyright (c) 2014 - 2017 ProfitBricks GmbH. All rights reserved. + * Authors: Fabian Holler <mail-99BIx50xQYGELgA04lAiVw@public.gmane.org> + * Jack Wang <jinpu.wang-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> + * Kleber Souza <kleber.souza-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> + * Danil Kipnis <danil.kipnis-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> + * Roman Penyaev <roman.penyaev-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> + * Milind Dumbare <Milind.dumbare-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> + * + * Copyright (c) 2017 - 2018 ProfitBricks GmbH. All rights reserved. + * Authors: Danil Kipnis <danil.kipnis-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> + * Roman Penyaev <roman.penyaev-EIkl63zCoXaH+58JC4qpiA@public.gmane.org> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + */ + +#undef pr_fmt +#define pr_fmt(fmt) KBUILD_MODNAME " L" __stringify(__LINE__) ": " fmt + +#include <uapi/linux/limits.h> +#include <linux/kobject.h> +#include <linux/sysfs.h> +#include <linux/stat.h> +#include <linux/genhd.h> +#include <linux/list.h> +#include <linux/moduleparam.h> + +#include "ibnbd-srv.h" + +static struct kobject *ibnbd_srv_kobj; +static struct kobject *ibnbd_srv_devices_kobj; + +static struct attribute *ibnbd_srv_default_dev_attrs[] = { + NULL, +}; + +static struct attribute_group ibnbd_srv_default_dev_attr_group = { + .attrs = ibnbd_srv_default_dev_attrs, +}; + +static ssize_t ibnbd_srv_attr_show(struct kobject *kobj, struct attribute *attr, + char *page) +{ + struct kobj_attribute *kattr; + int ret = -EIO; + + kattr = container_of(attr, struct kobj_attribute, attr); + if (kattr->show) + ret = kattr->show(kobj, kattr, page); + return ret; +} + +static ssize_t ibnbd_srv_attr_store(struct kobject *kobj, + struct attribute *attr, + const char *page, size_t length) +{ + struct kobj_attribute *kattr; + int ret = -EIO; + + kattr = container_of(attr, struct kobj_attribute, attr); + if (kattr->store) + ret = kattr->store(kobj, kattr, page, length); + return ret; +} + +static const struct sysfs_ops ibnbd_srv_sysfs_ops = { + .show = ibnbd_srv_attr_show, + .store = ibnbd_srv_attr_store, +}; + +static struct kobj_type ibnbd_srv_dev_ktype = { + .sysfs_ops = &ibnbd_srv_sysfs_ops, +}; + +static struct kobj_type ibnbd_srv_dev_sessions_ktype = { + .sysfs_ops = &ibnbd_srv_sysfs_ops, +}; + +int ibnbd_srv_create_dev_sysfs(struct ibnbd_srv_dev *dev, + struct block_device *bdev, + const char *dir_name) +{ + struct kobject *bdev_kobj; + int ret; + + ret = kobject_init_and_add(&dev->dev_kobj, &ibnbd_srv_dev_ktype, + ibnbd_srv_devices_kobj, dir_name); + if (ret) + return ret; + + ret = kobject_init_and_add(&dev->dev_sessions_kobj, + &ibnbd_srv_dev_sessions_ktype, + &dev->dev_kobj, "sessions"); + if (ret) + goto err; + + ret = sysfs_create_group(&dev->dev_kobj, + &ibnbd_srv_default_dev_attr_group); + if (ret) + goto err2; + + bdev_kobj = &disk_to_dev(bdev->bd_disk)->kobj; + ret = sysfs_create_link(&dev->dev_kobj, bdev_kobj, "block_dev"); + if (ret) + goto err3; + + return 0; + +err3: + sysfs_remove_group(&dev->dev_kobj, + &ibnbd_srv_default_dev_attr_group); +err2: + kobject_del(&dev->dev_sessions_kobj); + kobject_put(&dev->dev_sessions_kobj); +err: + kobject_del(&dev->dev_kobj); + kobject_put(&dev->dev_kobj); + return ret; +} + +void ibnbd_srv_destroy_dev_sysfs(struct ibnbd_srv_dev *dev) +{ + sysfs_remove_link(&dev->dev_kobj, "block_dev"); + sysfs_remove_group(&dev->dev_kobj, &ibnbd_srv_default_dev_attr_group); + kobject_del(&dev->dev_sessions_kobj); + kobject_put(&dev->dev_sessions_kobj); + kobject_del(&dev->dev_kobj); + kobject_put(&dev->dev_kobj); +} + +static ssize_t ibnbd_srv_dev_session_ro_show(struct kobject *kobj, + struct kobj_attribute *attr, + char *page) +{ + struct ibnbd_srv_sess_dev *sess_dev; + + sess_dev = container_of(kobj, struct ibnbd_srv_sess_dev, kobj); + + return scnprintf(page, PAGE_SIZE, "%s\n", + (sess_dev->open_flags & FMODE_WRITE) ? "0" : "1"); +} + +static struct kobj_attribute ibnbd_srv_dev_session_ro_attr = + __ATTR(read_only, 0444, + ibnbd_srv_dev_session_ro_show, + NULL); + +static ssize_t +ibnbd_srv_dev_session_mapping_path_show(struct kobject *kobj, + struct kobj_attribute *attr, char *page) +{ + struct ibnbd_srv_sess_dev *sess_dev; + + sess_dev = container_of(kobj, struct ibnbd_srv_sess_dev, kobj); + + return scnprintf(page, PAGE_SIZE, "%s\n", sess_dev->pathname); +} + +static struct kobj_attribute ibnbd_srv_dev_session_mapping_path_attr = + __ATTR(mapping_path, 0444, + ibnbd_srv_dev_session_mapping_path_show, + NULL); + +static struct attribute *ibnbd_srv_default_dev_sessions_attrs[] = { + &ibnbd_srv_dev_session_ro_attr.attr, + &ibnbd_srv_dev_session_mapping_path_attr.attr, + NULL, +}; + +static struct attribute_group ibnbd_srv_default_dev_session_attr_group = { + .attrs = ibnbd_srv_default_dev_sessions_attrs, +}; + +void ibnbd_srv_destroy_dev_session_sysfs(struct ibnbd_srv_sess_dev *sess_dev) +{ + DECLARE_COMPLETION_ONSTACK(sysfs_compl); + + sysfs_remove_group(&sess_dev->kobj, + &ibnbd_srv_default_dev_session_attr_group); + + sess_dev->sysfs_release_compl = &sysfs_compl; + kobject_del(&sess_dev->kobj); + kobject_put(&sess_dev->kobj); + wait_for_completion(&sysfs_compl); +} + +static void ibnbd_srv_sess_dev_release(struct kobject *kobj) +{ + struct ibnbd_srv_sess_dev *sess_dev; + + sess_dev = container_of(kobj, struct ibnbd_srv_sess_dev, kobj); + if (sess_dev->sysfs_release_compl) + complete_all(sess_dev->sysfs_release_compl); +} + +static struct kobj_type ibnbd_srv_sess_dev_ktype = { + .sysfs_ops = &ibnbd_srv_sysfs_ops, + .release = ibnbd_srv_sess_dev_release, +}; + +int ibnbd_srv_create_dev_session_sysfs(struct ibnbd_srv_sess_dev *sess_dev) +{ + int ret; + + ret = kobject_init_and_add(&sess_dev->kobj, &ibnbd_srv_sess_dev_ktype, + &sess_dev->dev->dev_sessions_kobj, "%s", + sess_dev->sess->sessname); + if (ret) + return ret; + + ret = sysfs_create_group(&sess_dev->kobj, + &ibnbd_srv_default_dev_session_attr_group); + if (ret) + goto err; + + return 0; + +err: + kobject_del(&sess_dev->kobj); + kobject_put(&sess_dev->kobj); + + return ret; +} + +int ibnbd_srv_create_sysfs_files(void) +{ + int err; + + ibnbd_srv_kobj = kobject_create_and_add(KBUILD_MODNAME, kernel_kobj); + if (!ibnbd_srv_kobj) + return -ENOMEM; + + ibnbd_srv_devices_kobj = kobject_create_and_add("devices", + ibnbd_srv_kobj); + if (!ibnbd_srv_devices_kobj) { + err = -ENOMEM; + goto err; + } + + return 0; + +err: + kobject_put(ibnbd_srv_kobj); + return err; +} + +void ibnbd_srv_destroy_sysfs_files(void) +{ + kobject_put(ibnbd_srv_devices_kobj); + kobject_put(ibnbd_srv_kobj); +} -- 2.13.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2018-02-02 14:09 UTC|newest] Thread overview: 124+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-02-02 14:08 [PATCH 00/24] InfiniBand Transport (IBTRS) and Network Block Device (IBNBD) Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-02 14:08 ` [PATCH 01/24] ibtrs: public interface header to establish RDMA connections Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-02 14:08 ` [PATCH 02/24] ibtrs: private headers with IBTRS protocol structs and helpers Roman Pen 2018-02-02 14:08 ` [PATCH 03/24] ibtrs: core: lib functions shared between client and server modules Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-05 10:52 ` Sagi Grimberg 2018-02-06 12:01 ` Roman Penyaev 2018-02-06 16:10 ` Jason Gunthorpe 2018-02-07 10:34 ` Roman Penyaev 2018-02-07 10:34 ` Roman Penyaev 2018-02-02 14:08 ` [PATCH 04/24] ibtrs: client: private header with client structs and functions Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-05 10:59 ` Sagi Grimberg 2018-02-05 10:59 ` Sagi Grimberg 2018-02-06 12:23 ` Roman Penyaev 2018-02-02 14:08 ` [PATCH 05/24] ibtrs: client: main functionality Roman Pen 2018-02-02 16:54 ` Bart Van Assche 2018-02-02 16:54 ` Bart Van Assche 2018-02-05 13:27 ` Roman Penyaev 2018-02-05 14:14 ` Sagi Grimberg 2018-02-05 14:14 ` Sagi Grimberg 2018-02-05 17:05 ` Roman Penyaev 2018-02-05 17:05 ` Roman Penyaev 2018-02-05 11:19 ` Sagi Grimberg 2018-02-05 14:19 ` Roman Penyaev 2018-02-05 14:19 ` Roman Penyaev 2018-02-05 16:24 ` Bart Van Assche 2018-02-05 16:24 ` Bart Van Assche 2018-02-02 14:08 ` [PATCH 06/24] ibtrs: client: statistics functions Roman Pen 2018-02-02 14:08 ` [PATCH 07/24] ibtrs: client: sysfs interface functions Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-05 11:20 ` Sagi Grimberg 2018-02-05 11:20 ` Sagi Grimberg 2018-02-06 12:28 ` Roman Penyaev 2018-02-02 14:08 ` [PATCH 08/24] ibtrs: server: private header with server structs and functions Roman Pen 2018-02-02 14:08 ` [PATCH 09/24] ibtrs: server: main functionality Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-05 11:29 ` Sagi Grimberg 2018-02-05 11:29 ` Sagi Grimberg 2018-02-06 12:46 ` Roman Penyaev 2018-02-02 14:08 ` [PATCH 10/24] ibtrs: server: statistics functions Roman Pen 2018-02-02 14:08 ` [PATCH 11/24] ibtrs: server: sysfs interface functions Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-02 14:08 ` [PATCH 12/24] ibtrs: include client and server modules into kernel compilation Roman Pen 2018-02-02 14:08 ` [PATCH 13/24] ibtrs: a bit of documentation Roman Pen 2018-02-02 14:08 ` [PATCH 14/24] ibnbd: private headers with IBNBD protocol structs and helpers Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-02 14:08 ` [PATCH 15/24] ibnbd: client: private header with client structs and functions Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-02 14:08 ` [PATCH 16/24] ibnbd: client: main functionality Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-02 15:11 ` Jens Axboe 2018-02-02 15:11 ` Jens Axboe 2018-02-05 12:54 ` Roman Penyaev 2018-02-02 14:08 ` [PATCH 17/24] ibnbd: client: sysfs interface functions Roman Pen 2018-02-02 14:08 ` Roman Pen 2018-02-02 14:08 ` [PATCH 18/24] ibnbd: server: private header with server structs and functions Roman Pen 2018-02-02 14:08 ` [PATCH 19/24] ibnbd: server: main functionality Roman Pen 2018-02-02 14:09 ` [PATCH 20/24] ibnbd: server: functionality for IO submission to file or block dev Roman Pen 2018-02-02 14:09 ` Roman Pen 2018-02-02 14:09 ` Roman Pen [this message] 2018-02-02 14:09 ` [PATCH 21/24] ibnbd: server: sysfs interface functions Roman Pen 2018-02-02 14:09 ` [PATCH 22/24] ibnbd: include client and server modules into kernel compilation Roman Pen 2018-02-02 14:09 ` [PATCH 23/24] ibnbd: a bit of documentation Roman Pen 2018-02-02 14:09 ` Roman Pen 2018-02-02 15:55 ` Bart Van Assche 2018-02-02 15:55 ` Bart Van Assche 2018-02-05 13:03 ` Roman Penyaev 2018-02-05 14:16 ` Sagi Grimberg 2018-02-02 14:09 ` [PATCH 24/24] MAINTAINERS: Add maintainer for IBNBD/IBTRS modules Roman Pen 2018-02-02 16:07 ` [PATCH 00/24] InfiniBand Transport (IBTRS) and Network Block Device (IBNBD) Bart Van Assche 2018-02-02 16:07 ` Bart Van Assche 2018-02-02 16:40 ` Doug Ledford 2018-02-02 16:40 ` Doug Ledford 2018-02-05 8:45 ` Jinpu Wang 2018-02-05 8:45 ` Jinpu Wang 2018-06-04 12:14 ` Danil Kipnis 2018-02-02 17:05 ` Bart Van Assche 2018-02-02 17:05 ` Bart Van Assche 2018-02-05 8:56 ` Jinpu Wang 2018-02-05 11:36 ` Sagi Grimberg 2018-02-05 13:38 ` Danil Kipnis 2018-02-05 13:38 ` Danil Kipnis 2018-02-05 14:17 ` Sagi Grimberg 2018-02-05 16:40 ` Danil Kipnis 2018-02-05 18:38 ` Bart Van Assche 2018-02-06 9:44 ` Danil Kipnis 2018-02-06 9:44 ` Danil Kipnis 2018-02-06 15:35 ` Bart Van Assche 2018-02-06 15:35 ` Bart Van Assche 2018-02-05 16:16 ` Bart Van Assche 2018-02-05 16:16 ` Bart Van Assche 2018-02-05 16:36 ` Jinpu Wang 2018-02-05 16:36 ` Jinpu Wang 2018-02-07 16:35 ` Christopher Lameter 2018-02-07 17:18 ` Roman Penyaev 2018-02-07 17:32 ` Bart Van Assche 2018-02-07 17:32 ` Bart Van Assche 2018-02-08 17:38 ` Danil Kipnis 2018-02-08 17:38 ` Danil Kipnis 2018-02-08 18:09 ` Bart Van Assche 2018-02-08 18:09 ` Bart Van Assche 2018-06-04 12:27 ` Danil Kipnis 2018-02-05 12:16 ` Sagi Grimberg 2018-02-05 12:16 ` Sagi Grimberg 2018-02-05 12:30 ` Sagi Grimberg 2018-02-07 13:06 ` Roman Penyaev 2018-02-07 13:06 ` Roman Penyaev 2018-02-05 16:58 ` Bart Van Assche 2018-02-05 16:58 ` Bart Van Assche 2018-02-05 17:16 ` Roman Penyaev 2018-02-05 17:20 ` Bart Van Assche 2018-02-05 17:20 ` Bart Van Assche 2018-02-06 11:47 ` Roman Penyaev 2018-02-06 13:12 ` Roman Penyaev 2018-02-06 13:12 ` Roman Penyaev 2018-02-06 16:01 ` Bart Van Assche 2018-02-06 16:01 ` Bart Van Assche 2018-02-07 12:57 ` Roman Penyaev 2018-02-07 12:57 ` Roman Penyaev 2018-02-07 16:35 ` Bart Van Assche 2018-02-07 16:35 ` Bart Van Assche
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180202140904.2017-22-roman.penyaev@profitbricks.com \ --to=roman.penyaev@profitbricks.com \ --cc=axboe@kernel.dk \ --cc=bart.vanassche@sandisk.com \ --cc=danil.kipnis@profitbricks.com \ --cc=hch@infradead.org \ --cc=jinpu.wang@profitbricks.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-rdma@vger.kernel.org \ --cc=ogerlitz@mellanox.com \ --cc=sagi@grimberg.me \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.