rnbd: remove rnbd_dev_submit_io
authorGuoqing Jiang <guoqing.jiang@cloud.ionos.com>
Thu, 30 Jul 2020 09:13:57 +0000 (11:13 +0200)
committerJens Axboe <axboe@kernel.dk>
Thu, 6 Aug 2020 13:30:04 +0000 (07:30 -0600)
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>
Acked-by: Danil Kipnis <danil.kipnis@cloud.ionos.com>
Acked-by: Jack Wang <jinpu.wang@cloud.ionos.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/rnbd/rnbd-srv-dev.c
drivers/block/rnbd/rnbd-srv-dev.h
drivers/block/rnbd/rnbd-srv.c

index 5eddfd29ab6422b3646657985a048311c8e69b60..49c62b506c9b6f565e633bae212de4119ae3f79b 100644 (file)
@@ -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;
-}
index 0f65b09a270eb16b073186cea8638c78f2095d8b..0eb23850afb954fc90a72cae9c252296b7fff06e 100644 (file)
@@ -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 */
index 86e61523907b358d0f2ed5f8998532312d7c0f14..0fb94843a495f96566ce159639e5d8faf1cbf7ca 100644 (file)
@@ -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: