From: Ming Lei <tom.leiming-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Jens Axboe <axboe-b10kYP2dOMg@public.gmane.org>,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Jan Kara <jack-AlSwsSmVLrQ@public.gmane.org>,
Mike Snitzer <snitzer-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
NeilBrown <neilb-l3A5Bk7waGM@public.gmane.org>,
Ming Lei <tom.leiming-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Rasmus Villemoes
<linux-qQsb+v5E8BnlAoU/VqSP6n9LOBIZ5rWg@public.gmane.org>,
Oleg Drokin <green-SOTZviwpzew/JUsKyNonYw@public.gmane.org>,
Keith Busch <keith.busch-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
"open list:MEMORY MANAGEMENT"
<linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org>,
"open list:DEVICE-MAPPER LVM"
<dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
"open list:TARGET SUBSYSTEM"
<target-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Miklos Szeredi <mszeredi-AlSwsSmVLrQ@public.gmane.org>,
"open list:DRBD DRIVER"
<drbd-dev-cunTk1MwBs8qoQakbn7OcQ@public.gmane.org>,
"open list:STAGING SUBSYSTEM"
<devel-gWbeCf7V1WCQmaza687I9mD2FQJk+8+b@public.gmane.org>,
"open list:TARGET SUBSYSTEM"
<linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Minchan Kim <minchan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Jarod Wilson <jarod-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
Christoph Hellwig <hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
Swee Hua Law <sweehua81-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Kent Overstreet
<kent.overstreet-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"open list:HIBERNATION aka Software Suspend,
aka swsusp" <linux-pm-u79uwXL29TaqPxH82wqD4g@public.gmane.org>
Subject: [PATCH v1 00/27] block: cleanup direct access to .bi_vcnt & .bi_io_vec
Date: Thu, 14 Apr 2016 20:02:18 +0800 [thread overview]
Message-ID: <1460635375-28282-1-git-send-email-tom.leiming@gmail.com> (raw)
Hi Guys,
It is always not a good practice to access bio->bi_vcnt and
bio->bi_io_vec from drivers directly. Also this kind of direct
access will cause trouble when converting to multipage bvecs
because currently drivers may suppose one bvec always include
one page, and use the two fields to figure out how to handle
pages.
Even the actual meaning of the two fields arn't change from
block subsystem's view, but it may change from driver or fs's
view, so this patchset takes a conservative approach to cleanup
direct access to the two fields for avoiding regressions.
The 1st patch introduces the following 3 bio helpers which can be
used inside drivers for avoiding direct access to .bi_vcnt and .bi_io_vec.
bio_pages()
bio_get_base_vec()
bio_set_vec_table()
bio_pages() can be easy to convert to multipage bvecs.
For bio_get_base_vec() and bio_set_vec_table(), they are often used
during initializing a new bio or in case of single bvec bio. With the
two new helpers, it becomes quite easy to audit access to .bi_io_vec
and .bi_vcnt.
Most of the other patches use the 3 helpers to clean up most of direct
access to .bi_vcnt and .bi_io_vec from drivers, except for MD and btrfs,
which two subsystems will be handled with different way in future.
For btrfs, its direct access to .bi_vcnt & .bi_io_vec need to be cleanuped
and audited that there isn't issue once converting to multipage bvecs.
For raid(md), given its usage is quite complicated, we can just
not enable multipage bvecs for raid queue until all its usage
are cleaned up and audited. So it won't be a blocker for multipage
bvecs.
Also bio_add_page() is used in floppy, dm-crypt and fs/logfs to
avoiding direct access to .bi_vcnt & .bi_io_vec.
The patchset can be found in the following tree:
https://github.com/ming1/linux/tree/v4.6-rc-block-next-mpbvecs-cleanup.v1
V1:
- add Reviewed-by
- remove bio_is_full() helper because target can find it
via the return value of bio_add_pc_page() (9/27)
- add comment on another two uses of bio_get_base_vec() (16/27)
- rebased on latest for-next branch of block tree
Ming Lei (27):
block: bio: introduce 3 helpers for cleanup
block: drbd: use bio_get_base_vec() to retrieve the 1st bvec
block: drbd: remove impossible failure handling
block: loop: use bio_get_base_vec() to retrive bvec table
block: pktcdvd: use bio_get_base_vec() to retrive bvec table
block: floppy: use bio_set_vec_table()
block: floppy: use bio_add_page()
staging: lustre: avoid to use bio->bi_vcnt directly
target: avoid to access .bi_vcnt directly
bcache: debug: avoid to access .bi_io_vec directly
bcache: io.c: use bio_set_vec_table
bcache: journal.c: use bio_set_vec_table()
bcache: movinggc: use bio_set_vec_table()
bcache: writeback: use bio_set_vec_table()
bcache: super: use bio_set_vec_table()
bcache: super: use bio_get_base_vec
dm: crypt: use bio_add_page()
dm: dm-io.c: use bio_get_base_vec()
dm: dm.c: replace 'bio->bi_vcnt == 1' with !bio_multiple_segments
dm: dm-bufio.c: use bio_set_vec_table()
fs: logfs: use bio_set_vec_table()
fs: logfs: convert to bio_add_page() in sync_request()
fs: logfs: use bio_add_page() in __bdev_writeseg()
fs: logfs: use bio_add_page() in do_erase()
fs: logfs: remove unnecesary check
kernel/power/swap.c: use bio_get_base_vec()
mm: page_io.c: use bio_get_base_vec()
drivers/block/drbd/drbd_bitmap.c | 4 +-
drivers/block/drbd/drbd_receiver.c | 14 +---
drivers/block/floppy.c | 9 +--
drivers/block/loop.c | 5 +-
drivers/block/pktcdvd.c | 3 +-
drivers/md/bcache/debug.c | 11 ++-
drivers/md/bcache/io.c | 3 +-
drivers/md/bcache/journal.c | 3 +-
drivers/md/bcache/movinggc.c | 6 +-
drivers/md/bcache/super.c | 33 ++++++---
drivers/md/bcache/writeback.c | 4 +-
drivers/md/dm-bufio.c | 3 +-
drivers/md/dm-crypt.c | 8 +--
drivers/md/dm-io.c | 7 +-
drivers/md/dm.c | 3 +-
drivers/staging/lustre/lustre/llite/lloop.c | 9 +--
drivers/target/target_core_pscsi.c | 8 +--
fs/logfs/dev_bdev.c | 107 +++++++++++-----------------
include/linux/bio.h | 21 ++++++
kernel/power/swap.c | 10 ++-
mm/page_io.c | 18 ++++-
21 files changed, 155 insertions(+), 134 deletions(-)
Thanks,
Ming
--
1.9.1
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>,
Al Viro <viro@zeniv.linux.org.uk>,
Andreas Dilger <andreas.dilger@intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
devel@driverdev.osuosl.org (open list:STAGING SUBSYSTEM),
dm-devel@redhat.com (open list:DEVICE-MAPPER (LVM)),
drbd-dev@lists.linbit.com (open list:DRBD DRIVER),
Frank Zago <fzago@cray.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Hannes Reinecke <hare@suse.de>,
James Simmons <jsimmons@infradead.org>, Jan Kara <jack@suse.cz>,
Jarod Wilson <jarod@redhat.com>, Jiri Kosina <jkosina@suse.cz>,
Joe Perches <joe@perches.com>,
"John L. Hammond" <john.hammond@intel.com>,
Julia Lawall <Julia.Lawall@lip6.fr>,
Keith Busch <keith.busch@intel.com>,
Kent Overstreet <kent.overstreet@gmail.com>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
linux-bcache@vger.kernel.org (open list:BCACHE (BLOCK LAYER
CACHE)), linux-mm@kvack.org (open list:MEMORY MANAGEMENT),
linux-pm@vger.kernel.org (open list:HIBERNATION (aka Software
Suspend, aka swsusp)),
linux-raid@vger.kernel.org (open list:SOFTWARE RAID (Multiple
Disks) SUPPORT),
linux-scsi@vger.kernel.org (open list:TARGET SUBSYSTEM),
logfs@logfs.org (open list:LogFS),
lustre-devel@lists.lustre.org (moderated list:STAGING - LUSTRE
PARALLEL FILESYSTEM), Mike Rapoport <mike.rapoport@gmail.com>,
Mike Snitzer <snitzer@redhat.com>,
Miklos Szeredi <mszeredi@suse.cz>,
Minchan Kim <minchan@kernel.org>, NeilBrown <neilb@suse.com>,
NeilBrown <neilb@suse.de>, Oleg Drokin <green@linuxhacker.ru>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Swee Hua Law <sweehua81@gmail.com>,
target-devel@vger.kernel.org (open list:TARGET SUBSYSTEM),
Tejun Heo <tj@kernel.org>
Subject: [PATCH v1 00/27] block: cleanup direct access to .bi_vcnt & .bi_io_vec
Date: Thu, 14 Apr 2016 20:02:18 +0800 [thread overview]
Message-ID: <1460635375-28282-1-git-send-email-tom.leiming@gmail.com> (raw)
Hi Guys,
It is always not a good practice to access bio->bi_vcnt and
bio->bi_io_vec from drivers directly. Also this kind of direct
access will cause trouble when converting to multipage bvecs
because currently drivers may suppose one bvec always include
one page, and use the two fields to figure out how to handle
pages.
Even the actual meaning of the two fields arn't change from
block subsystem's view, but it may change from driver or fs's
view, so this patchset takes a conservative approach to cleanup
direct access to the two fields for avoiding regressions.
The 1st patch introduces the following 3 bio helpers which can be
used inside drivers for avoiding direct access to .bi_vcnt and .bi_io_vec.
bio_pages()
bio_get_base_vec()
bio_set_vec_table()
bio_pages() can be easy to convert to multipage bvecs.
For bio_get_base_vec() and bio_set_vec_table(), they are often used
during initializing a new bio or in case of single bvec bio. With the
two new helpers, it becomes quite easy to audit access to .bi_io_vec
and .bi_vcnt.
Most of the other patches use the 3 helpers to clean up most of direct
access to .bi_vcnt and .bi_io_vec from drivers, except for MD and btrfs,
which two subsystems will be handled with different way in future.
For btrfs, its direct access to .bi_vcnt & .bi_io_vec need to be cleanuped
and audited that there isn't issue once converting to multipage bvecs.
For raid(md), given its usage is quite complicated, we can just
not enable multipage bvecs for raid queue until all its usage
are cleaned up and audited. So it won't be a blocker for multipage
bvecs.
Also bio_add_page() is used in floppy, dm-crypt and fs/logfs to
avoiding direct access to .bi_vcnt & .bi_io_vec.
The patchset can be found in the following tree:
https://github.com/ming1/linux/tree/v4.6-rc-block-next-mpbvecs-cleanup.v1
V1:
- add Reviewed-by
- remove bio_is_full() helper because target can find it
via the return value of bio_add_pc_page() (9/27)
- add comment on another two uses of bio_get_base_vec() (16/27)
- rebased on latest for-next branch of block tree
Ming Lei (27):
block: bio: introduce 3 helpers for cleanup
block: drbd: use bio_get_base_vec() to retrieve the 1st bvec
block: drbd: remove impossible failure handling
block: loop: use bio_get_base_vec() to retrive bvec table
block: pktcdvd: use bio_get_base_vec() to retrive bvec table
block: floppy: use bio_set_vec_table()
block: floppy: use bio_add_page()
staging: lustre: avoid to use bio->bi_vcnt directly
target: avoid to access .bi_vcnt directly
bcache: debug: avoid to access .bi_io_vec directly
bcache: io.c: use bio_set_vec_table
bcache: journal.c: use bio_set_vec_table()
bcache: movinggc: use bio_set_vec_table()
bcache: writeback: use bio_set_vec_table()
bcache: super: use bio_set_vec_table()
bcache: super: use bio_get_base_vec
dm: crypt: use bio_add_page()
dm: dm-io.c: use bio_get_base_vec()
dm: dm.c: replace 'bio->bi_vcnt == 1' with !bio_multiple_segments
dm: dm-bufio.c: use bio_set_vec_table()
fs: logfs: use bio_set_vec_table()
fs: logfs: convert to bio_add_page() in sync_request()
fs: logfs: use bio_add_page() in __bdev_writeseg()
fs: logfs: use bio_add_page() in do_erase()
fs: logfs: remove unnecesary check
kernel/power/swap.c: use bio_get_base_vec()
mm: page_io.c: use bio_get_base_vec()
drivers/block/drbd/drbd_bitmap.c | 4 +-
drivers/block/drbd/drbd_receiver.c | 14 +---
drivers/block/floppy.c | 9 +--
drivers/block/loop.c | 5 +-
drivers/block/pktcdvd.c | 3 +-
drivers/md/bcache/debug.c | 11 ++-
drivers/md/bcache/io.c | 3 +-
drivers/md/bcache/journal.c | 3 +-
drivers/md/bcache/movinggc.c | 6 +-
drivers/md/bcache/super.c | 33 ++++++---
drivers/md/bcache/writeback.c | 4 +-
drivers/md/dm-bufio.c | 3 +-
drivers/md/dm-crypt.c | 8 +--
drivers/md/dm-io.c | 7 +-
drivers/md/dm.c | 3 +-
drivers/staging/lustre/lustre/llite/lloop.c | 9 +--
drivers/target/target_core_pscsi.c | 8 +--
fs/logfs/dev_bdev.c | 107 +++++++++++-----------------
include/linux/bio.h | 21 ++++++
kernel/power/swap.c | 10 ++-
mm/page_io.c | 18 ++++-
21 files changed, 155 insertions(+), 134 deletions(-)
Thanks,
Ming
--
1.9.1
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>,
Al Viro <viro@zeniv.linux.org.uk>,
Andreas Dilger <andreas.dilger@intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
"open list:STAGING SUBSYSTEM" <devel@driverdev.osuosl.org>,
"open list:DEVICE-MAPPER LVM" <dm-devel@redhat.com>,
"open list:DRBD DRIVER" <drbd-dev@lists.linbit.com>,
Frank Zago <fzago@cray.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Hannes Reinecke <hare@suse.de>,
James Simmons <jsimmons@infradead.org>, Jan Kara <jack@suse.cz>,
Jarod Wilson <jarod@redhat.com>, Jiri Kosina <jkosina@suse.cz>,
Joe Perches <joe@perches.com>,
"John L. Hammond" <john.hammond@intel.com>,
Julia Lawall <Julia.Lawall@lip6.fr>,
Keith Busch <keith.busch@intel.com>,
Kent Overstreet <kent.overstreet@gmail.com>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
"open list:BCACHE BLOCK LAYER CACHE"
<linux-bcache@vger.kernel.org>,
"open list:MEMORY MANAGEMENT" <linux-mm@kvack.org>,
"open list:HIBERNATION aka Software Suspend,
aka swsusp" <linux-pm@vger.kernel.org>,
"open list:SOFTWARE RAID Multiple Disks SUPPORT"
<linux-raid@vger.kernel.org>,
"open list:TARGET SUBSYSTEM" <linux-scsi@vger.kernel.org>,
"open list:LogFS" <logfs@logfs.org>,
"moderated list:STAGING - LUSTRE PARALLEL FILESYSTEM"
<lustre-devel@lists.lustre.org>,
Mike Rapoport <mike.rapoport@gmail.com>,
Mike Snitzer <snitzer@redhat.com>,
Miklos Szeredi <mszeredi@suse.cz>,
Minchan Kim <minchan@kernel.org>, NeilBrown <neilb@suse.com>,
NeilBrown <neilb@suse.de>, Oleg Drokin <green@linuxhacker.ru>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Swee Hua Law <sweehua81@gmail.com>,
"open list:TARGET SUBSYSTEM" <target-devel@vger.kernel.org>,
Tejun Heo <tj@kernel.org>
Subject: [PATCH v1 00/27] block: cleanup direct access to .bi_vcnt & .bi_io_vec
Date: Thu, 14 Apr 2016 20:02:18 +0800 [thread overview]
Message-ID: <1460635375-28282-1-git-send-email-tom.leiming@gmail.com> (raw)
Hi Guys,
It is always not a good practice to access bio->bi_vcnt and
bio->bi_io_vec from drivers directly. Also this kind of direct
access will cause trouble when converting to multipage bvecs
because currently drivers may suppose one bvec always include
one page, and use the two fields to figure out how to handle
pages.
Even the actual meaning of the two fields arn't change from
block subsystem's view, but it may change from driver or fs's
view, so this patchset takes a conservative approach to cleanup
direct access to the two fields for avoiding regressions.
The 1st patch introduces the following 3 bio helpers which can be
used inside drivers for avoiding direct access to .bi_vcnt and .bi_io_vec.
bio_pages()
bio_get_base_vec()
bio_set_vec_table()
bio_pages() can be easy to convert to multipage bvecs.
For bio_get_base_vec() and bio_set_vec_table(), they are often used
during initializing a new bio or in case of single bvec bio. With the
two new helpers, it becomes quite easy to audit access to .bi_io_vec
and .bi_vcnt.
Most of the other patches use the 3 helpers to clean up most of direct
access to .bi_vcnt and .bi_io_vec from drivers, except for MD and btrfs,
which two subsystems will be handled with different way in future.
For btrfs, its direct access to .bi_vcnt & .bi_io_vec need to be cleanuped
and audited that there isn't issue once converting to multipage bvecs.
For raid(md), given its usage is quite complicated, we can just
not enable multipage bvecs for raid queue until all its usage
are cleaned up and audited. So it won't be a blocker for multipage
bvecs.
Also bio_add_page() is used in floppy, dm-crypt and fs/logfs to
avoiding direct access to .bi_vcnt & .bi_io_vec.
The patchset can be found in the following tree:
https://github.com/ming1/linux/tree/v4.6-rc-block-next-mpbvecs-cleanup.v1
V1:
- add Reviewed-by
- remove bio_is_full() helper because target can find it
via the return value of bio_add_pc_page() (9/27)
- add comment on another two uses of bio_get_base_vec() (16/27)
- rebased on latest for-next branch of block tree
Ming Lei (27):
block: bio: introduce 3 helpers for cleanup
block: drbd: use bio_get_base_vec() to retrieve the 1st bvec
block: drbd: remove impossible failure handling
block: loop: use bio_get_base_vec() to retrive bvec table
block: pktcdvd: use bio_get_base_vec() to retrive bvec table
block: floppy: use bio_set_vec_table()
block: floppy: use bio_add_page()
staging: lustre: avoid to use bio->bi_vcnt directly
target: avoid to access .bi_vcnt directly
bcache: debug: avoid to access .bi_io_vec directly
bcache: io.c: use bio_set_vec_table
bcache: journal.c: use bio_set_vec_table()
bcache: movinggc: use bio_set_vec_table()
bcache: writeback: use bio_set_vec_table()
bcache: super: use bio_set_vec_table()
bcache: super: use bio_get_base_vec
dm: crypt: use bio_add_page()
dm: dm-io.c: use bio_get_base_vec()
dm: dm.c: replace 'bio->bi_vcnt == 1' with !bio_multiple_segments
dm: dm-bufio.c: use bio_set_vec_table()
fs: logfs: use bio_set_vec_table()
fs: logfs: convert to bio_add_page() in sync_request()
fs: logfs: use bio_add_page() in __bdev_writeseg()
fs: logfs: use bio_add_page() in do_erase()
fs: logfs: remove unnecesary check
kernel/power/swap.c: use bio_get_base_vec()
mm: page_io.c: use bio_get_base_vec()
drivers/block/drbd/drbd_bitmap.c | 4 +-
drivers/block/drbd/drbd_receiver.c | 14 +---
drivers/block/floppy.c | 9 +--
drivers/block/loop.c | 5 +-
drivers/block/pktcdvd.c | 3 +-
drivers/md/bcache/debug.c | 11 ++-
drivers/md/bcache/io.c | 3 +-
drivers/md/bcache/journal.c | 3 +-
drivers/md/bcache/movinggc.c | 6 +-
drivers/md/bcache/super.c | 33 ++++++---
drivers/md/bcache/writeback.c | 4 +-
drivers/md/dm-bufio.c | 3 +-
drivers/md/dm-crypt.c | 8 +--
drivers/md/dm-io.c | 7 +-
drivers/md/dm.c | 3 +-
drivers/staging/lustre/lustre/llite/lloop.c | 9 +--
drivers/target/target_core_pscsi.c | 8 +--
fs/logfs/dev_bdev.c | 107 +++++++++++-----------------
include/linux/bio.h | 21 ++++++
kernel/power/swap.c | 10 ++-
mm/page_io.c | 18 ++++-
21 files changed, 155 insertions(+), 134 deletions(-)
Thanks,
Ming
--
1.9.1
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Ming Lei <tom.leiming@gmail.com>
To: Jens Axboe <axboe-b10kYP2dOMg@public.gmane.org>,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Jan Kara <jack-AlSwsSmVLrQ@public.gmane.org>,
Mike Snitzer <snitzer-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
NeilBrown <neilb-l3A5Bk7waGM@public.gmane.org>,
Ming Lei <tom.leiming-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Rasmus Villemoes
<linux-qQsb+v5E8BnlAoU/VqSP6n9LOBIZ5rWg@public.gmane.org>,
Oleg Drokin <green-SOTZviwpzew/JUsKyNonYw@public.gmane.org>,
Keith Busch <keith.busch-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
"open list:MEMORY MANAGEMENT"
<linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org>,
"open list:DEVICE-MAPPER LVM"
<dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
"open list:TARGET SUBSYSTEM"
<target-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Miklos Szeredi <mszeredi-AlSwsSmVLrQ@public.gmane.org>,
"open list:DRBD DRIVER"
<drbd-dev-cunTk1MwBs8qoQakbn7OcQ@public.gmane.org>,
"open list:STAGING SUBSYSTEM"
<devel-gWbeCf7V1WCQmaza687I9mD2FQJk+8+b@public.gmane.org>,
"open list:TARGET SUBSYSTEM"
<linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Minchan Kim <minchan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Jarod Wilson <jarod-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
Christoph Hellwig <hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
Swee Hua Law <sweehua81-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Kent Overstreet
<kent.overstreet-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"open list:HIBERNATION aka Software Suspend,
aka swsusp" <linux-pm-u79uwXL29TaqPxH82wqD4g@public.gmane.org>
Subject: [lustre-devel] [PATCH v1 00/27] block: cleanup direct access to .bi_vcnt & .bi_io_vec
Date: Thu, 14 Apr 2016 20:02:18 +0800 [thread overview]
Message-ID: <1460635375-28282-1-git-send-email-tom.leiming@gmail.com> (raw)
Hi Guys,
It is always not a good practice to access bio->bi_vcnt and
bio->bi_io_vec from drivers directly. Also this kind of direct
access will cause trouble when converting to multipage bvecs
because currently drivers may suppose one bvec always include
one page, and use the two fields to figure out how to handle
pages.
Even the actual meaning of the two fields arn't change from
block subsystem's view, but it may change from driver or fs's
view, so this patchset takes a conservative approach to cleanup
direct access to the two fields for avoiding regressions.
The 1st patch introduces the following 3 bio helpers which can be
used inside drivers for avoiding direct access to .bi_vcnt and .bi_io_vec.
bio_pages()
bio_get_base_vec()
bio_set_vec_table()
bio_pages() can be easy to convert to multipage bvecs.
For bio_get_base_vec() and bio_set_vec_table(), they are often used
during initializing a new bio or in case of single bvec bio. With the
two new helpers, it becomes quite easy to audit access to .bi_io_vec
and .bi_vcnt.
Most of the other patches use the 3 helpers to clean up most of direct
access to .bi_vcnt and .bi_io_vec from drivers, except for MD and btrfs,
which two subsystems will be handled with different way in future.
For btrfs, its direct access to .bi_vcnt & .bi_io_vec need to be cleanuped
and audited that there isn't issue once converting to multipage bvecs.
For raid(md), given its usage is quite complicated, we can just
not enable multipage bvecs for raid queue until all its usage
are cleaned up and audited. So it won't be a blocker for multipage
bvecs.
Also bio_add_page() is used in floppy, dm-crypt and fs/logfs to
avoiding direct access to .bi_vcnt & .bi_io_vec.
The patchset can be found in the following tree:
https://github.com/ming1/linux/tree/v4.6-rc-block-next-mpbvecs-cleanup.v1
V1:
- add Reviewed-by
- remove bio_is_full() helper because target can find it
via the return value of bio_add_pc_page() (9/27)
- add comment on another two uses of bio_get_base_vec() (16/27)
- rebased on latest for-next branch of block tree
Ming Lei (27):
block: bio: introduce 3 helpers for cleanup
block: drbd: use bio_get_base_vec() to retrieve the 1st bvec
block: drbd: remove impossible failure handling
block: loop: use bio_get_base_vec() to retrive bvec table
block: pktcdvd: use bio_get_base_vec() to retrive bvec table
block: floppy: use bio_set_vec_table()
block: floppy: use bio_add_page()
staging: lustre: avoid to use bio->bi_vcnt directly
target: avoid to access .bi_vcnt directly
bcache: debug: avoid to access .bi_io_vec directly
bcache: io.c: use bio_set_vec_table
bcache: journal.c: use bio_set_vec_table()
bcache: movinggc: use bio_set_vec_table()
bcache: writeback: use bio_set_vec_table()
bcache: super: use bio_set_vec_table()
bcache: super: use bio_get_base_vec
dm: crypt: use bio_add_page()
dm: dm-io.c: use bio_get_base_vec()
dm: dm.c: replace 'bio->bi_vcnt == 1' with !bio_multiple_segments
dm: dm-bufio.c: use bio_set_vec_table()
fs: logfs: use bio_set_vec_table()
fs: logfs: convert to bio_add_page() in sync_request()
fs: logfs: use bio_add_page() in __bdev_writeseg()
fs: logfs: use bio_add_page() in do_erase()
fs: logfs: remove unnecesary check
kernel/power/swap.c: use bio_get_base_vec()
mm: page_io.c: use bio_get_base_vec()
drivers/block/drbd/drbd_bitmap.c | 4 +-
drivers/block/drbd/drbd_receiver.c | 14 +---
drivers/block/floppy.c | 9 +--
drivers/block/loop.c | 5 +-
drivers/block/pktcdvd.c | 3 +-
drivers/md/bcache/debug.c | 11 ++-
drivers/md/bcache/io.c | 3 +-
drivers/md/bcache/journal.c | 3 +-
drivers/md/bcache/movinggc.c | 6 +-
drivers/md/bcache/super.c | 33 ++++++---
drivers/md/bcache/writeback.c | 4 +-
drivers/md/dm-bufio.c | 3 +-
drivers/md/dm-crypt.c | 8 +--
drivers/md/dm-io.c | 7 +-
drivers/md/dm.c | 3 +-
drivers/staging/lustre/lustre/llite/lloop.c | 9 +--
drivers/target/target_core_pscsi.c | 8 +--
fs/logfs/dev_bdev.c | 107 +++++++++++-----------------
include/linux/bio.h | 21 ++++++
kernel/power/swap.c | 10 ++-
mm/page_io.c | 18 ++++-
21 files changed, 155 insertions(+), 134 deletions(-)
Thanks,
Ming
--
1.9.1
next reply other threads:[~2016-04-14 12:02 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-14 12:02 Ming Lei [this message]
2016-04-14 12:02 ` [lustre-devel] [PATCH v1 00/27] block: cleanup direct access to .bi_vcnt & .bi_io_vec Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 01/27] block: bio: introduce 3 helpers for cleanup Ming Lei
2016-04-14 12:02 ` [PATCH v1 02/27] block: drbd: use bio_get_base_vec() to retrieve the 1st bvec Ming Lei
2016-04-14 12:02 ` [PATCH v1 03/27] block: drbd: remove impossible failure handling Ming Lei
2016-04-14 12:02 ` [PATCH v1 04/27] block: loop: use bio_get_base_vec() to retrive bvec table Ming Lei
2016-04-14 12:02 ` [PATCH v1 05/27] block: pktcdvd: " Ming Lei
2016-04-14 12:02 ` [PATCH v1 06/27] block: floppy: use bio_set_vec_table() Ming Lei
2016-04-14 12:02 ` [PATCH v1 07/27] block: floppy: use bio_add_page() Ming Lei
2016-04-14 12:02 ` [PATCH v1 08/27] staging: lustre: avoid to use bio->bi_vcnt directly Ming Lei
2016-04-14 12:02 ` [lustre-devel] " Ming Lei
2016-04-14 12:02 ` [PATCH v1 09/27] target: avoid to access .bi_vcnt directly Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 10/27] bcache: debug: avoid to access .bi_io_vec directly Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 11/27] bcache: io.c: use bio_set_vec_table Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 12/27] bcache: journal.c: use bio_set_vec_table() Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 13/27] bcache: movinggc: " Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 14/27] bcache: writeback: " Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 15/27] bcache: super: " Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 16/27] bcache: super: use bio_get_base_vec Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 17/27] dm: crypt: use bio_add_page() Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 18/27] dm: dm-io.c: use bio_get_base_vec() Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 19/27] dm: dm.c: replace 'bio->bi_vcnt == 1' with !bio_multiple_segments Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 20/27] dm: dm-bufio.c: use bio_set_vec_table() Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 21/27] fs: logfs: " Ming Lei
2016-04-14 12:02 ` [PATCH v1 22/27] fs: logfs: convert to bio_add_page() in sync_request() Ming Lei
2016-04-14 12:02 ` [PATCH v1 23/27] fs: logfs: use bio_add_page() in __bdev_writeseg() Ming Lei
2016-04-14 12:02 ` [PATCH v1 24/27] fs: logfs: use bio_add_page() in do_erase() Ming Lei
2016-04-14 12:02 ` [PATCH v1 25/27] fs: logfs: remove unnecesary check Ming Lei
2016-04-14 12:02 ` [PATCH v1 26/27] kernel/power/swap.c: use bio_get_base_vec() Ming Lei
2016-04-14 12:02 ` Ming Lei
2016-04-14 12:02 ` [PATCH v1 27/27] mm: page_io.c: " Ming Lei
2016-04-14 12:02 ` 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=1460635375-28282-1-git-send-email-tom.leiming@gmail.com \
--to=tom.leiming-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=axboe-b10kYP2dOMg@public.gmane.org \
--cc=devel-gWbeCf7V1WCQmaza687I9mD2FQJk+8+b@public.gmane.org \
--cc=dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=drbd-dev-cunTk1MwBs8qoQakbn7OcQ@public.gmane.org \
--cc=green-SOTZviwpzew/JUsKyNonYw@public.gmane.org \
--cc=hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=jack-AlSwsSmVLrQ@public.gmane.org \
--cc=jarod-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=keith.busch-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=kent.overstreet-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
--cc=linux-pm-u79uwXL29TaqPxH82wqD4g@public.gmane.org \
--cc=linux-qQsb+v5E8BnlAoU/VqSP6n9LOBIZ5rWg@public.gmane.org \
--cc=linux-scsi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=minchan-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=mszeredi-AlSwsSmVLrQ@public.gmane.org \
--cc=neilb-l3A5Bk7waGM@public.gmane.org \
--cc=snitzer-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=sweehua81-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=target-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/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: link
Be 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.