* [PATCH 0/2] Two patches for rnbd
@ 2020-07-22 10:26 Guoqing Jiang
2020-07-22 10:26 ` [PATCH 1/2] rnbd: remove rnbd_dev_submit_io Guoqing Jiang
2020-07-22 10:26 ` [PATCH 2/2] rnbd: no need to set bi_end_io in rnbd_bio_map_kern Guoqing Jiang
0 siblings, 2 replies; 7+ messages in thread
From: Guoqing Jiang @ 2020-07-22 10:26 UTC (permalink / raw)
To: danil.kipnis, jinpu.wang, axboe; +Cc: linux-block, Guoqing Jiang
Hello,
Could you reivew the two patches?
Thanks,
Guoqing
Guoqing Jiang (2):
rnbd: remove rnbd_dev_submit_io
rnbd: no need to set bi_end_io in rnbd_bio_map_kern
drivers/block/rnbd/rnbd-srv-dev.c | 37 +++----------------------------
drivers/block/rnbd/rnbd-srv-dev.h | 19 +++++-----------
drivers/block/rnbd/rnbd-srv.c | 32 ++++++++++++++++++--------
3 files changed, 31 insertions(+), 57 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] rnbd: remove rnbd_dev_submit_io
2020-07-22 10:26 [PATCH 0/2] Two patches for rnbd Guoqing Jiang
@ 2020-07-22 10:26 ` Guoqing Jiang
2020-07-22 14:32 ` Danil Kipnis
2020-07-23 4:54 ` Jinpu Wang
2020-07-22 10:26 ` [PATCH 2/2] rnbd: no need to set bi_end_io in rnbd_bio_map_kern Guoqing Jiang
1 sibling, 2 replies; 7+ messages in thread
From: Guoqing Jiang @ 2020-07-22 10:26 UTC (permalink / raw)
To: danil.kipnis, jinpu.wang, axboe; +Cc: linux-block, Guoqing Jiang
The function only has one caller, so let's open code it in process_rdma.
Another bonus is we can avoid push/pop stack, since we need to pass 8
arguments to rnbd_dev_submit_io.
Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
---
drivers/block/rnbd/rnbd-srv-dev.c | 36 +++----------------------------
drivers/block/rnbd/rnbd-srv-dev.h | 19 +++++-----------
drivers/block/rnbd/rnbd-srv.c | 32 +++++++++++++++++++--------
3 files changed, 31 insertions(+), 56 deletions(-)
diff --git a/drivers/block/rnbd/rnbd-srv-dev.c b/drivers/block/rnbd/rnbd-srv-dev.c
index 5eddfd29ab64..49c62b506c9b 100644
--- a/drivers/block/rnbd/rnbd-srv-dev.c
+++ b/drivers/block/rnbd/rnbd-srv-dev.c
@@ -45,7 +45,7 @@ void rnbd_dev_close(struct rnbd_dev *dev)
kfree(dev);
}
-static void rnbd_dev_bi_end_io(struct bio *bio)
+void rnbd_dev_bi_end_io(struct bio *bio)
{
struct rnbd_dev_blk_io *io = bio->bi_private;
@@ -63,8 +63,8 @@ static void rnbd_dev_bi_end_io(struct bio *bio)
* Map the kernel address into a bio suitable for io to a block
* device. Returns an error pointer in case of error.
*/
-static struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
- unsigned int len, gfp_t gfp_mask)
+struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
+ unsigned int len, gfp_t gfp_mask)
{
unsigned long kaddr = (unsigned long)data;
unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
@@ -102,33 +102,3 @@ static struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
bio->bi_end_io = bio_put;
return bio;
}
-
-int rnbd_dev_submit_io(struct rnbd_dev *dev, sector_t sector, void *data,
- size_t len, u32 bi_size, enum rnbd_io_flags flags,
- short prio, void *priv)
-{
- struct rnbd_dev_blk_io *io;
- struct bio *bio;
-
- /* Generate bio with pages pointing to the rdma buffer */
- bio = rnbd_bio_map_kern(data, dev->ibd_bio_set, len, GFP_KERNEL);
- if (IS_ERR(bio))
- return PTR_ERR(bio);
-
- io = container_of(bio, struct rnbd_dev_blk_io, bio);
-
- io->dev = dev;
- io->priv = priv;
-
- bio->bi_end_io = rnbd_dev_bi_end_io;
- bio->bi_private = io;
- bio->bi_opf = rnbd_to_bio_flags(flags);
- bio->bi_iter.bi_sector = sector;
- bio->bi_iter.bi_size = bi_size;
- bio_set_prio(bio, prio);
- bio_set_dev(bio, dev->bdev);
-
- submit_bio(bio);
-
- return 0;
-}
diff --git a/drivers/block/rnbd/rnbd-srv-dev.h b/drivers/block/rnbd/rnbd-srv-dev.h
index 0f65b09a270e..0eb23850afb9 100644
--- a/drivers/block/rnbd/rnbd-srv-dev.h
+++ b/drivers/block/rnbd/rnbd-srv-dev.h
@@ -41,6 +41,11 @@ void rnbd_dev_close(struct rnbd_dev *dev);
void rnbd_endio(void *priv, int error);
+void rnbd_dev_bi_end_io(struct bio *bio);
+
+struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
+ unsigned int len, gfp_t gfp_mask);
+
static inline int rnbd_dev_get_max_segs(const struct rnbd_dev *dev)
{
return queue_max_segments(bdev_get_queue(dev->bdev));
@@ -75,18 +80,4 @@ static inline int rnbd_dev_get_discard_alignment(const struct rnbd_dev *dev)
return bdev_get_queue(dev->bdev)->limits.discard_alignment;
}
-/**
- * rnbd_dev_submit_io() - Submit an I/O to the disk
- * @dev: device to that the I/O is submitted
- * @sector: address to read/write data to
- * @data: I/O data to write or buffer to read I/O date into
- * @len: length of @data
- * @bi_size: Amount of data that will be read/written
- * @prio: IO priority
- * @priv: private data passed to @io_fn
- */
-int rnbd_dev_submit_io(struct rnbd_dev *dev, sector_t sector, void *data,
- size_t len, u32 bi_size, enum rnbd_io_flags flags,
- short prio, void *priv);
-
#endif /* RNBD_SRV_DEV_H */
diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c
index 86e61523907b..0fb94843a495 100644
--- a/drivers/block/rnbd/rnbd-srv.c
+++ b/drivers/block/rnbd/rnbd-srv.c
@@ -124,6 +124,9 @@ static int process_rdma(struct rtrs_srv *sess,
struct rnbd_srv_sess_dev *sess_dev;
u32 dev_id;
int err;
+ struct rnbd_dev_blk_io *io;
+ struct bio *bio;
+ short prio;
priv = kmalloc(sizeof(*priv), GFP_KERNEL);
if (!priv)
@@ -142,18 +145,29 @@ static int process_rdma(struct rtrs_srv *sess,
priv->sess_dev = sess_dev;
priv->id = id;
- err = rnbd_dev_submit_io(sess_dev->rnbd_dev, le64_to_cpu(msg->sector),
- data, datalen, le32_to_cpu(msg->bi_size),
- le32_to_cpu(msg->rw),
- srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
- usrlen < sizeof(*msg) ?
- 0 : le16_to_cpu(msg->prio), priv);
- if (unlikely(err)) {
- rnbd_srv_err(sess_dev, "Submitting I/O to device failed, err: %d\n",
- err);
+ /* Generate bio with pages pointing to the rdma buffer */
+ bio = rnbd_bio_map_kern(data, sess_dev->rnbd_dev->ibd_bio_set, datalen, GFP_KERNEL);
+ if (IS_ERR(bio)) {
+ rnbd_srv_err(sess_dev, "Failed to generate bio, err: %ld\n", PTR_ERR(bio));
goto sess_dev_put;
}
+ io = container_of(bio, struct rnbd_dev_blk_io, bio);
+ io->dev = sess_dev->rnbd_dev;
+ io->priv = priv;
+
+ bio->bi_end_io = rnbd_dev_bi_end_io;
+ bio->bi_private = io;
+ bio->bi_opf = rnbd_to_bio_flags(le32_to_cpu(msg->rw));
+ bio->bi_iter.bi_sector = le64_to_cpu(msg->sector);
+ bio->bi_iter.bi_size = le32_to_cpu(msg->bi_size);
+ prio = srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
+ usrlen < sizeof(*msg) ? 0 : le16_to_cpu(msg->prio);
+ bio_set_prio(bio, prio);
+ bio_set_dev(bio, sess_dev->rnbd_dev->bdev);
+
+ submit_bio(bio);
+
return 0;
sess_dev_put:
--
2.17.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] rnbd: no need to set bi_end_io in rnbd_bio_map_kern
2020-07-22 10:26 [PATCH 0/2] Two patches for rnbd Guoqing Jiang
2020-07-22 10:26 ` [PATCH 1/2] rnbd: remove rnbd_dev_submit_io Guoqing Jiang
@ 2020-07-22 10:26 ` Guoqing Jiang
2020-07-23 6:54 ` Jinpu Wang
2020-07-23 8:17 ` Danil Kipnis
1 sibling, 2 replies; 7+ messages in thread
From: Guoqing Jiang @ 2020-07-22 10:26 UTC (permalink / raw)
To: danil.kipnis, jinpu.wang, axboe; +Cc: linux-block, Guoqing Jiang
Since we always set bi_end_io after call rnbd_bio_map_kern, so the
setting in rnbd_bio_map_kern is redundant.
Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
---
drivers/block/rnbd/rnbd-srv-dev.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/block/rnbd/rnbd-srv-dev.c b/drivers/block/rnbd/rnbd-srv-dev.c
index 49c62b506c9b..b241a099aeae 100644
--- a/drivers/block/rnbd/rnbd-srv-dev.c
+++ b/drivers/block/rnbd/rnbd-srv-dev.c
@@ -99,6 +99,5 @@ struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
offset = 0;
}
- bio->bi_end_io = bio_put;
return bio;
}
--
2.17.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] rnbd: remove rnbd_dev_submit_io
2020-07-22 10:26 ` [PATCH 1/2] rnbd: remove rnbd_dev_submit_io Guoqing Jiang
@ 2020-07-22 14:32 ` Danil Kipnis
2020-07-23 4:54 ` Jinpu Wang
1 sibling, 0 replies; 7+ messages in thread
From: Danil Kipnis @ 2020-07-22 14:32 UTC (permalink / raw)
To: Guoqing Jiang; +Cc: Jinpu Wang, Jens Axboe, linux-block
On Wed, Jul 22, 2020 at 12:27 PM Guoqing Jiang
<guoqing.jiang@cloud.ionos.com> wrote:
>
> The function only has one caller, so let's open code it in process_rdma.
> Another bonus is we can avoid push/pop stack, since we need to pass 8
> arguments to rnbd_dev_submit_io.
>
> Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
> ---
> drivers/block/rnbd/rnbd-srv-dev.c | 36 +++----------------------------
> drivers/block/rnbd/rnbd-srv-dev.h | 19 +++++-----------
> drivers/block/rnbd/rnbd-srv.c | 32 +++++++++++++++++++--------
> 3 files changed, 31 insertions(+), 56 deletions(-)
>
> diff --git a/drivers/block/rnbd/rnbd-srv-dev.c b/drivers/block/rnbd/rnbd-srv-dev.c
> index 5eddfd29ab64..49c62b506c9b 100644
> --- a/drivers/block/rnbd/rnbd-srv-dev.c
> +++ b/drivers/block/rnbd/rnbd-srv-dev.c
> @@ -45,7 +45,7 @@ void rnbd_dev_close(struct rnbd_dev *dev)
> kfree(dev);
> }
>
> -static void rnbd_dev_bi_end_io(struct bio *bio)
> +void rnbd_dev_bi_end_io(struct bio *bio)
> {
> struct rnbd_dev_blk_io *io = bio->bi_private;
>
> @@ -63,8 +63,8 @@ static void rnbd_dev_bi_end_io(struct bio *bio)
> * Map the kernel address into a bio suitable for io to a block
> * device. Returns an error pointer in case of error.
> */
> -static struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> - unsigned int len, gfp_t gfp_mask)
> +struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> + unsigned int len, gfp_t gfp_mask)
> {
> unsigned long kaddr = (unsigned long)data;
> unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
> @@ -102,33 +102,3 @@ static struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> bio->bi_end_io = bio_put;
> return bio;
> }
> -
> -int rnbd_dev_submit_io(struct rnbd_dev *dev, sector_t sector, void *data,
> - size_t len, u32 bi_size, enum rnbd_io_flags flags,
> - short prio, void *priv)
> -{
> - struct rnbd_dev_blk_io *io;
> - struct bio *bio;
> -
> - /* Generate bio with pages pointing to the rdma buffer */
> - bio = rnbd_bio_map_kern(data, dev->ibd_bio_set, len, GFP_KERNEL);
> - if (IS_ERR(bio))
> - return PTR_ERR(bio);
> -
> - io = container_of(bio, struct rnbd_dev_blk_io, bio);
> -
> - io->dev = dev;
> - io->priv = priv;
> -
> - bio->bi_end_io = rnbd_dev_bi_end_io;
> - bio->bi_private = io;
> - bio->bi_opf = rnbd_to_bio_flags(flags);
> - bio->bi_iter.bi_sector = sector;
> - bio->bi_iter.bi_size = bi_size;
> - bio_set_prio(bio, prio);
> - bio_set_dev(bio, dev->bdev);
> -
> - submit_bio(bio);
> -
> - return 0;
> -}
> diff --git a/drivers/block/rnbd/rnbd-srv-dev.h b/drivers/block/rnbd/rnbd-srv-dev.h
> index 0f65b09a270e..0eb23850afb9 100644
> --- a/drivers/block/rnbd/rnbd-srv-dev.h
> +++ b/drivers/block/rnbd/rnbd-srv-dev.h
> @@ -41,6 +41,11 @@ void rnbd_dev_close(struct rnbd_dev *dev);
>
> void rnbd_endio(void *priv, int error);
>
> +void rnbd_dev_bi_end_io(struct bio *bio);
> +
> +struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> + unsigned int len, gfp_t gfp_mask);
> +
> static inline int rnbd_dev_get_max_segs(const struct rnbd_dev *dev)
> {
> return queue_max_segments(bdev_get_queue(dev->bdev));
> @@ -75,18 +80,4 @@ static inline int rnbd_dev_get_discard_alignment(const struct rnbd_dev *dev)
> return bdev_get_queue(dev->bdev)->limits.discard_alignment;
> }
>
> -/**
> - * rnbd_dev_submit_io() - Submit an I/O to the disk
> - * @dev: device to that the I/O is submitted
> - * @sector: address to read/write data to
> - * @data: I/O data to write or buffer to read I/O date into
> - * @len: length of @data
> - * @bi_size: Amount of data that will be read/written
> - * @prio: IO priority
> - * @priv: private data passed to @io_fn
> - */
> -int rnbd_dev_submit_io(struct rnbd_dev *dev, sector_t sector, void *data,
> - size_t len, u32 bi_size, enum rnbd_io_flags flags,
> - short prio, void *priv);
> -
> #endif /* RNBD_SRV_DEV_H */
> diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c
> index 86e61523907b..0fb94843a495 100644
> --- a/drivers/block/rnbd/rnbd-srv.c
> +++ b/drivers/block/rnbd/rnbd-srv.c
> @@ -124,6 +124,9 @@ static int process_rdma(struct rtrs_srv *sess,
> struct rnbd_srv_sess_dev *sess_dev;
> u32 dev_id;
> int err;
> + struct rnbd_dev_blk_io *io;
> + struct bio *bio;
> + short prio;
>
> priv = kmalloc(sizeof(*priv), GFP_KERNEL);
> if (!priv)
> @@ -142,18 +145,29 @@ static int process_rdma(struct rtrs_srv *sess,
> priv->sess_dev = sess_dev;
> priv->id = id;
>
> - err = rnbd_dev_submit_io(sess_dev->rnbd_dev, le64_to_cpu(msg->sector),
> - data, datalen, le32_to_cpu(msg->bi_size),
> - le32_to_cpu(msg->rw),
> - srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
> - usrlen < sizeof(*msg) ?
> - 0 : le16_to_cpu(msg->prio), priv);
> - if (unlikely(err)) {
> - rnbd_srv_err(sess_dev, "Submitting I/O to device failed, err: %d\n",
> - err);
> + /* Generate bio with pages pointing to the rdma buffer */
> + bio = rnbd_bio_map_kern(data, sess_dev->rnbd_dev->ibd_bio_set, datalen, GFP_KERNEL);
> + if (IS_ERR(bio)) {
> + rnbd_srv_err(sess_dev, "Failed to generate bio, err: %ld\n", PTR_ERR(bio));
> goto sess_dev_put;
> }
>
> + io = container_of(bio, struct rnbd_dev_blk_io, bio);
> + io->dev = sess_dev->rnbd_dev;
> + io->priv = priv;
> +
> + bio->bi_end_io = rnbd_dev_bi_end_io;
> + bio->bi_private = io;
> + bio->bi_opf = rnbd_to_bio_flags(le32_to_cpu(msg->rw));
> + bio->bi_iter.bi_sector = le64_to_cpu(msg->sector);
> + bio->bi_iter.bi_size = le32_to_cpu(msg->bi_size);
> + prio = srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
> + usrlen < sizeof(*msg) ? 0 : le16_to_cpu(msg->prio);
> + bio_set_prio(bio, prio);
> + bio_set_dev(bio, sess_dev->rnbd_dev->bdev);
> +
> + submit_bio(bio);
> +
> return 0;
>
> sess_dev_put:
> --
> 2.17.1
>
Looks good. Thank you!
Acked-by: Danil Kipnis <danil.kipnis@cloud.ionos.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] rnbd: remove rnbd_dev_submit_io
2020-07-22 10:26 ` [PATCH 1/2] rnbd: remove rnbd_dev_submit_io Guoqing Jiang
2020-07-22 14:32 ` Danil Kipnis
@ 2020-07-23 4:54 ` Jinpu Wang
1 sibling, 0 replies; 7+ messages in thread
From: Jinpu Wang @ 2020-07-23 4:54 UTC (permalink / raw)
To: Guoqing Jiang; +Cc: Danil Kipnis, Jens Axboe, linux-block
On Wed, Jul 22, 2020 at 12:27 PM Guoqing Jiang
<guoqing.jiang@cloud.ionos.com> wrote:
>
> The function only has one caller, so let's open code it in process_rdma.
> Another bonus is we can avoid push/pop stack, since we need to pass 8
> arguments to rnbd_dev_submit_io.
>
> Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
Thanks!
Acked-by: Jack Wang <jinpu.wang@cloud.ionos.com>
> ---
> drivers/block/rnbd/rnbd-srv-dev.c | 36 +++----------------------------
> drivers/block/rnbd/rnbd-srv-dev.h | 19 +++++-----------
> drivers/block/rnbd/rnbd-srv.c | 32 +++++++++++++++++++--------
> 3 files changed, 31 insertions(+), 56 deletions(-)
>
> diff --git a/drivers/block/rnbd/rnbd-srv-dev.c b/drivers/block/rnbd/rnbd-srv-dev.c
> index 5eddfd29ab64..49c62b506c9b 100644
> --- a/drivers/block/rnbd/rnbd-srv-dev.c
> +++ b/drivers/block/rnbd/rnbd-srv-dev.c
> @@ -45,7 +45,7 @@ void rnbd_dev_close(struct rnbd_dev *dev)
> kfree(dev);
> }
>
> -static void rnbd_dev_bi_end_io(struct bio *bio)
> +void rnbd_dev_bi_end_io(struct bio *bio)
> {
> struct rnbd_dev_blk_io *io = bio->bi_private;
>
> @@ -63,8 +63,8 @@ static void rnbd_dev_bi_end_io(struct bio *bio)
> * Map the kernel address into a bio suitable for io to a block
> * device. Returns an error pointer in case of error.
> */
> -static struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> - unsigned int len, gfp_t gfp_mask)
> +struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> + unsigned int len, gfp_t gfp_mask)
> {
> unsigned long kaddr = (unsigned long)data;
> unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
> @@ -102,33 +102,3 @@ static struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> bio->bi_end_io = bio_put;
> return bio;
> }
> -
> -int rnbd_dev_submit_io(struct rnbd_dev *dev, sector_t sector, void *data,
> - size_t len, u32 bi_size, enum rnbd_io_flags flags,
> - short prio, void *priv)
> -{
> - struct rnbd_dev_blk_io *io;
> - struct bio *bio;
> -
> - /* Generate bio with pages pointing to the rdma buffer */
> - bio = rnbd_bio_map_kern(data, dev->ibd_bio_set, len, GFP_KERNEL);
> - if (IS_ERR(bio))
> - return PTR_ERR(bio);
> -
> - io = container_of(bio, struct rnbd_dev_blk_io, bio);
> -
> - io->dev = dev;
> - io->priv = priv;
> -
> - bio->bi_end_io = rnbd_dev_bi_end_io;
> - bio->bi_private = io;
> - bio->bi_opf = rnbd_to_bio_flags(flags);
> - bio->bi_iter.bi_sector = sector;
> - bio->bi_iter.bi_size = bi_size;
> - bio_set_prio(bio, prio);
> - bio_set_dev(bio, dev->bdev);
> -
> - submit_bio(bio);
> -
> - return 0;
> -}
> diff --git a/drivers/block/rnbd/rnbd-srv-dev.h b/drivers/block/rnbd/rnbd-srv-dev.h
> index 0f65b09a270e..0eb23850afb9 100644
> --- a/drivers/block/rnbd/rnbd-srv-dev.h
> +++ b/drivers/block/rnbd/rnbd-srv-dev.h
> @@ -41,6 +41,11 @@ void rnbd_dev_close(struct rnbd_dev *dev);
>
> void rnbd_endio(void *priv, int error);
>
> +void rnbd_dev_bi_end_io(struct bio *bio);
> +
> +struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> + unsigned int len, gfp_t gfp_mask);
> +
> static inline int rnbd_dev_get_max_segs(const struct rnbd_dev *dev)
> {
> return queue_max_segments(bdev_get_queue(dev->bdev));
> @@ -75,18 +80,4 @@ static inline int rnbd_dev_get_discard_alignment(const struct rnbd_dev *dev)
> return bdev_get_queue(dev->bdev)->limits.discard_alignment;
> }
>
> -/**
> - * rnbd_dev_submit_io() - Submit an I/O to the disk
> - * @dev: device to that the I/O is submitted
> - * @sector: address to read/write data to
> - * @data: I/O data to write or buffer to read I/O date into
> - * @len: length of @data
> - * @bi_size: Amount of data that will be read/written
> - * @prio: IO priority
> - * @priv: private data passed to @io_fn
> - */
> -int rnbd_dev_submit_io(struct rnbd_dev *dev, sector_t sector, void *data,
> - size_t len, u32 bi_size, enum rnbd_io_flags flags,
> - short prio, void *priv);
> -
> #endif /* RNBD_SRV_DEV_H */
> diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c
> index 86e61523907b..0fb94843a495 100644
> --- a/drivers/block/rnbd/rnbd-srv.c
> +++ b/drivers/block/rnbd/rnbd-srv.c
> @@ -124,6 +124,9 @@ static int process_rdma(struct rtrs_srv *sess,
> struct rnbd_srv_sess_dev *sess_dev;
> u32 dev_id;
> int err;
> + struct rnbd_dev_blk_io *io;
> + struct bio *bio;
> + short prio;
>
> priv = kmalloc(sizeof(*priv), GFP_KERNEL);
> if (!priv)
> @@ -142,18 +145,29 @@ static int process_rdma(struct rtrs_srv *sess,
> priv->sess_dev = sess_dev;
> priv->id = id;
>
> - err = rnbd_dev_submit_io(sess_dev->rnbd_dev, le64_to_cpu(msg->sector),
> - data, datalen, le32_to_cpu(msg->bi_size),
> - le32_to_cpu(msg->rw),
> - srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
> - usrlen < sizeof(*msg) ?
> - 0 : le16_to_cpu(msg->prio), priv);
> - if (unlikely(err)) {
> - rnbd_srv_err(sess_dev, "Submitting I/O to device failed, err: %d\n",
> - err);
> + /* Generate bio with pages pointing to the rdma buffer */
> + bio = rnbd_bio_map_kern(data, sess_dev->rnbd_dev->ibd_bio_set, datalen, GFP_KERNEL);
> + if (IS_ERR(bio)) {
> + rnbd_srv_err(sess_dev, "Failed to generate bio, err: %ld\n", PTR_ERR(bio));
> goto sess_dev_put;
> }
>
> + io = container_of(bio, struct rnbd_dev_blk_io, bio);
> + io->dev = sess_dev->rnbd_dev;
> + io->priv = priv;
> +
> + bio->bi_end_io = rnbd_dev_bi_end_io;
> + bio->bi_private = io;
> + bio->bi_opf = rnbd_to_bio_flags(le32_to_cpu(msg->rw));
> + bio->bi_iter.bi_sector = le64_to_cpu(msg->sector);
> + bio->bi_iter.bi_size = le32_to_cpu(msg->bi_size);
> + prio = srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
> + usrlen < sizeof(*msg) ? 0 : le16_to_cpu(msg->prio);
> + bio_set_prio(bio, prio);
> + bio_set_dev(bio, sess_dev->rnbd_dev->bdev);
> +
> + submit_bio(bio);
> +
> return 0;
>
> sess_dev_put:
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] rnbd: no need to set bi_end_io in rnbd_bio_map_kern
2020-07-22 10:26 ` [PATCH 2/2] rnbd: no need to set bi_end_io in rnbd_bio_map_kern Guoqing Jiang
@ 2020-07-23 6:54 ` Jinpu Wang
2020-07-23 8:17 ` Danil Kipnis
1 sibling, 0 replies; 7+ messages in thread
From: Jinpu Wang @ 2020-07-23 6:54 UTC (permalink / raw)
To: Guoqing Jiang; +Cc: Danil Kipnis, Jens Axboe, linux-block
On Wed, Jul 22, 2020 at 12:27 PM Guoqing Jiang
<guoqing.jiang@cloud.ionos.com> wrote:
>
> Since we always set bi_end_io after call rnbd_bio_map_kern, so the
> setting in rnbd_bio_map_kern is redundant.
>
> Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
Thanks!
Acked-by: Jack Wang <jinpu.wang@cloud.ionos.com>
> ---
> drivers/block/rnbd/rnbd-srv-dev.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/drivers/block/rnbd/rnbd-srv-dev.c b/drivers/block/rnbd/rnbd-srv-dev.c
> index 49c62b506c9b..b241a099aeae 100644
> --- a/drivers/block/rnbd/rnbd-srv-dev.c
> +++ b/drivers/block/rnbd/rnbd-srv-dev.c
> @@ -99,6 +99,5 @@ struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> offset = 0;
> }
>
> - bio->bi_end_io = bio_put;
> return bio;
> }
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] rnbd: no need to set bi_end_io in rnbd_bio_map_kern
2020-07-22 10:26 ` [PATCH 2/2] rnbd: no need to set bi_end_io in rnbd_bio_map_kern Guoqing Jiang
2020-07-23 6:54 ` Jinpu Wang
@ 2020-07-23 8:17 ` Danil Kipnis
1 sibling, 0 replies; 7+ messages in thread
From: Danil Kipnis @ 2020-07-23 8:17 UTC (permalink / raw)
To: Guoqing Jiang; +Cc: Jinpu Wang, Jens Axboe, linux-block
On Wed, Jul 22, 2020 at 12:27 PM Guoqing Jiang
<guoqing.jiang@cloud.ionos.com> wrote:
>
> Since we always set bi_end_io after call rnbd_bio_map_kern, so the
> setting in rnbd_bio_map_kern is redundant.
>
> Signed-off-by: Guoqing Jiang <guoqing.jiang@cloud.ionos.com>
Thanks!
Acked-by: Danil Kipnis <danil.kipnis@cloud.ionos.com>
> ---
> drivers/block/rnbd/rnbd-srv-dev.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/drivers/block/rnbd/rnbd-srv-dev.c b/drivers/block/rnbd/rnbd-srv-dev.c
> index 49c62b506c9b..b241a099aeae 100644
> --- a/drivers/block/rnbd/rnbd-srv-dev.c
> +++ b/drivers/block/rnbd/rnbd-srv-dev.c
> @@ -99,6 +99,5 @@ struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
> offset = 0;
> }
>
> - bio->bi_end_io = bio_put;
> return bio;
> }
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-07-23 8:17 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-22 10:26 [PATCH 0/2] Two patches for rnbd Guoqing Jiang
2020-07-22 10:26 ` [PATCH 1/2] rnbd: remove rnbd_dev_submit_io Guoqing Jiang
2020-07-22 14:32 ` Danil Kipnis
2020-07-23 4:54 ` Jinpu Wang
2020-07-22 10:26 ` [PATCH 2/2] rnbd: no need to set bi_end_io in rnbd_bio_map_kern Guoqing Jiang
2020-07-23 6:54 ` Jinpu Wang
2020-07-23 8:17 ` Danil Kipnis
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.