diff mbox series

[1/2] rnbd: remove rnbd_dev_submit_io

Message ID 20200722102653.19224-2-guoqing.jiang@cloud.ionos.com (mailing list archive)
State New, archived
Headers show
Series Two patches for rnbd | expand

Commit Message

Guoqing Jiang July 22, 2020, 10:26 a.m. UTC
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(-)

Comments

Danil Kipnis July 22, 2020, 2:32 p.m. UTC | #1
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>
Jinpu Wang July 23, 2020, 4:54 a.m. UTC | #2
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
>
diff mbox series

Patch

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: