OpenCloudOS-Kernel/include/linux/ceph
Ilya Dryomov 038b8d1d1a libceph: optionally use bounce buffer on recv path in crc mode
Both msgr1 and msgr2 in crc mode are zero copy in the sense that
message data is read from the socket directly into the destination
buffer.  We assume that the destination buffer is stable (i.e. remains
unchanged while it is being read to) though.  Otherwise, CRC errors
ensue:

  libceph: read_partial_message 0000000048edf8ad data crc 1063286393 != exp. 228122706
  libceph: osd1 (1)192.168.122.1:6843 bad crc/signature

  libceph: bad data crc, calculated 57958023, expected 1805382778
  libceph: osd2 (2)192.168.122.1:6876 integrity error, bad crc

Introduce rxbounce option to enable use of a bounce buffer when
receiving message data.  In particular this is needed if a mapped
image is a Windows VM disk, passed to QEMU.  Windows has a system-wide
"dummy" page that may be mapped into the destination buffer (potentially
more than once into the same buffer) by the Windows Memory Manager in
an effort to generate a single large I/O [1][2].  QEMU makes a point of
preserving overlap relationships when cloning I/O vectors, so krbd gets
exposed to this behaviour.

[1] "What Is Really in That MDL?"
    https://docs.microsoft.com/en-us/previous-versions/windows/hardware/design/dn614012(v=vs.85)
[2] https://blogs.msmvps.com/kernelmustard/2005/05/04/dummy-pages/

URL: https://bugzilla.redhat.com/show_bug.cgi?id=1973317
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
2022-02-02 18:50:36 +01:00
..
auth.h libceph: set global_id as soon as we get an auth ticket 2021-06-24 21:03:17 +02:00
buffer.h libceph: allow ceph_buffer_put() to receive a NULL ceph_buffer 2019-08-22 10:47:41 +02:00
ceph_debug.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ceph_features.h libceph, ceph: get and handle cluster maps with addrvecs 2020-12-14 23:21:50 +01:00
ceph_frag.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ceph_fs.h ceph: don't rely on error_string to validate blocklisted session. 2021-11-08 03:29:51 +01:00
ceph_hash.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
cls_lock_client.h rbd: support for object-map and fast-diff 2019-07-08 14:01:45 +02:00
debugfs.h libceph: drop CEPH_DEFINE_SHOW_FUNC 2020-03-30 12:42:40 +02:00
decode.h libceph, ceph: implement msgr2.1 protocol (crc and secure modes) 2020-12-14 23:21:50 +01:00
libceph.h libceph: optionally use bounce buffer on recv path in crc mode 2022-02-02 18:50:36 +01:00
mdsmap.h libceph, ceph: get and handle cluster maps with addrvecs 2020-12-14 23:21:50 +01:00
messenger.h libceph: optionally use bounce buffer on recv path in crc mode 2022-02-02 18:50:36 +01:00
mon_client.h libceph, rbd, ceph: "blacklist" -> "blocklist" 2020-10-12 15:29:26 +02:00
msgpool.h libceph: preallocate message data items 2018-10-22 10:28:22 +02:00
msgr.h libceph: add __maybe_unused to DEFINE_MSGR2_FEATURE 2020-12-28 20:34:33 +01:00
osd_client.h libceph, ceph: move ceph_osdc_copy_from() into cephfs code 2021-11-08 03:29:52 +01:00
osdmap.h libceph, ceph: get and handle cluster maps with addrvecs 2020-12-14 23:21:50 +01:00
pagelist.h libceph: introduce ceph_pagelist_alloc() 2018-10-22 10:28:21 +02:00
rados.h libceph, rbd, ceph: "blacklist" -> "blocklist" 2020-10-12 15:29:26 +02:00
string_table.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
striper.h rbd: support for object-map and fast-diff 2019-07-08 14:01:45 +02:00
types.h ceph: add mount option to limit caps count 2019-03-05 18:55:17 +01:00