From: Ming Lei <tom.leiming@gmail.com> To: Jens Axboe <axboe@fb.com>, linux-kernel@vger.kernel.org Cc: linux-block@vger.kernel.org, Christoph Hellwig <hch@infradead.org>, Ming Lei <tom.leiming@gmail.com>, Kent Overstreet <kent.overstreet@gmail.com>, Shaohua Li <shli@kernel.org>, Guoqing Jiang <gqjiang@suse.com>, Zheng Liu <gnehzuil.liu@gmail.com>, Mike Christie <mchristi@redhat.com>, Jiri Kosina <jkosina@suse.cz>, Eric Wheeler <git@linux.ewheeler.net>, Yijing Wang <wangyijing@huawei.com>, Al Viro <viro@ZenIV.linux.org.uk>, "open list:BCACHE BLOCK LAYER CACHE" <linux-bcache@vger.kernel.org>, "open list:SOFTWARE RAID Multiple Disks SUPPORT" <linux-raid@vger.kernel.org> Subject: [PATCH v1 07/54] bcache: comment on direct access to bvec table Date: Tue, 27 Dec 2016 23:55:56 +0800 [thread overview] Message-ID: <1482854250-13481-8-git-send-email-tom.leiming@gmail.com> (raw) In-Reply-To: <1482854250-13481-1-git-send-email-tom.leiming@gmail.com> Looks all are safe after multipage bvec is supported. Signed-off-by: Ming Lei <tom.leiming@gmail.com> --- drivers/md/bcache/btree.c | 1 + drivers/md/bcache/super.c | 6 ++++++ drivers/md/bcache/util.c | 7 +++++++ 3 files changed, 14 insertions(+) diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index a43eedd5804d..fc35cfb4d0f1 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -428,6 +428,7 @@ static void do_btree_node_write(struct btree *b) continue_at(cl, btree_node_write_done, NULL); } else { + /* No harm for multipage bvec since the new is just allocated */ b->bio->bi_vcnt = 0; bch_bio_map(b->bio, i); diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index 3a19cbc8b230..607b022259dc 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c @@ -208,6 +208,7 @@ static void write_bdev_super_endio(struct bio *bio) static void __write_super(struct cache_sb *sb, struct bio *bio) { + /* single page bio, safe for multipage bvec */ struct cache_sb *out = page_address(bio->bi_io_vec[0].bv_page); unsigned i; @@ -1156,6 +1157,8 @@ static void register_bdev(struct cache_sb *sb, struct page *sb_page, dc->bdev->bd_holder = dc; bio_init(&dc->sb_bio, dc->sb_bio.bi_inline_vecs, 1); + + /* single page bio, safe for multipage bvec */ dc->sb_bio.bi_io_vec[0].bv_page = sb_page; get_page(sb_page); @@ -1799,6 +1802,7 @@ void bch_cache_release(struct kobject *kobj) for (i = 0; i < RESERVE_NR; i++) free_fifo(&ca->free[i]); + /* single page bio, safe for multipage bvec */ if (ca->sb_bio.bi_inline_vecs[0].bv_page) put_page(ca->sb_bio.bi_io_vec[0].bv_page); @@ -1854,6 +1858,8 @@ static int register_cache(struct cache_sb *sb, struct page *sb_page, ca->bdev->bd_holder = ca; bio_init(&ca->sb_bio, ca->sb_bio.bi_inline_vecs, 1); + + /* single page bio, safe for multipage bvec */ ca->sb_bio.bi_io_vec[0].bv_page = sb_page; get_page(sb_page); diff --git a/drivers/md/bcache/util.c b/drivers/md/bcache/util.c index dde6172f3f10..5cc0b49a65fb 100644 --- a/drivers/md/bcache/util.c +++ b/drivers/md/bcache/util.c @@ -222,6 +222,13 @@ uint64_t bch_next_delay(struct bch_ratelimit *d, uint64_t done) : 0; } +/* + * Generally it isn't good to access .bi_io_vec and .bi_vcnt + * directly, the preferred way is bio_add_page, but in + * this case, bch_bio_map() supposes that the bvec table + * is empty, so it is safe to access .bi_vcnt & .bi_io_vec + * in this way even after multipage bvec is supported. + */ void bch_bio_map(struct bio *bio, void *base) { size_t size = bio->bi_iter.bi_size; -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Ming Lei <tom.leiming@gmail.com> To: Jens Axboe <axboe@fb.com>, linux-kernel@vger.kernel.org Cc: linux-block@vger.kernel.org, Christoph Hellwig <hch@infradead.org>, Ming Lei <tom.leiming@gmail.com>, Kent Overstreet <kent.overstreet@gmail.com>, Shaohua Li <shli@kernel.org>, Guoqing Jiang <gqjiang@suse.com>, Zheng Liu <gnehzuil.liu@gmail.com>, Mike Christie <mchristi@redhat.com>, Jiri Kosina <jkosina@suse.cz>, Eric Wheeler <git@linux.ewheeler.net>, Yijing Wang <wangyijing@huawei.com>, Al Viro <viro@ZenIV.linux.org.uk>, linux-bcache@vger.kernel.org (open list:BCACHE (BLOCK LAYER CACHE)), linux-raid@vger.kernel.org (open list:SOFTWARE RAID (Multiple Disks) SUPPORT) Subject: [PATCH v1 07/54] bcache: comment on direct access to bvec table Date: Tue, 27 Dec 2016 23:55:56 +0800 [thread overview] Message-ID: <1482854250-13481-8-git-send-email-tom.leiming@gmail.com> (raw) In-Reply-To: <1482854250-13481-1-git-send-email-tom.leiming@gmail.com> Looks all are safe after multipage bvec is supported. Signed-off-by: Ming Lei <tom.leiming@gmail.com> --- drivers/md/bcache/btree.c | 1 + drivers/md/bcache/super.c | 6 ++++++ drivers/md/bcache/util.c | 7 +++++++ 3 files changed, 14 insertions(+) diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index a43eedd5804d..fc35cfb4d0f1 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -428,6 +428,7 @@ static void do_btree_node_write(struct btree *b) continue_at(cl, btree_node_write_done, NULL); } else { + /* No harm for multipage bvec since the new is just allocated */ b->bio->bi_vcnt = 0; bch_bio_map(b->bio, i); diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c index 3a19cbc8b230..607b022259dc 100644 --- a/drivers/md/bcache/super.c +++ b/drivers/md/bcache/super.c @@ -208,6 +208,7 @@ static void write_bdev_super_endio(struct bio *bio) static void __write_super(struct cache_sb *sb, struct bio *bio) { + /* single page bio, safe for multipage bvec */ struct cache_sb *out = page_address(bio->bi_io_vec[0].bv_page); unsigned i; @@ -1156,6 +1157,8 @@ static void register_bdev(struct cache_sb *sb, struct page *sb_page, dc->bdev->bd_holder = dc; bio_init(&dc->sb_bio, dc->sb_bio.bi_inline_vecs, 1); + + /* single page bio, safe for multipage bvec */ dc->sb_bio.bi_io_vec[0].bv_page = sb_page; get_page(sb_page); @@ -1799,6 +1802,7 @@ void bch_cache_release(struct kobject *kobj) for (i = 0; i < RESERVE_NR; i++) free_fifo(&ca->free[i]); + /* single page bio, safe for multipage bvec */ if (ca->sb_bio.bi_inline_vecs[0].bv_page) put_page(ca->sb_bio.bi_io_vec[0].bv_page); @@ -1854,6 +1858,8 @@ static int register_cache(struct cache_sb *sb, struct page *sb_page, ca->bdev->bd_holder = ca; bio_init(&ca->sb_bio, ca->sb_bio.bi_inline_vecs, 1); + + /* single page bio, safe for multipage bvec */ ca->sb_bio.bi_io_vec[0].bv_page = sb_page; get_page(sb_page); diff --git a/drivers/md/bcache/util.c b/drivers/md/bcache/util.c index dde6172f3f10..5cc0b49a65fb 100644 --- a/drivers/md/bcache/util.c +++ b/drivers/md/bcache/util.c @@ -222,6 +222,13 @@ uint64_t bch_next_delay(struct bch_ratelimit *d, uint64_t done) : 0; } +/* + * Generally it isn't good to access .bi_io_vec and .bi_vcnt + * directly, the preferred way is bio_add_page, but in + * this case, bch_bio_map() supposes that the bvec table + * is empty, so it is safe to access .bi_vcnt & .bi_io_vec + * in this way even after multipage bvec is supported. + */ void bch_bio_map(struct bio *bio, void *base) { size_t size = bio->bi_iter.bi_size; -- 2.7.4
next prev parent reply other threads:[~2016-12-27 15:55 UTC|newest] Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-12-27 15:55 [PATCH v1 00/54] block: support multipage bvec Ming Lei 2016-12-27 15:55 ` [Cluster-devel] " Ming Lei 2016-12-27 15:55 ` Ming Lei 2016-12-27 15:55 ` Ming Lei 2016-12-27 15:55 ` Ming Lei 2016-12-27 15:55 ` [PATCH v1 01/54] block: drbd: comment on direct access bvec table Ming Lei 2016-12-27 15:55 ` [PATCH v1 02/54] block: loop: comment on direct access to " Ming Lei 2016-12-27 15:55 ` [PATCH v1 03/54] kernel/power/swap.c: " Ming Lei 2016-12-27 15:55 ` Ming Lei 2016-12-27 15:55 ` [PATCH v1 04/54] mm: page_io.c: " Ming Lei 2016-12-27 15:55 ` Ming Lei 2016-12-27 15:55 ` [PATCH v1 05/54] fs/buffer: " Ming Lei 2016-12-27 15:55 ` [PATCH v1 06/54] f2fs: f2fs_read_end_io: " Ming Lei 2016-12-27 15:55 ` Ming Lei 2016-12-27 15:55 ` Ming Lei [this message] 2016-12-27 15:55 ` [PATCH v1 07/54] bcache: " Ming Lei 2016-12-30 16:56 ` Coly Li 2016-12-30 16:56 ` Coly Li 2016-12-27 15:55 ` [PATCH v1 08/54] block: comment on bio_alloc_pages() Ming Lei 2016-12-27 15:55 ` Ming Lei 2016-12-30 10:40 ` Coly Li 2016-12-30 10:40 ` Coly Li 2016-12-30 11:06 ` Coly Li 2016-12-30 11:06 ` Coly Li 2016-12-27 15:55 ` [PATCH v1 09/54] block: comment on bio_iov_iter_get_pages() Ming Lei 2016-12-27 15:55 ` [PATCH v1 10/54] block: introduce flag QUEUE_FLAG_NO_MP Ming Lei 2016-12-27 15:56 ` [PATCH v1 11/54] md: set NO_MP for request queue of md Ming Lei 2016-12-27 15:56 ` Ming Lei 2016-12-27 15:56 ` [PATCH v1 12/54] dm: limit the max bio size as BIO_MAX_PAGES * PAGE_SIZE Ming Lei 2016-12-27 15:56 ` Ming Lei 2017-01-03 16:43 ` Mike Snitzer 2017-01-03 16:43 ` Mike Snitzer 2017-01-06 3:30 ` Ming Lei 2017-01-06 3:30 ` Ming Lei 2016-12-27 15:56 ` [PATCH v1 13/54] block: comments on bio_for_each_segment[_all] Ming Lei 2016-12-27 15:56 ` [PATCH v1 14/54] block: introduce multipage/single page bvec helpers Ming Lei 2016-12-27 15:56 ` [PATCH v1 15/54] block: implement sp version of bvec iterator helpers Ming Lei 2016-12-27 15:56 ` [PATCH v1 16/54] block: introduce bio_for_each_segment_mp() Ming Lei 2016-12-27 15:56 ` [PATCH v1 17/54] block: introduce bio_clone_sp() Ming Lei 2016-12-27 15:56 ` [PATCH v1 18/54] bvec_iter: introduce BVEC_ITER_ALL_INIT Ming Lei 2016-12-27 15:56 ` [PATCH v1 19/54] block: bounce: avoid direct access to bvec table Ming Lei 2016-12-27 15:56 ` [PATCH v1 20/54] block: bounce: don't access bio->bi_io_vec in copy_to_high_bio_irq Ming Lei 2016-12-27 15:56 ` [PATCH v1 21/54] block: introduce bio_can_convert_to_sp() Ming Lei 2016-12-27 15:56 ` [PATCH v1 22/54] block: bounce: convert multipage bvecs into singlepage Ming Lei 2016-12-27 15:56 ` [PATCH v1 23/54] bcache: handle bio_clone() & bvec updating for multipage bvecs Ming Lei 2016-12-27 15:56 ` Ming Lei 2016-12-30 11:01 ` Coly Li 2016-12-30 11:01 ` Coly Li 2016-12-31 10:29 ` Ming Lei 2016-12-31 10:29 ` Ming Lei 2016-12-31 10:29 ` Ming Lei 2016-12-27 15:56 ` [PATCH v1 24/54] blk-merge: compute bio->bi_seg_front_size efficiently Ming Lei 2016-12-27 15:56 ` [PATCH v1 25/54] block: blk-merge: try to make front segments in full size Ming Lei 2016-12-27 15:56 ` [PATCH v1 26/54] block: blk-merge: remove unnecessary check Ming Lei 2016-12-27 15:56 ` [PATCH v1 27/54] block: use bio_for_each_segment_mp() to compute segments count Ming Lei 2016-12-27 15:56 ` [PATCH v1 28/54] block: use bio_for_each_segment_mp() to map sg Ming Lei 2016-12-27 15:56 ` [PATCH v1 29/54] block: introduce bvec_for_each_sp_bvec() Ming Lei 2016-12-27 15:56 ` [PATCH v1 30/54] block: bio: introduce single/multi page version of bio_for_each_segment_all() Ming Lei 2016-12-27 15:56 ` [PATCH v1 31/54] block: introduce bio_segments_all() Ming Lei 2017-01-16 3:19 ` [PATCH v1 00/54] block: support multipage bvec Ming Lei 2017-01-16 15:18 ` Christoph Hellwig 2017-01-17 2:40 ` Ming Lei 2017-01-17 7:50 ` Christoph Hellwig 2017-01-17 8:13 ` Ming Lei
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1482854250-13481-8-git-send-email-tom.leiming@gmail.com \ --to=tom.leiming@gmail.com \ --cc=axboe@fb.com \ --cc=git@linux.ewheeler.net \ --cc=gnehzuil.liu@gmail.com \ --cc=gqjiang@suse.com \ --cc=hch@infradead.org \ --cc=jkosina@suse.cz \ --cc=kent.overstreet@gmail.com \ --cc=linux-bcache@vger.kernel.org \ --cc=linux-block@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-raid@vger.kernel.org \ --cc=mchristi@redhat.com \ --cc=shli@kernel.org \ --cc=viro@ZenIV.linux.org.uk \ --cc=wangyijing@huawei.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.