From: Ilya Dryomov Date: Wed, 26 Jan 2022 18:36:26 +0000 (+0100) Subject: rbd: recognize rxbounce map option X-Git-Tag: v18.0.0~1435^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8d2a456d7055cfb64e6bb9927187e2240b8c4d2a;p=ceph.git rbd: recognize rxbounce map option Fixes: https://tracker.ceph.com/issues/54063 Signed-off-by: Ilya Dryomov --- diff --git a/doc/man/8/rbd.rst b/doc/man/8/rbd.rst index 1f6c841f5b6b..27b176e1ba70 100644 --- a/doc/man/8/rbd.rst +++ b/doc/man/8/rbd.rst @@ -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. diff --git a/src/tools/rbd/action/Kernel.cc b/src/tools/rbd/action/Kernel.cc index 51e9975867e8..aa67eaa6cbb5 100644 --- a/src/tools/rbd/action/Kernel.cc +++ b/src/tools/rbd/action/Kernel.cc @@ -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 {