All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Andreas Hindborg (Samsung)" <nmi@metaspace.dk>
To: Damien Le Moal <dlemoal@kernel.org>
Cc: Ming Lei <ming.lei@redhat.com>,
	open list <linux-kernel@vger.kernel.org>,
	Matias Bjorling <Matias.Bjorling@wdc.com>,
	Hans Holmberg <Hans.Holmberg@wdc.com>,
	Jens Axboe <axboe@kernel.dk>, Minwoo Im <minwoo.im.dev@gmail.com>,
	Aravind Ramesh <Aravind.Ramesh@wdc.com>,
	gost.dev@samsung.com,
	"open list:BLOCK LAYER" <linux-block@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>
Subject: Re: [PATCH v5 2/5] ublk: move types to shared header file
Date: Wed, 05 Jul 2023 12:50:28 +0200	[thread overview]
Message-ID: <875y6yd3wz.fsf@metaspace.dk> (raw)
In-Reply-To: <b5dbd5e0-417d-e33b-baf0-b6109882bc3a@kernel.org>


Damien Le Moal <dlemoal@kernel.org> writes:

> On 7/5/23 01:52, Andreas Hindborg wrote:
>> From: Andreas Hindborg <a.hindborg@samsung.com>
>> 
>> This change is in preparation for ublk zoned storage support.
>> 
>> Signed-off-by: Andreas Hindborg <a.hindborg@samsung.com>
>
> A couple of nits below. Otherwise looks OK to me.
>
> Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
>
> That said, your patch 5 still adds ublk-zoned.c, which Christoph commented that
> this may not be needed given that zone support does not add that much code.
> Without introducing this new file, this patch, as well as patch 3 would not be
> needed and patch 5 would be simplified a little.
>
> If you really prefer (or Ming does) having the zone code separated, I would
> suggest moving the ublk driver under its own "ublk" directory under
> drivers/block/ (similarly to nullblk). That would simplify the Kconfig too.

I am fine either way. I don't think Ming commented on this. It seems
both you and Christoph prefer just the 1 translation unit, so I might as
well change it back to that.

BR Andreas

>
>> ---
>>  MAINTAINERS              |   1 +
>>  drivers/block/ublk_drv.c |  92 +---------------------------------
>>  drivers/block/ublk_drv.h | 103 +++++++++++++++++++++++++++++++++++++++
>>  3 files changed, 105 insertions(+), 91 deletions(-)
>>  create mode 100644 drivers/block/ublk_drv.h
>> 
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 27ef11624748..ace71c90751c 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -21554,6 +21554,7 @@ L:	linux-block@vger.kernel.org
>>  S:	Maintained
>>  F:	Documentation/block/ublk.rst
>>  F:	drivers/block/ublk_drv.c
>> +F:	drivers/block/ublk_drv.h
>>  F:	include/uapi/linux/ublk_cmd.h
>>  
>>  UCLINUX (M68KNOMMU AND COLDFIRE)
>> diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
>> index 1c823750c95a..bca0c4e1cfd8 100644
>> --- a/drivers/block/ublk_drv.c
>> +++ b/drivers/block/ublk_drv.c
>> @@ -45,6 +45,7 @@
>>  #include <linux/namei.h>
>>  #include <linux/kref.h>
>>  #include <uapi/linux/ublk_cmd.h>
>> +#include "ublk_drv.h"
>>  
>>  #define UBLK_MINORS		(1U << MINORBITS)
>>  
>> @@ -62,63 +63,11 @@
>>  #define UBLK_PARAM_TYPE_ALL (UBLK_PARAM_TYPE_BASIC | \
>>  		UBLK_PARAM_TYPE_DISCARD | UBLK_PARAM_TYPE_DEVT)
>>  
>> -struct ublk_rq_data {
>> -	struct llist_node node;
>> -
>> -	struct kref ref;
>> -};
>>  
>>  struct ublk_uring_cmd_pdu {
>>  	struct ublk_queue *ubq;
>>  };
>>  
>> -/*
>> - * io command is active: sqe cmd is received, and its cqe isn't done
>> - *
>> - * If the flag is set, the io command is owned by ublk driver, and waited
>> - * for incoming blk-mq request from the ublk block device.
>> - *
>> - * If the flag is cleared, the io command will be completed, and owned by
>> - * ublk server.
>> - */
>> -#define UBLK_IO_FLAG_ACTIVE	0x01
>> -
>> -/*
>> - * IO command is completed via cqe, and it is being handled by ublksrv, and
>> - * not committed yet
>> - *
>> - * Basically exclusively with UBLK_IO_FLAG_ACTIVE, so can be served for
>> - * cross verification
>> - */
>> -#define UBLK_IO_FLAG_OWNED_BY_SRV 0x02
>> -
>> -/*
>> - * IO command is aborted, so this flag is set in case of
>> - * !UBLK_IO_FLAG_ACTIVE.
>> - *
>> - * After this flag is observed, any pending or new incoming request
>> - * associated with this io command will be failed immediately
>> - */
>> -#define UBLK_IO_FLAG_ABORTED 0x04
>> -
>> -/*
>> - * UBLK_IO_FLAG_NEED_GET_DATA is set because IO command requires
>> - * get data buffer address from ublksrv.
>> - *
>> - * Then, bio data could be copied into this data buffer for a WRITE request
>> - * after the IO command is issued again and UBLK_IO_FLAG_NEED_GET_DATA is unset.
>> - */
>> -#define UBLK_IO_FLAG_NEED_GET_DATA 0x08
>> -
>> -struct ublk_io {
>> -	/* userspace buffer address from io cmd */
>> -	__u64	addr;
>> -	unsigned int flags;
>> -	int res;
>> -
>> -	struct io_uring_cmd *cmd;
>> -};
>> -
>>  struct ublk_queue {
>>  	int q_id;
>>  	int q_depth;
>> @@ -140,45 +89,6 @@ struct ublk_queue {
>>  
>>  #define UBLK_DAEMON_MONITOR_PERIOD	(5 * HZ)
>>  
>> -struct ublk_device {
>> -	struct gendisk		*ub_disk;
>> -
>> -	char	*__queues;
>> -
>> -	unsigned int	queue_size;
>> -	struct ublksrv_ctrl_dev_info	dev_info;
>> -
>> -	struct blk_mq_tag_set	tag_set;
>> -
>> -	struct cdev		cdev;
>> -	struct device		cdev_dev;
>> -
>> -#define UB_STATE_OPEN		0
>> -#define UB_STATE_USED		1
>> -#define UB_STATE_DELETED	2
>> -	unsigned long		state;
>> -	int			ub_number;
>> -
>> -	struct mutex		mutex;
>> -
>> -	spinlock_t		mm_lock;
>> -	struct mm_struct	*mm;
>> -
>> -	struct ublk_params	params;
>> -
>> -	struct completion	completion;
>> -	unsigned int		nr_queues_ready;
>> -	unsigned int		nr_privileged_daemon;
>> -
>> -	/*
>> -	 * Our ubq->daemon may be killed without any notification, so
>> -	 * monitor each queue's daemon periodically
>> -	 */
>> -	struct delayed_work	monitor_work;
>> -	struct work_struct	quiesce_work;
>> -	struct work_struct	stop_work;
>> -};
>> -
>>  /* header of ublk_params */
>>  struct ublk_params_header {
>>  	__u32	len;
>> diff --git a/drivers/block/ublk_drv.h b/drivers/block/ublk_drv.h
>> new file mode 100644
>> index 000000000000..2a4ab721d513
>> --- /dev/null
>> +++ b/drivers/block/ublk_drv.h
>> @@ -0,0 +1,103 @@
>> +/* SPDX-License-Identifier: GPL-2.0 */
>> +
>> +#ifndef _UBLK_DRV_H
>> +#define _UBLK_DRV_H
>
> Nit: I think you can drop the leading "_".
>
>> +
>> +#include <uapi/linux/ublk_cmd.h>
>> +#include <linux/blk-mq.h>
>> +#include <linux/cdev.h>
>> +
>> +/*
>> + * io command is active: sqe cmd is received, and its cqe isn't done
>> + *
>> + * If the flag is set, the io command is owned by ublk driver, and waited
>> + * for incoming blk-mq request from the ublk block device.
>> + *
>> + * If the flag is cleared, the io command will be completed, and owned by
>> + * ublk server.
>> + */
>> +#define UBLK_IO_FLAG_ACTIVE	0x01
>> +
>> +/*
>> + * IO command is completed via cqe, and it is being handled by ublksrv, and
>> + * not committed yet
>> + *
>> + * Basically exclusively with UBLK_IO_FLAG_ACTIVE, so can be served for
>> + * cross verification
>> + */
>> +#define UBLK_IO_FLAG_OWNED_BY_SRV 0x02
>> +
>> +/*
>> + * IO command is aborted, so this flag is set in case of
>> + * !UBLK_IO_FLAG_ACTIVE.
>> + *
>> + * After this flag is observed, any pending or new incoming request
>> + * associated with this io command will be failed immediately
>> + */
>> +#define UBLK_IO_FLAG_ABORTED 0x04
>> +
>> +/*
>> + * UBLK_IO_FLAG_NEED_GET_DATA is set because IO command requires
>> + * get data buffer address from ublksrv.
>> + *
>> + * Then, bio data could be copied into this data buffer for a WRITE request
>> + * after the IO command is issued again and UBLK_IO_FLAG_NEED_GET_DATA is unset.
>> + */
>> +#define UBLK_IO_FLAG_NEED_GET_DATA 0x08
>> +
>> +
>
> Nit: extra blank line not needed.
>
>> +struct ublk_device {
>> +	struct gendisk		*ub_disk;
>> +
>> +	char	*__queues;
>> +
>> +	unsigned int	queue_size;
>> +	struct ublksrv_ctrl_dev_info	dev_info;
>> +
>> +	struct blk_mq_tag_set	tag_set;
>> +
>> +	struct cdev		cdev;
>> +	struct device		cdev_dev;
>> +
>> +#define UB_STATE_OPEN		0
>> +#define UB_STATE_USED		1
>> +#define UB_STATE_DELETED	2
>> +	unsigned long		state;
>> +	int			ub_number;
>> +
>> +	struct mutex		mutex;
>> +
>> +	spinlock_t		mm_lock;
>> +	struct mm_struct	*mm;
>> +
>> +	struct ublk_params	params;
>> +
>> +	struct completion	completion;
>> +	unsigned int		nr_queues_ready;
>> +	unsigned int		nr_privileged_daemon;
>> +
>> +	/*
>> +	 * Our ubq->daemon may be killed without any notification, so
>> +	 * monitor each queue's daemon periodically
>> +	 */
>> +	struct delayed_work	monitor_work;
>> +	struct work_struct	quiesce_work;
>> +	struct work_struct	stop_work;
>> +};
>> +
>> +struct ublk_rq_data {
>> +	struct llist_node node;
>> +
>> +	struct kref ref;
>> +};
>> +
>> +struct ublk_io {
>> +	/* userspace buffer address from io cmd */
>> +	__u64 addr;
>> +	unsigned int flags;
>> +	int res;
>> +
>> +	struct io_uring_cmd *cmd;
>> +};
>> +
>> +#endif


  reply	other threads:[~2023-07-05 10:54 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-04 16:52 [PATCH v5 0/5] ublk: enable zoned storage support Andreas Hindborg
2023-07-04 16:52 ` [PATCH v5 1/5] ublk: add opcode offsets for DRV_IN/DRV_OUT Andreas Hindborg
2023-07-04 23:33   ` Damien Le Moal
2023-07-04 16:52 ` [PATCH v5 2/5] ublk: move types to shared header file Andreas Hindborg
2023-07-04 23:42   ` Damien Le Moal
2023-07-05 10:50     ` Andreas Hindborg (Samsung) [this message]
2023-07-04 16:52 ` [PATCH v5 3/5] ublk: rename driver files to prepare for multiple translation units Andreas Hindborg
2023-07-04 23:43   ` Damien Le Moal
2023-07-04 16:52 ` [PATCH v5 4/5] ublk: add helper to check if device supports user copy Andreas Hindborg
2023-07-04 23:43   ` Damien Le Moal
2023-07-04 16:52 ` [PATCH v5 5/5] ublk: enable zoned storage support Andreas Hindborg
2023-07-04 22:15   ` kernel test robot
2023-07-05  0:11   ` kernel test robot
2023-07-05  1:00   ` Damien Le Moal
2023-07-05  8:29     ` Andreas Hindborg (Samsung)

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=875y6yd3wz.fsf@metaspace.dk \
    --to=nmi@metaspace.dk \
    --cc=Aravind.Ramesh@wdc.com \
    --cc=Hans.Holmberg@wdc.com \
    --cc=Matias.Bjorling@wdc.com \
    --cc=axboe@kernel.dk \
    --cc=dlemoal@kernel.org \
    --cc=gost.dev@samsung.com \
    --cc=hch@infradead.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ming.lei@redhat.com \
    --cc=minwoo.im.dev@gmail.com \
    /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: link
Be 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.