diff --git a/doc/man/8/rbd.rst b/doc/man/8/rbd.rst index 1f6c841f5b6bc..27b176e1ba70a 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 51e9975867e8d..aa67eaa6cbb51 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 {