pyocf: fix setting data offset in IO

When setting data in IO, the offset should be stored in
IO itself, not data object.

Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:
Adam Rutkowski 2019-05-31 14:43:06 -04:00
parent dc2b76e655
commit 7b7d65e092

View File

@ -70,7 +70,7 @@ class VolumeProperties(Structure):
class VolumeIoPriv(Structure): class VolumeIoPriv(Structure):
_fields_ = [("_data", c_void_p)] _fields_ = [("_data", c_void_p), ("_offset", c_uint64)]
class Volume(Structure): class Volume(Structure):
@ -220,7 +220,7 @@ class Volume(Structure):
OcfLib.getInstance().ocf_io_get_priv(io), POINTER(VolumeIoPriv) OcfLib.getInstance().ocf_io_get_priv(io), POINTER(VolumeIoPriv)
) )
data = Data.get_instance(data) data = Data.get_instance(data)
data.position = offset io_priv.contents._offset = offset
io_priv.contents._data = data.handle io_priv.contents._data = data.handle
return 0 return 0
@ -268,16 +268,22 @@ class Volume(Structure):
try: try:
self.stats[IoDir(io.contents._dir)] += 1 self.stats[IoDir(io.contents._dir)] += 1
io_priv = cast(
OcfLib.getInstance().ocf_io_get_priv(io), POINTER(VolumeIoPriv)
)
offset = io_priv.contents._offset
if io.contents._dir == IoDir.WRITE: if io.contents._dir == IoDir.WRITE:
src_ptr = cast(io.contents._ops.contents._get_data(io), c_void_p) src_ptr = cast(io.contents._ops.contents._get_data(io), c_void_p)
src = Data.get_instance(src_ptr.value) src = Data.get_instance(src_ptr.value).handle.value + offset
dst = self._storage + io.contents._addr dst = self._storage + io.contents._addr
elif io.contents._dir == IoDir.READ: elif io.contents._dir == IoDir.READ:
dst_ptr = cast(io.contents._ops.contents._get_data(io), c_void_p) dst_ptr = cast(io.contents._ops.contents._get_data(io), c_void_p)
dst = Data.get_instance(dst_ptr.value) dst = Data.get_instance(dst_ptr.value).handle.value + offset
src = self._storage + io.contents._addr src = self._storage + io.contents._addr
memmove(dst, src, io.contents._bytes) memmove(dst, src, io.contents._bytes)
io_priv.contents._offset += io.contents._bytes
io.contents._end(io, 0) io.contents._end(io, 0)
except: except: