Skip to content

Commit 735d77d

Browse files
Guoqing Jiangaxboe
authored andcommitted
rnbd: remove rnbd_dev_submit_io
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 <[email protected]> Acked-by: Danil Kipnis <[email protected]> Acked-by: Jack Wang <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent b35fd74 commit 735d77d

File tree

3 files changed

+31
-56
lines changed

3 files changed

+31
-56
lines changed

drivers/block/rnbd/rnbd-srv-dev.c

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void rnbd_dev_close(struct rnbd_dev *dev)
4545
kfree(dev);
4646
}
4747

48-
static void rnbd_dev_bi_end_io(struct bio *bio)
48+
void rnbd_dev_bi_end_io(struct bio *bio)
4949
{
5050
struct rnbd_dev_blk_io *io = bio->bi_private;
5151

@@ -63,8 +63,8 @@ static void rnbd_dev_bi_end_io(struct bio *bio)
6363
* Map the kernel address into a bio suitable for io to a block
6464
* device. Returns an error pointer in case of error.
6565
*/
66-
static struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
67-
unsigned int len, gfp_t gfp_mask)
66+
struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
67+
unsigned int len, gfp_t gfp_mask)
6868
{
6969
unsigned long kaddr = (unsigned long)data;
7070
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,
102102
bio->bi_end_io = bio_put;
103103
return bio;
104104
}
105-
106-
int rnbd_dev_submit_io(struct rnbd_dev *dev, sector_t sector, void *data,
107-
size_t len, u32 bi_size, enum rnbd_io_flags flags,
108-
short prio, void *priv)
109-
{
110-
struct rnbd_dev_blk_io *io;
111-
struct bio *bio;
112-
113-
/* Generate bio with pages pointing to the rdma buffer */
114-
bio = rnbd_bio_map_kern(data, dev->ibd_bio_set, len, GFP_KERNEL);
115-
if (IS_ERR(bio))
116-
return PTR_ERR(bio);
117-
118-
io = container_of(bio, struct rnbd_dev_blk_io, bio);
119-
120-
io->dev = dev;
121-
io->priv = priv;
122-
123-
bio->bi_end_io = rnbd_dev_bi_end_io;
124-
bio->bi_private = io;
125-
bio->bi_opf = rnbd_to_bio_flags(flags);
126-
bio->bi_iter.bi_sector = sector;
127-
bio->bi_iter.bi_size = bi_size;
128-
bio_set_prio(bio, prio);
129-
bio_set_dev(bio, dev->bdev);
130-
131-
submit_bio(bio);
132-
133-
return 0;
134-
}

drivers/block/rnbd/rnbd-srv-dev.h

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ void rnbd_dev_close(struct rnbd_dev *dev);
4141

4242
void rnbd_endio(void *priv, int error);
4343

44+
void rnbd_dev_bi_end_io(struct bio *bio);
45+
46+
struct bio *rnbd_bio_map_kern(void *data, struct bio_set *bs,
47+
unsigned int len, gfp_t gfp_mask);
48+
4449
static inline int rnbd_dev_get_max_segs(const struct rnbd_dev *dev)
4550
{
4651
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)
7580
return bdev_get_queue(dev->bdev)->limits.discard_alignment;
7681
}
7782

78-
/**
79-
* rnbd_dev_submit_io() - Submit an I/O to the disk
80-
* @dev: device to that the I/O is submitted
81-
* @sector: address to read/write data to
82-
* @data: I/O data to write or buffer to read I/O date into
83-
* @len: length of @data
84-
* @bi_size: Amount of data that will be read/written
85-
* @prio: IO priority
86-
* @priv: private data passed to @io_fn
87-
*/
88-
int rnbd_dev_submit_io(struct rnbd_dev *dev, sector_t sector, void *data,
89-
size_t len, u32 bi_size, enum rnbd_io_flags flags,
90-
short prio, void *priv);
91-
9283
#endif /* RNBD_SRV_DEV_H */

drivers/block/rnbd/rnbd-srv.c

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@ static int process_rdma(struct rtrs_srv *sess,
124124
struct rnbd_srv_sess_dev *sess_dev;
125125
u32 dev_id;
126126
int err;
127+
struct rnbd_dev_blk_io *io;
128+
struct bio *bio;
129+
short prio;
127130

128131
priv = kmalloc(sizeof(*priv), GFP_KERNEL);
129132
if (!priv)
@@ -142,18 +145,29 @@ static int process_rdma(struct rtrs_srv *sess,
142145
priv->sess_dev = sess_dev;
143146
priv->id = id;
144147

145-
err = rnbd_dev_submit_io(sess_dev->rnbd_dev, le64_to_cpu(msg->sector),
146-
data, datalen, le32_to_cpu(msg->bi_size),
147-
le32_to_cpu(msg->rw),
148-
srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
149-
usrlen < sizeof(*msg) ?
150-
0 : le16_to_cpu(msg->prio), priv);
151-
if (unlikely(err)) {
152-
rnbd_srv_err(sess_dev, "Submitting I/O to device failed, err: %d\n",
153-
err);
148+
/* Generate bio with pages pointing to the rdma buffer */
149+
bio = rnbd_bio_map_kern(data, sess_dev->rnbd_dev->ibd_bio_set, datalen, GFP_KERNEL);
150+
if (IS_ERR(bio)) {
151+
rnbd_srv_err(sess_dev, "Failed to generate bio, err: %ld\n", PTR_ERR(bio));
154152
goto sess_dev_put;
155153
}
156154

155+
io = container_of(bio, struct rnbd_dev_blk_io, bio);
156+
io->dev = sess_dev->rnbd_dev;
157+
io->priv = priv;
158+
159+
bio->bi_end_io = rnbd_dev_bi_end_io;
160+
bio->bi_private = io;
161+
bio->bi_opf = rnbd_to_bio_flags(le32_to_cpu(msg->rw));
162+
bio->bi_iter.bi_sector = le64_to_cpu(msg->sector);
163+
bio->bi_iter.bi_size = le32_to_cpu(msg->bi_size);
164+
prio = srv_sess->ver < RNBD_PROTO_VER_MAJOR ||
165+
usrlen < sizeof(*msg) ? 0 : le16_to_cpu(msg->prio);
166+
bio_set_prio(bio, prio);
167+
bio_set_dev(bio, sess_dev->rnbd_dev->bdev);
168+
169+
submit_bio(bio);
170+
157171
return 0;
158172

159173
sess_dev_put:

0 commit comments

Comments
 (0)