On Fri, Sep 04, 2020 at 12:50:39PM -0700, Sagi Grimberg wrote: > Currently we allocate rx buffers in a single contiguous buffers for > headers (iser and iscsi) and data trailer. This means that most likely > the data starting offset is aligned to 76 bytes (size of both headers). > > This worked fine for years, but at some point this broke, resulting in > data corruptions in isert when a command comes with immediate data > and the underlying backend device assumes 512 bytes buffer alignment. > > We assume a hard-requirement for all direct I/O buffers to be 512 bytes > aligned. To fix this, we should avoid passing unaligned buffers for I/O. > > Instead, we allocate our recv buffers with some extra space such that we > can have the data portion align to 512 byte boundary. This also means > that we cannot reference headers or data using structure but rather > accessors (as they may move based on alignment). Also, get rid of the > wrong __packed annotation from iser_rx_desc as this has only harmful > effects (not aligned to anything). > > This affects the rx descriptors for iscsi login and data plane. > > Fixes: 3d75ca0adef4 ("block: introduce multi-page bvec helpers") > Reported-by: Stephen Rust <srust@xxxxxxxxxxxxxxx> > Tested-by: Doug Dumitru <doug@xxxxxxxxxxx> > Signed-off-by: Sagi Grimberg <sagi@xxxxxxxxxxx> > --- > Changes from v2: > - fixed 2 redundant newlines > - added fixes tag > Changes from v1: > - revised change log Applied to for-rc, thanks Jason