On Mon, Aug 31, 2020 at 08:08:26PM -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. > > Reported-by: Stephen Rust <srust@xxxxxxxxxxxxxxx> > Tested-by: Doug Dumitru <doug@xxxxxxxxxxx> > Signed-off-by: Sagi Grimberg <sagi@xxxxxxxxxxx> > --- > Changes from v1: > - revised change log This still needs to identify when this regression occurred for backporting, what is the fixes line? Jason