I tested this patch with virtio-net regression tests, everything works fine. Tested-by: Lei Yang <leiyang@xxxxxxxxxx> On Mon, Jan 13, 2025 at 5:20 AM Mike Christie <michael.christie@xxxxxxxxxx> wrote: > > On 1/12/25 11:35 AM, michael.christie@xxxxxxxxxx wrote: > > So I think to fix the issue, we would want to: > > > > 1. move the > > > > memcpy(vs_tpg, vs->vs_tpg, len); > > > > to the end of the function after we do the vhost_scsi_flush. This will > > be more complicated than the current memcpy though. We will want to > > merge the local vs_tpg and the vs->vs_tpg like: > > > > for (i = 0; i < VHOST_SCSI_MAX_TARGET; i++) { > > if (vs_tpg[i]) > > vs->vs_tpg[i] = vs_tpg[i]) > > } > > I think I wrote that in reverse. We would want: > > vhost_scsi_flush(vs); > > if (vs->vs_tpg) { > for (i = 0; i < VHOST_SCSI_MAX_TARGET; i++) { > if (vs->vs_tpg[i]) > vs_tpg[i] = vs->vs_tpg[i]) > } > } > > kfree(vs->vs_tpg); > vs->vs_tpg = vs_tpg; > > or we could just allocate the vs_tpg with the vhost_scsi like: > > struct vhost_scsi { > .... > > struct vhost_scsi_tpg *vs_tpg[VHOST_SCSI_MAX_TARGET]; > > then when we loop in vhost_scsi_set/clear_endpoint set/clear the > every vs_tpg entry. >