This commit is contained in:
JackDoan
2026-04-24 16:48:52 -05:00
parent 8fd724d762
commit c9d5a6e35a

View File

@@ -263,13 +263,12 @@ func (r *Offload) writeWithScratch(buf []byte, iovs *[2]unix.Iovec) (int, error)
// to validVnetHdr during Offload construction so we don't rebuild it here. // to validVnetHdr during Offload construction so we don't rebuild it here.
iovs[1].Base = &buf[0] iovs[1].Base = &buf[0]
iovs[1].SetLen(len(buf)) iovs[1].SetLen(len(buf))
iovPtr := unsafe.Pointer(&iovs[0]) return r.rawWrite(unsafe.Slice(&iovs[0], len(iovs)))
return r.rawWrite(iovPtr, 2)
} }
func (r *Offload) rawWrite(iovs unsafe.Pointer, iovcnt int) (int, error) { func (r *Offload) rawWrite(iovs []unix.Iovec) (int, error) {
for { for {
n, _, errno := syscall.Syscall(unix.SYS_WRITEV, uintptr(r.fd), uintptr(iovs), uintptr(iovcnt)) n, _, errno := syscall.Syscall(unix.SYS_WRITEV, uintptr(r.fd), uintptr(unsafe.Pointer(&iovs[0])), uintptr(len(iovs)))
if errno == 0 { if errno == 0 {
if int(n) < virtioNetHdrLen { if int(n) < virtioNetHdrLen {
return 0, io.ErrShortWrite return 0, io.ErrShortWrite
@@ -352,9 +351,7 @@ func (r *Offload) WriteGSO(hdr []byte, pays [][]byte, gsoSize uint16, isV6 bool,
r.gsoIovs[2+i].SetLen(len(p)) r.gsoIovs[2+i].SetLen(len(p))
} }
iovPtr := unsafe.Pointer(&r.gsoIovs[0]) _, err := r.rawWrite(r.gsoIovs)
iovCnt := len(r.gsoIovs)
_, err := r.rawWrite(iovPtr, iovCnt)
return err return err
} }