[RFC PATCH 17/17] Documentation: update notes in biovecs about arbitrarily sized bios

Dongsu Park
2014-12-22T11:52:25Z

Update block/biovecs.txt so that it includes a note on what kind of
effects arbitrarily sized bios would bring to the block layer.
Also fix a trivial typo, bio_iter_iovec.

Signed-off-by: Dongsu Park <dongsu.park@profitbricks.com>
Cc: Kent Overstreet <kmo@daterainc.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: linux-doc@vger.kernel.org
---
Documentation/block/biovecs.txt | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/Documentation/block/biovecs.txt b/Documentation/block/biovecs.txt
index 74a32ad..339045d 100644
--- a/Documentation/block/biovecs.txt
+++ b/Documentation/block/biovecs.txt
@@ -24,7 +24,7 @@ particular, presenting the illusion of partially completed biovecs so that
normal code doesn't have to deal with bi_bvec_done.

* Driver code should no longer refer to biovecs directly; we now have
- bio_iovec() and bio_iovec_iter() macros that return literal struct biovecs,
+ bio_iovec() and bio_iter_iovec() macros that return literal struct biovecs,
constructed from the raw biovecs but taking into account bi_bvec_done and
bi_size.

@@ -109,3 +109,18 @@ Other implications:
over all the biovecs in the new bio - which is silly as it's not needed.

So, don't use bi_vcnt anymore.
+
+ * As of 3.18, block layer is written based on merging biovecs. Its goal is
+ to avoid having to split bios; upper layer code such as bio_add_page()
+ checks what the underlying device can handle, and tries to always create
+ bios that don't need to be split. However, this approach has been actually
+ cumbersome and error-prone. It eventually breaks down with stacked devices
+ and devices with dynamic limits, which then adds a lot of complexity.
+
+ So its new interface allows the block layer to split bios as needed, so we
+ could eliminate a lot of complexity elsewhere - particularly in stacked
+ drivers. Code that creates bios can then create whatever size bios are
+ convenient, and more importantly stacked drivers don't have to deal with
+ both their own bio size limitations and the limitations of the underlying
+ devices. Thus there's no need to define ->merge_bvec_fn() callbacks for
+ individual block drivers.
--
2.1.0