Re: [PATCH 11/19] rnbd-src: remove struct rnbd_dev_blk_io
On Tue, Jan 18, 2022 at 8:20 AM Christoph Hellwig wrote: > > Only the priv field of rnbd_dev_blk_io is used, so store the value of > that in bio->bi_private directly and remove the entire bio_set overhead. > > Signed-off-by: Christoph Hellwig there is one typo in the subject line, should be rnbd-srv. > --- > drivers/block/rnbd/rnbd-srv-dev.c | 4 +--- > drivers/block/rnbd/rnbd-srv-dev.h | 13 ++--- > drivers/block/rnbd/rnbd-srv.c | 30 +- > drivers/block/rnbd/rnbd-srv.h | 1 - > 4 files changed, 8 insertions(+), 40 deletions(-) > > diff --git a/drivers/block/rnbd/rnbd-srv-dev.c > b/drivers/block/rnbd/rnbd-srv-dev.c > index 98d3e591a0885..c5d0a03911659 100644 > --- a/drivers/block/rnbd/rnbd-srv-dev.c > +++ b/drivers/block/rnbd/rnbd-srv-dev.c > @@ -12,8 +12,7 @@ > #include "rnbd-srv-dev.h" > #include "rnbd-log.h" > > -struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags, > - struct bio_set *bs) > +struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags) > { > struct rnbd_dev *dev; > int ret; > @@ -30,7 +29,6 @@ struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t > flags, > > dev->blk_open_flags = flags; > bdevname(dev->bdev, dev->name); > - dev->ibd_bio_set = bs; > > return dev; > > diff --git a/drivers/block/rnbd/rnbd-srv-dev.h > b/drivers/block/rnbd/rnbd-srv-dev.h > index 1a14ece0be726..2c3df02b5e8ec 100644 > --- a/drivers/block/rnbd/rnbd-srv-dev.h > +++ b/drivers/block/rnbd/rnbd-srv-dev.h > @@ -14,25 +14,16 @@ > > struct rnbd_dev { > struct block_device *bdev; > - struct bio_set *ibd_bio_set; > fmode_t blk_open_flags; > charname[BDEVNAME_SIZE]; > }; > > -struct rnbd_dev_blk_io { > - struct rnbd_dev *dev; > - void *priv; > - /* have to be last member for front_pad usage of bioset_init */ > - struct bio bio; > -}; > - > /** > * rnbd_dev_open() - Open a device > + * @path: path to open > * @flags: open flags > - * @bs:bio_set to use during block io, > */ > -struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags, > - struct bio_set *bs); > +struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags); > > /** > * rnbd_dev_close() - Close a device > diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c > index 65c670e96075b..b1ac1414b56d5 100644 > --- a/drivers/block/rnbd/rnbd-srv.c > +++ b/drivers/block/rnbd/rnbd-srv.c > @@ -116,9 +116,7 @@ rnbd_get_sess_dev(int dev_id, struct rnbd_srv_session > *srv_sess) > > static void rnbd_dev_bi_end_io(struct bio *bio) > { > - struct rnbd_dev_blk_io *io = bio->bi_private; > - > - rnbd_endio(io->priv, blk_status_to_errno(bio->bi_status)); > + rnbd_endio(bio->bi_private, blk_status_to_errno(bio->bi_status)); > bio_put(bio); > } > > @@ -131,7 +129,6 @@ static int process_rdma(struct rnbd_srv_session *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; > > @@ -152,20 +149,16 @@ static int process_rdma(struct rnbd_srv_session > *srv_sess, > priv->sess_dev = sess_dev; > priv->id = id; > > - bio = bio_alloc_bioset(GFP_KERNEL, 1, > sess_dev->rnbd_dev->ibd_bio_set); > + bio = bio_alloc(GFP_KERNEL, 1); > if (bio_add_page(bio, virt_to_page(data), datalen, > offset_in_page(data))) { > rnbd_srv_err(sess_dev, "Failed to map data to bio\n"); > err = -EINVAL; > - goto sess_dev_put; > + goto bio_put; ok, bio_put is used here, I think it's better the move to patch 10. > } > > - 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_private = priv; > 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); > @@ -180,7 +173,6 @@ static int process_rdma(struct rnbd_srv_session *srv_sess, > > bio_put: > bio_put(bio); > -sess_dev_put: > rnbd_put_sess_dev(sess_dev); > err: > kfree(priv); > @@ -261,7 +253,6 @@ static void destroy_sess(struct rnbd_srv_session > *srv_sess) > > out: > xa_destroy(&srv_sess->index_idr); > - bioset_exit(&srv_sess->sess_bio_set); > > pr_info("RTRS Session %s disconnected\n", srv_sess->sessname); > > @@ -290,16 +281,6 @@ static int create_sess(struct rtrs_srv_sess *rtrs) > return -ENOMEM; > > srv_sess->queue_depth = rtrs_srv_get_queue_depth(rtrs); > -
[PATCH 11/19] rnbd-src: remove struct rnbd_dev_blk_io
Only the priv field of rnbd_dev_blk_io is used, so store the value of that in bio->bi_private directly and remove the entire bio_set overhead. Signed-off-by: Christoph Hellwig --- drivers/block/rnbd/rnbd-srv-dev.c | 4 +--- drivers/block/rnbd/rnbd-srv-dev.h | 13 ++--- drivers/block/rnbd/rnbd-srv.c | 30 +- drivers/block/rnbd/rnbd-srv.h | 1 - 4 files changed, 8 insertions(+), 40 deletions(-) diff --git a/drivers/block/rnbd/rnbd-srv-dev.c b/drivers/block/rnbd/rnbd-srv-dev.c index 98d3e591a0885..c5d0a03911659 100644 --- a/drivers/block/rnbd/rnbd-srv-dev.c +++ b/drivers/block/rnbd/rnbd-srv-dev.c @@ -12,8 +12,7 @@ #include "rnbd-srv-dev.h" #include "rnbd-log.h" -struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags, - struct bio_set *bs) +struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags) { struct rnbd_dev *dev; int ret; @@ -30,7 +29,6 @@ struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags, dev->blk_open_flags = flags; bdevname(dev->bdev, dev->name); - dev->ibd_bio_set = bs; return dev; diff --git a/drivers/block/rnbd/rnbd-srv-dev.h b/drivers/block/rnbd/rnbd-srv-dev.h index 1a14ece0be726..2c3df02b5e8ec 100644 --- a/drivers/block/rnbd/rnbd-srv-dev.h +++ b/drivers/block/rnbd/rnbd-srv-dev.h @@ -14,25 +14,16 @@ struct rnbd_dev { struct block_device *bdev; - struct bio_set *ibd_bio_set; fmode_t blk_open_flags; charname[BDEVNAME_SIZE]; }; -struct rnbd_dev_blk_io { - struct rnbd_dev *dev; - void *priv; - /* have to be last member for front_pad usage of bioset_init */ - struct bio bio; -}; - /** * rnbd_dev_open() - Open a device + * @path: path to open * @flags: open flags - * @bs:bio_set to use during block io, */ -struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags, - struct bio_set *bs); +struct rnbd_dev *rnbd_dev_open(const char *path, fmode_t flags); /** * rnbd_dev_close() - Close a device diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c index 65c670e96075b..b1ac1414b56d5 100644 --- a/drivers/block/rnbd/rnbd-srv.c +++ b/drivers/block/rnbd/rnbd-srv.c @@ -116,9 +116,7 @@ rnbd_get_sess_dev(int dev_id, struct rnbd_srv_session *srv_sess) static void rnbd_dev_bi_end_io(struct bio *bio) { - struct rnbd_dev_blk_io *io = bio->bi_private; - - rnbd_endio(io->priv, blk_status_to_errno(bio->bi_status)); + rnbd_endio(bio->bi_private, blk_status_to_errno(bio->bi_status)); bio_put(bio); } @@ -131,7 +129,6 @@ static int process_rdma(struct rnbd_srv_session *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; @@ -152,20 +149,16 @@ static int process_rdma(struct rnbd_srv_session *srv_sess, priv->sess_dev = sess_dev; priv->id = id; - bio = bio_alloc_bioset(GFP_KERNEL, 1, sess_dev->rnbd_dev->ibd_bio_set); + bio = bio_alloc(GFP_KERNEL, 1); if (bio_add_page(bio, virt_to_page(data), datalen, offset_in_page(data))) { rnbd_srv_err(sess_dev, "Failed to map data to bio\n"); err = -EINVAL; - goto sess_dev_put; + goto bio_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_private = priv; 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); @@ -180,7 +173,6 @@ static int process_rdma(struct rnbd_srv_session *srv_sess, bio_put: bio_put(bio); -sess_dev_put: rnbd_put_sess_dev(sess_dev); err: kfree(priv); @@ -261,7 +253,6 @@ static void destroy_sess(struct rnbd_srv_session *srv_sess) out: xa_destroy(&srv_sess->index_idr); - bioset_exit(&srv_sess->sess_bio_set); pr_info("RTRS Session %s disconnected\n", srv_sess->sessname); @@ -290,16 +281,6 @@ static int create_sess(struct rtrs_srv_sess *rtrs) return -ENOMEM; srv_sess->queue_depth = rtrs_srv_get_queue_depth(rtrs); - err = bioset_init(&srv_sess->sess_bio_set, srv_sess->queue_depth, - offsetof(struct rnbd_dev_blk_io, bio), - BIOSET_NEED_BVECS); - if (err) { - pr_err("Allocating srv_session for path %s failed\n", - pathname); - kfree(srv_sess); - return err; - } - xa_init_flags(&srv_sess->index_idr, XA_FLAGS_ALLOC