]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: recognize rxbounce map option
authorIlya Dryomov <idryomov@gmail.com>
Wed, 26 Jan 2022 18:36:26 +0000 (19:36 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 4 Feb 2022 18:04:37 +0000 (19:04 +0100)
Fixes: https://tracker.ceph.com/issues/54063
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
doc/man/8/rbd.rst
src/tools/rbd/action/Kernel.cc

index 1f6c841f5b6bcf2e1339b2d012ffaf9450eaf288..27b176e1ba70a4d0f2af71c874f78eae50390fa5 100644 (file)
@@ -904,6 +904,15 @@ Per mapping (block device) `rbd device map` options:
   mode (since 5.11).  If the daemon denies 'secure' mode in favor of 'crc'
   mode, agree to 'crc' mode.
 
+* rxbounce - Use a bounce buffer when receiving data (since 5.17).  The default
+  behaviour is to read directly into the destination buffer.  A bounce buffer
+  is needed if the destination buffer isn't guaranteed to be stable (i.e. remain
+  unchanged while it is being read to).  In particular this is the case for
+  Windows where a system-wide "dummy" (throwaway) page may be mapped into the
+  destination buffer in order to generate a single large I/O.  Otherwise,
+  "libceph: ... bad crc/signature" or "libceph: ... integrity error, bad crc"
+  errors and associated performance degradation are expected.
+
 * udev - Wait for udev device manager to finish executing all matching
   "add" rules and release the device before exiting (default).  This option
   is not passed to the kernel.
index 51e9975867e8d1e5e8067e3bcc71bb58d649b172..aa67eaa6cbb51b19099e63ca32a6408bc9b0dc1d 100644 (file)
@@ -208,6 +208,8 @@ static int parse_map_options(const std::string &options_string,
       if (put_map_option_value("ms_mode", value_char, map_option_ms_mode_cb,
                                map_options))
         return -EINVAL;
+    } else if (!strcmp(this_char, "rxbounce")) {
+      put_map_option("rxbounce", this_char, map_options);
     } else if (!strcmp(this_char, "udev") || !strcmp(this_char, "noudev")) {
       put_map_option("udev", this_char, map_options);
     } else {